OSGi и управление компонентами - PullRequest
1 голос
/ 12 ноября 2011

У меня есть динамическое приложение, которое использует OSGi для загрузки модульной функциональности во время выполнения. Пакеты OSGi содержат модульную функциональность, и приложение загружает пакеты, когда они необходимы. Этот подход работает хорошо, но я хотел бы более детальное решение. Пакеты содержат компоненты, управляемые через декларативные сервисы. Я хотел бы иметь возможность загружать комплект и включать только те компоненты, которые необходимы внутри комплекта. Я провел исследование в этой области, но не могу найти решение, которое меня устраивает. Один из подходов заключался в создании компонента «привратника», который всегда включен в комплекте, и через ComponentContext он может вызывать включение и отключение компонента. Это жизнеспособное решение, но я не мог найти способ, чтобы «привратник» «знал» о других компонентах пакета без жесткого кодирования имен компонентов как свойств в XML-дескрипторе SCR «привратники».

Я предпочитаю способ загрузки пакетов и «знать» обо всех компонентах в загруженных пакетах. Уметь определять, в каком пакете находятся компоненты и в каком состоянии они находятся в данный момент (аналогично команде консоли lino Equinox, в которой перечислены все компоненты). Я хотел бы включать и отключать компоненты при необходимости.

Как консоль делает это и как я могу сделать это в приложении?

Обновление: @ Нил Бартлетт: Извините за задержку. Я должен был перейти к чему-то еще. Теперь я вернулся к этому вопросу. Действительно был бы признателен за любую дополнительную помощь. Мое приложение основано на ролях. Мне нужно включить компоненты на основе функциональности, которую они предоставляют. Цель состоит в том, чтобы все компоненты на основе ролей были изначально отключены. При изменении роли менеджер ролей опрашивает каждый компонент на предмет его предоставленной функциональности и определяет, загружать ли его. Каждый компонент будет передавать информацию о том, какие функции он предоставляет (через общий интерфейс службы). ScrService не позволит мне включить изначально отключенный компонент службы. Первоначально включить компоненты и позволить ScrService отключить их как можно скорее во время запуска приложения, не соответствует моим потребностям.

Ответы [ 3 ]

1 голос
/ 12 ноября 2011

Взгляните на ScrService .У равноденствия и Феликса есть это.

Однако компоненты можно загружать лениво, т. Е. Только тогда, когда это необходимо для других компонентов / комплектов;но это, возможно, не то, что вы хотите.

0 голосов
/ 03 февраля 2014

У меня похожая проблема, но для другой цели: - У меня есть служба администрирования установки и настройки apache-файлов для внешней настройки моих компонентов с помощью файлов свойств.- Мне нужно было убедиться, что некоторые компоненты получают конфигурацию из внешнего файла, и единственный способ, который я нашел до сих пор, - это пометить мои компоненты с помощью ConfigurationPolicy.REQUIRED.- Но таким образом мои проекты плагинов не запускаются в Eclipse (где нет конфигурационных файлов).- Component.xml также содержит конфигурацию разработки по умолчанию, так что я согласен с этим, просто мой компонент не запускается, пока не будут доступны данные конфигурации, доступные для configadmin.Мои компоненты неудовлетворены таким образом, пока кто-то не создаст запись в configadmin.- Я выяснил, что если я создам расширитель командной строки osgi, который отправляет пустые конфигурации в служебные pid, они запустятся со значениями по умолчанию в файлах component.xml.- Я просто пришел сюда, чтобы найти способ перечисления всех пакетов

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

0 голосов
/ 23 ноября 2011

В описании службы пометьте компоненты как включенные, но требующие информацию о конфигурации, предоставленную службой управления конфигурацией.Затем вы можете написать сервис плагина CM (не могу вспомнить точный термин), который может публиковать и изменять конфигурацию ваших компонентов.Сервисы по умолчанию идентифицируются по имени, которое по умолчанию является именем класса реализации.Данные конфигурации передаются в виде карты и могут быть пустыми.DS сделает службу доступной, как только CM предоставит конфигурацию.

...