我定义了四个包:
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文件安装)是否应用策略来强制启动捆绑包以避免出现这类问题?
答案 0 :(得分:3)
您应该尝试使用Karaf功能进行此类部署。您可以创建一个功能文件,其中包含一个功能,并将所有捆绑包添加到此功能。然后,Karaf将加载所有捆绑并解决并一次性启动它们。因此解析器应该能够正确解析所有捆绑包。
答案 1 :(得分:0)
Apache Karaf会自动向deploy文件夹中的bundle添加一个startlevel,这是可配置的。它的默认值为50.因此,所有自定义捆绑包都安装为StartLevel 50.这还可以确保karaf本身的基本捆绑包已经启动并运行,尤其是文件安装程序捆绑包。
答案 2 :(得分:0)
Felix FileInstall没有任何订购功能。
启动订单并不重要(捆绑应该能够以任何顺序启动),但是一个好的管理代理应该能够作为单个操作安装和解决一批捆绑。但是,无论何时轮询文件系统目录,FileInstall都会安装/解析/启动bundle。因此,FileInstall实际上不适用于生产部署。
我对Karaf一无所知,但任何只是轮询目录的管理代理都可能遇到同样的问题。