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.

Другие вопросы по тегам