将接口的多个实现公开为OSGI服务

时间:2012-09-18 17:16:03

标签: spring osgi

我有一个有两个实现的接口。我想将这两个实现公开为OSGi服务,但是当我这样做时,一个覆盖另一个。请找到我正在进行的配置:

<bean id="formService" class="com.dbt.form.service.FormService"/>
<bean id="formAPIService" class="com.dbt.form.service.FormAPIService"/>
<osgi:service 
    ref="formAPIService" 
    interface="com.dbt.form.service.ifc.IFormService"/>
<osgi:service 
    ref="formService" 
    interface="com.dbt.form.service.ifc.IFormService" />

此处formServiceformAPIService实施覆盖。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:8)

第二个服务不会覆盖第一个服务......这两个服务都将单独发布,您可以通过在OSGi Gogo shell中键入inpect cap service命令来确认这一点。

可能发生的情况是您的消费者代码只会选择一个可用的服务实例。在这种情况下,您需要编写您的使用者以绑定到所有实例,或使用排名组合或目标筛选器来确定您想要的特定服务。您应该提供有关如何使用这些服务的更多信息,因为这就是问题所在(可能)。

答案 1 :(得分:3)

阅读本页...... Chapter 8. The Service Registry第8.2.2.3节。

您可以使用osgi 参考标记的 bean-name 属性。导入服务 bean-name 时,会在导出时引用该服务的 id 属性。