2012-04-16 2 views
1

У меня есть система, объявляющая сервисы «по-старому», используя методы активатора.OSGi Декларативная служба, ссылающаяся на не декларативное обслуживание

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

+1

Вы пробовали? Я не понимаю, почему это должно быть проблемой. –

+0

Да, я попробовал. Я видел службы в реестре служб, но я не получал никаких вызовов к моим методам bind/unbind. Когда я реализовал активатор, я работал мгновенно. У меня не было времени, чтобы копаться в этом слишком много сейчас, но я думаю, это просто глупая ошибка. Теперь я, по крайней мере, знаю, что ДОЛЖЕН работать. –

+0

Не могли бы вы предоставить дескриптор декларативных услуг? Он может содержать ошибку в определении ссылок. –

ответ

3

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

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

3

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

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