捆绑的部署顺序

时间:2015-09-08 10:40:47

标签: osgi apache-felix apache-karaf blueprint-osgi

我对OSGI捆绑部署有疑问。

我有7个捆绑包,我需要以严格的顺序部署,否则我没有找到类错误。部分捆绑包用作静态库,其中一部分导出OSGI服务。

在OSGI应用程序中,这个问题通常是如何解决的?

3 个答案:

答案 0 :(得分:4)

这个问题是通过解决它来解决的(至少,不是你提出的方式)。

那就是:没有必须以严格的顺序安装/启动的捆绑包!这意味着您的捆绑设计非常糟糕。相反,请更改您的捆绑包,以便它们可以按任何顺序启动。

如果您遇到此问题,请修改您的问题,以便我们了解您认为需要开始订购的原因。

答案 1 :(得分:2)

如果我正确理解您的问题,那么只需提供正确的依赖关系链即可由OSGi解决。
您的库应该导出您的服务将导入的包。

如果 BundleA 需要来自 BundleB OtherBundle 的类,请在MANIFEST中添加Import-PackageExport-Package元数据。所有捆绑的MF应该足够了。

BundleA MANIFEST.MF

  

Import-Package:my.required.package.from.b,other.package.in.b,other.package

BundleB MANIFEST.MF

  

Export-Package:my.required.package.from.b,other.package.in.b

OtherBundle MANIFEST.MF

  

Export-Package:other.package

然后安装所有捆绑包,它们将处于INSTALLED状态。启动主要的(在此示例中为 BundleA )。 OSGi将解决所有依赖关系(只是注意不要有循环),捆绑包将进入RESOLVED状态(可用依赖项),然后ACTIVE

您无需手动添加这些依赖项,可以轻松配置maven-bundle-plugin等工具。

此问题What is the natural start order for package-dependent OSGI bundles也许有用。

答案 2 :(得分:1)

我同意Neil Bartlett提到的最佳方法是避免它。但是,有时需要订购捆绑包的开头。即使使用Equinox或Felix,您也可以使用bundle start-level。它将确保您的捆绑包以特定顺序启动。

“起始级别与每个捆绑包相关联。起始级别是一个正整数值,用于控制捆绑包的激活/启动顺序。具有较低启动级别的捆绑包在具有较高启动级别的捆绑包之前启动。 ,启动级别为1的bundle首先启动,属于内核的bundle往往具有较低的启动级别,因为它们提供了运行大多数其他bundle的先决条件。“ - Red Hat JBoss Fuse Documentation

希望它有所帮助。