【问题标题】:OSGI Bundle's start() method is not getting calledOSGI Bundle 的 start() 方法没有被调用
【发布时间】:2015-11-05 22:40:57
【问题描述】:

我的环境中几乎没有包含激活器的捆绑包。在其中一个 bundle start() 方法没有被调用。基本上它没有被激活。这个捆绑包的唯一变化是,它使用了“DynamicImport-Package:”。 删除这个标签解决了 start() 没有被调用的问题,但这是不可能的,因为在我的场景中所有的包都不知道。

有人可以帮助我吗,因为我对此很困惑。 我不知道是什么问题以及它们两者之间的关系。

【问题讨论】:

    标签: osgi osgi-bundle


    【解决方案1】:

    它们不相关。删除 DynamicImport-Package 不会影响您的捆绑包是否启动,因此必须进行其他操作。你真的在任何地方调用捆绑包上的Bundle.start() 方法吗?

    顺便说一句,使用DynamicImport-Package 是一个非常非常糟糕的主意。几乎可以肯定,有一种更好的方法可以解决您认为可以使用 DI-P 解决的任何问题。

    【讨论】:

    • 看来是这样。不确定这个问题,但我们最终摆脱了动态导入,问题得到了解决。
    【解决方案2】:

    当使用 DynamicImport-Package 时,尤其是与 * 一起使用时,您无法控制从何处提取包。所以如果两个包导出同一个包,你会遇到很大的问题。

    例如,我在使用此 * 导入测试包的 pax 考试中遇到了问题,其中有两个版本的包 javax.inject。由于他们调用测试的包看到了不同版本的包,因此服务导入不起作用。

    因此,在您的示例中,您可能有两个版本的包 org.osgi.framework 接口 BundleActivator 所在的位置。 你安装了 org.osgi.core api 包吗?如果是,则将其删除。只有框架应该提供这些包。这可能会导致框架无法使用您的激活器类。

    【讨论】:

    • 最终摆脱了动态导入 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2012-03-13
    • 1970-01-01
    • 2014-06-02
    • 2011-08-28
    • 2017-02-24
    相关资源
    最近更新 更多