我对使用 OSGI 作为管理项目插件的一种方式很感兴趣。也就是说,我的接口可以有很多实现者,每个实现者都出现在自己/单独的 OSGI 包中,并带有导出的实现类......
问问题
585 次
2 回答
1
声明式服务应该是要走的路。
您可以将您的接口声明为服务
<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的 OSGi 中使用声明式服务、Spring 动态模块和 Apache iPOJO 的面向组件开发,将为您提供一个具体示例。
于 2009-04-23T04:39:06.277 回答
1
这可以通过详细的声明方式(如 VonC)或在运行时通过标准服务注册表动态完成。
任何实现者都可以简单地将他们的实现注册为服务,消费者可以从注册表中获取它们,这是非常基本的 OSGi 东西。服务也可以注册属性,因此消费者在查找服务时可以使用这些属性来区分实现。
于 2009-04-23T13:14:07.770 回答