Декларативная служба OSGi, ссылающаяся на недекларативную службу

У меня система объявляет услуги "по старинке", с помощью методов активатора.

Сейчас я пишу новый пакет, используя Declarative Services. Можно ли сослаться на службу, которая не опубликована с использованием метода декларативных служб, в моем новом пакете?


person Mathias Larsson    schedule 16.04.2012    source источник
comment
Ты пробовал это? Я не понимаю, почему это должно быть проблемой.   -  person Björn Pollex    schedule 16.04.2012
comment
Да, я пробовал. Я видел службы в реестре служб, но не получил вызовов моих методов привязки/отвязки. Когда я внедрил активатор, я работал мгновенно. У меня не было времени вникать в это слишком много сейчас, но я думаю, что это просто глупая ошибка. Теперь я, по крайней мере, знаю, что это ДОЛЖНО работать.   -  person Mathias Larsson    schedule 18.04.2012
comment
Не могли бы вы предоставить свой дескриптор декларативных служб? Он может содержать ошибку в определении ссылок.   -  person Dmytro Pishchukhin    schedule 18.04.2012
comment
Нет, к сожалению, не могу, но когда я смотрю сейчас, я вижу очень вероятную ошибку в поле «Класс реализации». :-)   -  person Mathias Larsson    schedule 19.04.2012


Ответы (2)


Не существует «старого способа» публикации ваших сервисов в реестре сервисов OSGi. Есть только один способ с BundleContext.registerService(). Вы можете сделать это вручную из вашего активатора, или движки Declarative Services/Blueprint могут сделать это за вас.

В вашем дескрипторе DS вы просто определяете ссылки на службы, доступные в реестре служб.

person Dmytro Pishchukhin    schedule 16.04.2012

Да, это возможно. Когда вы ссылаетесь на службу из компонента DS, вам не нужно беспокоиться о внутренней реализации этой службы.

Другая служба может быть другим компонентом DS, компонентом Spring-DM или может быть опубликована с явными вызовами API OSGi. Тебе все равно. Это просто услуга.

person Neil Bartlett    schedule 18.04.2012