2015-12-08 2 views
0

Что может быть хорошей реализации osgi сценария ниже?Как разрешить потребителю выбрать конкретного поставщика 3party

У меня есть общий алгоритм, который разделен на несколько модулей. Идея заключается в том, что каждый модуль может быть расширен третьим лицом с конкретными потребностями в конфигурации. Мой главный алгоритм настраивается пользователем главным образом для выбора того, какой модуль включать. Поскольку этот файл конфигурации может быть трудным для записи, я хочу создать рабочую среду, которая поможет ему сделать это.

Моя первая идея состояла в том, чтобы рассмотреть мой основной алгоритм как потребитель нескольких поставщиков модулей с использованием DS. Вариант использования: пользователь настраивает основной алгоритм и подмодули, которые он хочет использовать; то, когда он запускает алгоритм, я хочу, чтобы рабочий стол создавал службу главного алгоритма с хорошей конфигурацией. Но если я понимаю, службы в osgi предназначены для независимого поставщика. Полезны ли услуги в моем случае?

ответ

0

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

  • Define интерфейсов в ваших связках, которые определяют пути, что ваш алгоритм может быть расширен
  • Используйте сервисный слой OSGi для сбора Реализации интерфейсы (DS может помочь вам здесь)
  • У вас есть класс/объект конфигурации, который определяет, какие из вышеперечисленных элементов выбраны/активированы для конкретного экземпляра.
  • Когда вы выполняете алгоритм, найдите необходимые сервисы с уровня сервиса и используй их.

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

+0

Хорошо, спасибо. Чтобы быть более точным, что вы подразумеваете под «собиранием реализаций», все ли модули должны быть созданы в классе коллекционеров? Главный алгоритм уже не является сервисом? И поиск выполняется с помощью низкого уровня osgi api ex: ServiceTracker? – cde

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