OSGi: как определить, когда пакет регистрируется в новом сервисе
Я хотел бы знать, когда пакет в среде регистрирует службу с помощью context.registerService(...).
Есть слушатель как FrameworkEvent.STARTED или что-то?
Благодарю.
2 ответа
Прослушивание изменений службы очень распространено в OSGi. Простой способ API заключается в использовании ServiceTracker. Вы можете указать, какие услуги вас интересуют и будут получать обратные вызовы, когда такая услуга будет зарегистрирована или незарегистрирована.
Рекомендуемый способ - использовать такие инфраструктуры, как декларативные сервисы (DS) или проект, которые также предлагают способы прослушивания сервисов.
Это как прослушивать все сервисы через интерфейс с использованием DS. Смотрите также Javadoc @Reference.
@Reference(unbind="unbind"
public bind(MyService my) {...}
public unbind(MyService my) {...}
Вы можете зарегистрировать ServiceListener через BundleContext # addServiceListener.
Для реального примера посмотрите, как платформа Gemini Blueprint работает со слушателями службы: OsgiServiceCollection. Есть реализация прослушивателя OsgiServiceCollection$BaseListener.