【问题标题】:Trying to create an abstract bundle in OSGI尝试在 OSGI 中创建抽象包
【发布时间】:2014-07-14 08:16:53
【问题描述】:

我想在 OSGI 中创建一个抽象包。这个想法是,假设捆绑 Ax(x 从 1 到 9)需要通过 B 提供的服务绑定到捆绑 B,这可以通过制作 asbtractA 更容易完成(因此 Ax 扩展了 abstractA)

这里的 abstractA 是一个带有 declerative 服务文件的包。 xml 文件描述了绑定 B 的引用服务,并在相应的 abstractA 类中实现了绑定取消绑定和启动方法。

假设 Ax 有自己的 start 方法 startx,并绑定到几个服务,所以 bundle 有自己的 .xml 文件。

问题:是否会同时调用 start(来自 abstractBundle)和 startx?是否会发生来自 bundleAx 和 bundleabstractA 的引用服务的绑定?

【问题讨论】:

    标签: java inheritance osgi declarative-services


    【解决方案1】:

    虽然我当然不清楚你的具体细节,但我质疑这里使用“继承”。在我看来,您最好使用以下任何一种:

    1. 委派。含义:将通用功能委托给 bundle A 中的服务。
    2. 服务工厂解决方案。含义:通过工厂模式创建多个服务,工厂由 bundle A 注册。

    【讨论】:

    • 我正在为第 3 方开发人员创建一个“模板”,以便在我的客户平台上提供服务。他们希望确保 3rd 方开发人员不会做错任何事,因此他们目前唯一要做的就是在他们正在制作的服务中实现 1 个抽象方法,而所有其他逻辑和绑定都发生在超类中.因为子“可能”也需要绑定到服务,所以父类和子类都是服务->因此它用 2 个 xml 文件来讨论捆绑继承的概念。
    • 也许你应该看看:(1)白板图案或(2)片段包。在 (1) 中,第 3 方开发人员实现了一个非常简单的接口(在您的情况下是一种方法)并将其声明为服务。然后,您的包 A 会查找这些服务并使用通用功能将它们包装起来。在 (2) 中,第 3 方开发人员使用其扩展逻辑和一些指示扩展的方法(例如通过简单的属性文件)为包 A 创建片段。然后包 A 可以读取信息并实例化它。
    【解决方案2】:

    没有办法在 OSGi 中创建抽象包。当然,您可以做的是使用抽象类在包之间共享一些功能。

    顺便说一句。如果您只想实现共享 DS xml 文件,那么您应该查看基于注释的 DS 配置。这消除了完全编写 xml 的需要(它可以由 maven 插件从您的注释中生成)。

    【讨论】:

      猜你喜欢
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2013-02-23
      相关资源
      最近更新 更多