Межплагиновая связь в Eclipse
Вопрос
Можно ли создать плагины Eclipse, которые автоматически обнаруживают друг друга?
Я разрабатываю набор плагинов, которые должны работать в двух основных ситуациях:
- индивидуально
- согласованно друг с другом.
При индивидуальном запуске плагины должны «просто работать», но при совместном использовании они будут использовать часть одного и того же содержимого модели, и один из плагинов должен предоставить пользователю список других плагинов для обмена контентом.например:
Плагин Foo обнаружил следующие плагины, которые он может поделиться онтологиями с:
[ ] Плагин бара
[ ] Плагин Баз
[ ] Не делиться
Предлагает ли Eclipse какие-либо внутренние методы публикации/обнаружения, которые облегчили бы такое автоматическое обнаружение других плагинов?
Решение
Ответ должен быть через Декларативная служба, который сочетает в себе преимущества как расширений eclipse xml, так и служб osgi POJO.Что-то неявно динамичное, как службы osgi, но загружаемое «по требованию», как расширения eclipse.
Представленные в 2006 году для eclipse3.3, вы найдете эти концепции, проиллюстрированные в эта презентация.
Декларативные службы дают возможность определить ссылку на другие службы.Также можно указать мощность ссылки.Мощность задается с помощью двух чисел: первое, 0 или 1, указывает на необязательность, второе, 1 или n, указывает на кратность.
На практике те DS (декларативные службы) не просты в использовании, так как вам необходимо получить доступ к BundleContext, что означает отслеживание BundleActivator, что не всегда легко...
Если вам нужно определить какую-то модель сервис-ориентированных компонентов, эта презентация должен предоставить вам различные альтернативы, существующие сегодня, а также подробно описать эти «декларативные службы».
Чтобы опубликовать то, что rcreswick нашел в отношении DS:
- Начало работы с OSGi: Знакомство с декларативными сервисами
- Начало работы с OSGi: Декларативные службы и зависимости
Другие советы
Что ж, реестр служб OSGI может обеспечить совместное использование служб на основе pojo во время выполнения, а не самих плагинов.Есть несколько вариантов облегчить это, например, кодирование непосредственно в OSGI API, Declarative Services, Spring DM и iPojo (я уверен, что есть и другие).
Возможно, вы захотите воспользоваться шаблоном доски как средством реализации динамического решения в стиле наблюдателя/наблюдаемого.