Мне нужно создать сервисные компоненты с одним интерфейсом. Это означает, что у меня разные реализации для того же интерфейса. Я попытался создать два компонента с одним интерфейсом, один из которых активен.Сервисные компоненты OSGI С таким же интерфейсом
Я использую equinox декларативный. У вас есть лучший дизайн для решения этой проблемы? пожалуйста, найдите мою конфигурацию ниже.
Component1.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="comp1">
<implementation class="com.demo.impl.CompOneImpl"/>
<service>
<provide interface="com.demo.IComponent"/>
</service>
</scr:component>
Component2.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="comp2">
<implementation class="com.demo.impl.CompTwoImpl"/>
<service>
<provide interface="com.demo.IComponent"/>
</service>
</scr:component>
Доступ компонент из потребителя
Потребляйте компонент
comp1.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="consumeComp1">
<implementation class="com.demo.service.ConsumeCompOne"/>
<reference bind="setComp" cardinality="1..1" interface="com.demo.IComponent" name="comp1" policy="static" unbind="unsetComp"/>
</scr:component>
comp2.xml
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="consumeComp2">
<implementation class="com.demo.service.ConsumeCompTwo"/>
<reference bind="setComp" cardinality="1..1" interface="com.demo.IComponent" name="comp2" policy="static" unbind="unsetComp"/>
</scr:component>
, когда я пытаюсь получить доступ к COMP1 и comp2 соответственно через ConsumeCompOne и ConsumeCompTwo класса я всегда получаю тот же компонент для обоих, либо comp1, либо comp2. Пожалуйста, помогите мне решить эту проблему.
Thankyou заранее
gopy
Что вы имеете в виду? Тогда моя реализация должна работать правильно? Я создал экземпляр ConsumeCompOne и обратился к нему, но он возвращается неправильно некоторое время. – user1926519
Вы сказали, что ему предоставлен экземпляр компонента. Так почему же это неправильно? –
Я напечатал как потребительский адаптер, он печатает тот же класс реализации, что и [email protected] и com.demo.impl.CompOneImpl @ 14e98c44, интересно, как оба экземпляра указывают одну и ту же реализацию? Могу ли я ошибаться в конфигурациях? – user1926519