一个以上的接口实现者。如何使用OSGi?

时间:2009-04-23 03:43:04

标签: java osgi

我有兴趣使用OSGI作为管理项目插件的方法。那就是我的界面可以有很多实现者,每个实现者都出现在它自己/单独的OSGI包中,并且导出了实现类......

2 个答案:

答案 0 :(得分:1)

Declarative Service应该是要走的路。

您可以将您的界面声明为service

<service>
    <provide interface="my.Interface"/>
    <property name="foo" value="bar"
</service>

该接口的每个实现都可以定义Bundle激活和去激活方法 但真正的好处是它们的本质:如果您使用最新的SCR(“服务组件运行时”,这是一个“扩展程序包”,实现新的和改进的OSGi R4.2 DS - 声明服务 - 规范),您的类将不从OSGI模型导入任何东西。它们仍然是纯粹的POJO。

然后定义另一项取决于您的第一项服务的服务:

<reference name="myInterfaceServiceName"
    interface="my.Interface"
    bind="myActivationMethod" unbind="myDeactivationMethod"
    cardinality="0..n"/>

该服务将检测并列出您的第一个服务的所有具体实例,并按照您的意图处理它们。

有关详细信息,请参阅Eclipse Extensions and Declarative Services问题。

演示文稿: 来自EclipseCON2009的Component Oriented Development in OSGi with Declarative Services, Spring Dynamic Modules and Apache iPOJO将为您提供一个具体的例子。

答案 1 :(得分:1)

这可以以声明方式(如VonC)详细说明,或在运行时通过标准服务注册表动态完成。

任何实现者都可以简单地将他们的实现注册为服务,消费者可以从注册表中获取它们,这是非常基本的OSGi。这些服务也可以在属性中注册,因此消费者可以在查找服务时使用这些属性来区分实现。