Karaf извлекает объект/ссылку службы из контекста пакета

В Karaf версии 3.0.3 мне удалось получить объект ServiceReference, используя приведенный ниже код.

ServiceReference serviceReference = 
                (ServiceReference) bundleContext.getServiceReference(CustomService.class.getName());

Но в Karaf 4 этот код возвращает null. Моя служба запущена, я смог увидеть службу в списке служб.

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


person Charity    schedule 10.02.2016    source источник


Ответы (1)


Если вы уверены, что ваша служба запущена, причина в том, что поставщик службы и ваш клиент службы видят разные экземпляры класса CustomService.

Возможно, у вас есть два пакета, которые экспортируют этот пакет. Или пакет встроен в провайдера или клиента тоже. Другая причина может заключаться в том, что вы получаете ссылку на службу до того, как служба появится. Вы делаете это в активаторе? Если да... то это плохая практика, так как вы можете столкнуться с проблемами синхронизации. Лучше используйте ServiceTracker или DS или схему.

Вы можете проверить наличие дубликатов экспорта с помощью этой команды:

package:exports  -d
person Christian Schneider    schedule 10.02.2016