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