捆绑在已解析状态的Bundle上的依赖关系

时间:2014-08-30 10:37:26

标签: java osgi osgi-bundle

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

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

现在情况发生Bundle A被停止(但没有重新启动)所以如果我理解正确bundle A转换到'已解决'状态。这是否意味着捆绑A中的任何导出都不可用,如果是这样,捆绑B也应该在A确实停止(由框架自动)?

2 个答案:

答案 0 :(得分:1)

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

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

此外:如果在捆绑包A上调用卸载,则捆绑包B仍将处于活动状态。原因是捆绑A将被标记为删除"状态,但它不会完全删除,直到任何电线连接到它。如果在B组上调用刷新,则删除接线。

答案 1 :(得分:1)

解析状态和活动状态之间的区别仅在于执行激活器的启动/停止方法。因此,只要捆绑A仅使用捆绑包A中的类而不使用可以取消注册的服务,就不会影响捆绑包B.

事实上,如果捆绑包A没有BundleActivator,捆绑包将从已解决的转换 - >有效或有效 - >没有任何改变就解决了。

相关问题