2012-09-18 45 views
2

我有一个有两个实现的接口。我想将这两个实现都公开为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实现覆盖。

请帮我解决这个问题。

回答

8

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

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

3

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

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

相关问题