【问题标题】:Service and Component in OSGIOSGI 中的服务和组件
【发布时间】:2013-03-22 13:20:11
【问题描述】:

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

如果我错了,请告诉我,或者建议一些链接,让我可以很好地得到这些东西。

【问题讨论】:

    标签: java osgi equinox osgi-bundle knopflerfish


    【解决方案1】:

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

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

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

    【讨论】:

    • 服务是一个对象(实例),它实现了一个声明的类型...... ??没看懂??请解释一下。它帮助我消除疑虑
    • 是不是说它是一个实现接口的实现类……而这个类的所有对象都是服务
    【解决方案2】:

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

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

    OSGi and Equinox

    【讨论】:

    • 根据你的组件是捆绑包?? ?
    • 是的。使用声明式服务并通过创建 component.xml 文件时,您将捆绑包声明为组件。在 DS 下,组件可以导出零个或多个服务并使用零个或多个服务,因此它可以是一个捆绑包,既可以是导出器,也可以是消费者,或者两者兼而有之。
    • 就像我们在 java 文件中定义一个 scr 组件比是什么意思?它与组件包不同吗?如果有的话是什么关系???
    • 组件不是捆绑包。一个包可以声明零个或多个组件,每个组件都可以声明为一个服务。
    • 每个组件都可以声明为服务是什么意思??
    猜你喜欢
    • 2012-02-11
    • 2010-10-02
    • 2018-09-19
    • 2014-04-23
    • 2012-04-25
    • 1970-01-01
    • 2017-11-10
    • 2015-01-25
    相关资源
    最近更新 更多