首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有相同接口的OSGI服务组件

具有相同接口的OSGI服务组件
EN

Stack Overflow用户
提问于 2014-11-27 09:16:18
回答 3查看 875关注 0票数 0

我需要创建具有相同接口的服务组件。这意味着对于同一个接口,我有不同的实现。我试图创建两个具有相同接口的组件,其中一个仅为活动组件。

我使用的是春分声明。你有更好的设计来解决这个问题吗?请在下面找到我的配置。

Component1.xml

代码语言:javascript
复制
 <?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

代码语言:javascript
复制
    <?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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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和ConsumeCompTwo类访问ConsumeCompOne和comp2时,我总是为两者获得相同的组件,无论是comp1还是comp2。请帮我解决这个问题。

事先谢谢你

爆米花

EN

回答 3

Stack Overflow用户

发布于 2014-11-27 10:03:14

DS工作正常,所以这里没有什么要解决的。

正如您所说的,两个使用者组件都提供了IComponent服务的一个实例,这正是他们作为引用所请求的。

票数 1
EN

Stack Overflow用户

发布于 2014-11-27 10:05:04

如果希望能够选择服务的特定实例,则使用属性发布它以标识它。然后,在客户机上,您可以使用OSGi服务筛选器来选择匹配的过滤器,例如,一个特殊的键/值组合。

票数 1
EN

Stack Overflow用户

发布于 2014-11-27 17:53:42

您希望在target元素上使用reference属性来选择要绑定的特定服务。

comp1.xml

代码语言:javascript
复制
<?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"
     target="(component.name=comp1)"/>
</scr:component>

comp2.xml

代码语言:javascript
复制
<?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"
     target="(component.name=comp2)"/>
</scr:component>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27166890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档