Как настроить область действия декларативной службы OSGI?

Может кто-нибудь объяснить мне, как настроить OSGI DS как синглтон? Я использую Equinox в качестве контейнера OSGi.

Компонент SCR

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="Simple Dictionary">
   <implementation class="foo.bar.services.DictionaryImpl"/>
   <service>
      <provide interface="foo.bar.services.Dictionary"/>
   </service>
</scr:component>

Вывод консоли OSGI

osgi> services (objectClass=foo.bar.services*)
{foo.bar.services.Dictionary}={
component.name=Simple Dictionary,
component.id =0,
service.id=51,
service.bundleid=7,
service.scope=bundle
}
"Зарегистрировано пакетом:" foo .bar.services_1.0.0.qualifier [7]
"Нет пакетов, использующих службу".


person Butch    schedule 15.10.2014    source источник


Ответы (1)


Это синглтон, если вы не скажете servicefactory="true". DS всегда будет использовать SerivceFactory для регистрации службы компонента. Это позволяет сделать фактическое создание и активацию компонента ленивым. Таким образом, вы никогда не увидите service.scope=singleton в зарегистрированной службе.

Для DS 1.3 servicefactory будет заменено на scope, но приведенное выше утверждение о том, что DS всегда использует ServiceFactory, остается верным.

person BJ Hargrave    schedule 15.10.2014
comment
Поддерживает ли последняя версия apache felix DS 1.3? Как я вижу, en.wikipedia.org/wiki/ это так. Но я не могу найти информацию о том, как использовать области. - person Pavel_K; 13.07.2015