OSGI中的服务和组件

时间:2013-03-22 13:20:12

标签: java osgi equinox osgi-bundle knopflerfish

我对OSGI概念有一点点愚蠢的怀疑,但需要澄清它们以便更好地理解概念。谁能告诉我OSGI服务和组件之间有什么区别。我所知道的是,Service就像java中的一个接口文件,可以由不同的服务或组件使用。虽然组件就像是服务的特定实现。

如果我错了,请告诉我,或者建议我从哪里获得一些好的链接。

2 个答案:

答案 0 :(得分:3)

OSGi Core规范定义了服务模型,它是OSGi概念的关键部分。服务是实现声明类型(通常是接口)的对象(实例)。 OSGi框架提供服务层,它是服务提供者和服务使用者之间的代理。

DS引入了服务组件的概念,服务组件是捆绑中的类,由DS运行时(SCR)管理。组件由XML中的XML描述,由SCR读取。这些组件一旦实例化并且如果声明为服务,则可以通过SCR注册为服务。

因此组件可以是服务(但它们不一定是),并且它们可以使用服务。

答案 1 :(得分:1)

OSGi发展了服务的概念,因此捆绑可以减少与其他捆绑的耦合 - 即。实现松耦合。 “最松散”的耦合来自于使用动态服务,其中生成服务的捆绑包在消费者注册以消费这些服务时动态启动。动态服务模型经历了OSGi的几次演变,通过服务注册和事件监听,服务跟踪,最后是声明服务。

除了最后一个(声明性服务)之外,服务注册代码都放在bundle的Activator中。使用Declarative Services,公开服务的bundle称为组件,它在框架理解的component.xml文件中声明 - 不需要激活器。在Eclipse IDE中,您可以通过右键单击包并添加“组件定义”来使用声明式服务。有一本非常好的关于这个主题的书,通过教程指导你完成这项技术:

OSGi and Equinox