2015-04-30 7 views
1

У нас есть стандартный плагин Eclipse с обычными элементами GUI, и поскольку наши приложения не имеют одинаковой структуры, регистрация этих элементов выполняется в виде фрагмента, например:Запуск и остановка хост-модулей

<fragment> 
    <extension point="org.eclipse.ui.menus"> 
     <menuContribution allPopups="false" locationURI="popup:org.acme.menu> 
      <command commandId="org.acme.command" style="push" /> 
     </menuContribution> 
    </extension> 
</fragment> 

Теперь все работает должным образом. Проблема возникает при остановке подключаемого модуля хоста, поскольку, очевидно, фрагмент также не останавливается, рассматриваемое меню остается заполненным, страницы предпочтений остаются в диалоговом окне и т. Д.

I previously asked Если бы я мог просто начать и остановить фрагмент напрямую, но было подтверждено, что вы не должны (и на самом деле не можете) делать подобные вещи фрагментам.

Затем я начал устанавливать/удалять фрагмент, который приводит к некоторым bug in the PackageAdmin.

Насколько я могу судить, это справедливая игра, чтобы поместить регистрацию элементов GUI во фрагмент, и, насколько я понимаю, жизненный цикл фрагмента должен быть привязан к хосту, поэтому он не должен вносить вклад в GUI элементов, когда хост остановлен.

Может ли кто-нибудь указать, что я здесь делаю неправильно?

ответ

0

Объявление точки расширения доступно с любого установленного плагина или фрагмента независимо от того, были ли они запущены или нет. Остановка плагина хоста не сделает объявление этого меню недоступным.

Для этого вам может потребоваться зарегистрировать вклад в меню программно, когда пучок запускается и удаляется, когда пучок останавливается. Это, вероятно, означает использование отдельного плагина, а не фрагмента, поскольку фрагменты не имеют активаторов.

+0

Очевидно, что точки расширения действительно нарушают каждое правило OSGi, поэтому они устарели и не должны использоваться вообще. Я не знал этого. –

Смежные вопросы