OSGI中容器选择由多个包导出的包的标准行为是什么?

时间:2011-08-31 02:34:50

标签: osgi

我只是想知道如果同一个包被不同的包多次导出,容器如何选择加载类的包。

鉴于以下情况属实。请注意,该列表还包含部署捆绑包的实际顺序。

  • package.x版本1(A)
  • package.x版本2(B)
  • package.x版本3(C)

如果添加了第4个捆绑包并且需要“package.x.SomeClass”1-2从哪里选择?

  • 是从A还是B中随机挑选?
  • 由于冲突,它是否无法部署B?
  • 选择A是因为它是第一个吗?

所有容器是否都做同样的事情,或者可用的流行软件包之间的行为是否不同?

3 个答案:

答案 0 :(得分:2)

框架将选择A或B.它不是“随机”,但启发式是复杂的,最好不要尝试预测会发生什么。此外,此行为中的行为未指定,并且受OSGi框架实现之间的差异影响。

答案 1 :(得分:2)

OSGi是一个组件框架,整个想法是这些问题无用讨论,因为它们可能因框架和已安装的软件包集而异。您所做的任何未指定的假设都可能会被违反并导致代码崩溃。 OSGi的优点在于它允许您指定您的约束。 OSGi框架永远不会违反您的约束,这是您的保证。如何在特定情况下找到解决方案应该完全无关紧要,因为任何隐含的假设都可能在其他情况下导致错误。

答案 2 :(得分:0)

在Felix中,容器从包的0.0.0版本开始,然后向上递增。然后它将连接到它命中的捆绑包的第一个版本。因此,如果您有两个捆绑包,版本1.1.1和版本1.2.0,并且您尝试连接到该包但未指定版本号,则Felix应始终选择版本1.1.1。