【问题标题】:Bundle dependency on Bundle in Resolved StateBundle 对处于已解决状态的 Bundle 的依赖关系
【发布时间】:2014-08-30 10:37:25
【问题描述】:

我只是想解决我对停止捆绑时会发生什么以及依赖于它们的捆绑的后果的理解。

例如,如果有两个包 A 和 B。包 A 没有依赖项(除了 OSGi 框架)但导出了一些包。 Bundle B 从 A 导入包,然后使用其中的类,但不使用服务(如果有)。两个包都安装在 OSGi 框架中,并报告其状态为“活动”。

现在情况发生了 Bundle A 已停止(但未重新启动),因此如果我理解正确,Bundle A 将转换为“已解决”状态。这是否意味着捆绑包 A 中的任何导出都不可用,如果是这样,捆绑包 B 也应该在 A 可用时停止(由框架自动)?

【问题讨论】:

    标签: java osgi osgi-bundle


    【解决方案1】:

    当bundle B 启动时,bundle A 也会启动(之前)。但是,如果捆绑 A 停止,捆绑 B 将不会停止。捆绑 B 停止的原因可能有以下三个:

    • 在捆绑包 B 上调用停止
    • 框架启动级别低于捆绑包 B 的启动级别
    • 捆绑 B 变得未解决

    另外:如果在捆绑包 A 上调用卸载,捆绑包 B 仍将处于活动状态。原因是捆绑 A 将获得“标记为移除”状态,但在任何连接到它之前它不会被完全移除。如果在捆绑 B 上调用刷新,则删除连线。

    【讨论】:

    • 在我的 OSGI 控制台中,即使在卸载 A 之后,我也能够刷新、解析和激活 Bundle B。这是为什么呢?
    【解决方案2】:

    已解决状态和活动状态的区别只是激活器的启动/停止方法的执行。因此,停止 bundle A 不会影响 bundle B,只要它只使用 bundle A 中的类并且没有将被注销的服务。

    事实上,如果包 A 没有 BundleActivator,则包将从已解决 -> 活动或活动 -> 已解决转换,而不会发生任何变化。

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 2019-09-10
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多