Apache Karaf如何对bundle进行安装和启动?

时间:2013-05-07 11:40:30

标签: osgi apache-felix apache-karaf

我定义了四个包:

bundle 1 : export package x version 1
bundle 2 : import package x ver [1,2] and export package y;y uses x    
bundle 3 : export package x version 2
bundle 4 : import package y and also import package x version 2

使用apache felix(可分发的二进制文件),我发现我应该手动强制解决(或启动)bundle 1然后在启动bundle 3之前捆绑2(否则会出现使用约束问题,因为bundle 2将使用package x版本1和捆绑包4将显示包x版本1和版本2 - >使用约束违规) 感谢这些帖子的作者:
http://njbartlett.name/2011/02/09/uses-constraints.html
http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/
我不想将命令强加给我的捆绑包,我需要将所有捆绑包复制到/ bundle目录中,然后将框架实例安装并启动它们。 我注意到Apache felix按字母顺序对捆绑包进行排序(因此将安装捆绑包1,然后启动第一个捆绑包)。 我尝试使用Apache karaf,我将我的软件包复制到/ deploy中,我发现问题消失了,所以我的问题是:

Apache Karaf(或felix文件安装)是否应用策略来强制启动捆绑包以避免出现这类问题?

3 个答案:

答案 0 :(得分:3)

您应该尝试使用Karaf功能进行此类部署。您可以创建一个功能文件,其中包含一个功能,并将所有捆绑包添加到此功能。然后,Karaf将加载所有捆绑并解决并一次性启动它们。因此解析器应该能够正确解析所有捆绑包。

答案 1 :(得分:0)

Apache Karaf会自动向deploy文件夹中的bundle添加一个startlevel,这是可配置的。它的默认值为50.因此,所有自定义捆绑包都安装为StartLevel 50.这还可以确保karaf本身的基本捆绑包已经启动并运行,尤其是文件安装程序捆绑包。

答案 2 :(得分:0)

Felix FileInstall没有任何订购功能。

启动订单并不重要(捆绑应该能够以任何顺序启动),但是一个好的管理代理应该能够作为单个操作安装和解决一批捆绑。但是,无论何时轮询文件系统目录,FileInstall都会安装/解析/启动bundle。因此,FileInstall实际上不适用于生产部署。

我对Karaf一无所知,但任何只是轮询目录的管理代理都可能遇到同样的问题。