【问题标题】:Exposing multiple implementations of a interface as OSGI service将接口的多个实现公开为 OSGI 服务
【发布时间】:2012-09-18 17:16:02
【问题描述】:

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

请帮我解决这个问题。

【问题讨论】:

    标签: spring osgi


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      你可以使用osgi reference标签的bean-name属性。导入服务时,bean-name 指的是导出时该服务的 id 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多