3

我定义了四个捆绑包:

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(可分发二进制文件),我发现我应该手动强加不解决(或启动)捆绑 1,然后在启动捆绑 3 之前捆绑 2(否则会出现使用约束问题,因为捆绑 2 将使用包 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 -指示/
我不喜欢对我的包强加命令,我需要复制 /bundle 目录中的所有包,然后安装框架实例并启动它们。我注意到 Apache felix 按字母顺序对要安装的包进行排序(因此将安装包 1,然后首先启动)。我尝试使用 Apache karaf,将我的包复制到 /deploy 中,我发现问题消失了,所以我的问题是:

Apache Karaf(或 felix 文件安装)是否应用策略来强制启动捆绑包的任何顺序以避免此类问题?

4

3 回答 3

3

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

于 2013-05-07T17:40:04.317 回答
0

Felix FileInstall 没有任何排序功能。

启动顺序并不重要(bundle应该能够以任何顺序启动),但是一个好的管理代理应该能够将一批 bundle 安装和解析为单个操作。但是 FileInstall 会在碰巧轮询文件系统目录时安装/解析/启动捆绑包。因此 FileInstall 并不能真正用于生产部署。

我对 Karaf 一无所知,但任何简单地轮询目录的管理代理都可能有同样的问题。

于 2013-05-07T15:41:31.943 回答
0

Apache Karaf 会自动将 startlevel 添加到 deploy 文件夹中的 bundle,这是可配置的。它的默认值为 50。因此,您所有的自定义包都安装为 StartLevel 50。这也确保了 karaf 本身的基本包已经启动并运行,尤其是文件安装包。

于 2013-05-07T15:05:15.447 回答