Osgi Apache Karaf如何对捆绑包进行排序以安装和启动?

Osgi Apache Karaf如何对捆绑包进行排序以安装和启动?,osgi,apache-felix,apache-karaf,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 使用ApacheFelix(可分发二进制文件),我发现应

我定义了四个包:

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
使用ApacheFelix(可分发二进制文件),我发现应该在启动bundle 3之前手动强制不解析(或启动)bundle 1和bundle 2(否则会出现使用约束问题,因为捆绑包2将使用程序包x版本1,而捆绑包4中会出现程序包x版本1和版本2-->使用约束冲突)。
感谢这些帖子的作者:


我不喜欢对我的包强加命令,我需要将我的所有包复制到/bundle目录中,然后安装并启动framework实例。 我注意到ApacheFelix按字母顺序对要安装的bundle进行排序(因此bundle 1将被安装,然后首先启动)。 我尝试使用Apache karaf,将捆绑包复制到/deploy中,发现问题消失了,所以我的问题是:


是否安装ApacheKaraf(或felix文件)应用策略强制启动捆绑包以避免此类问题?

Apache Karaf会自动向部署文件夹中的捆绑包添加startlevel。这是可配置的。默认值为50。因此,所有自定义捆绑包都安装为startlevel 50。这也确保了Karaf it的基本捆绑包self已经启动并运行,尤其是文件安装程序包。

Felix FileInstall没有任何订购功能

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


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

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

谢谢您的回答:)我的问题在于部署文件夹中这些捆绑包的顺序,您有解释吗?我认为起始级别与此无关。。。在本例中,这是安装/解析顺序的问题。正如Neil指出的,一个问题是fileinstall在某个时间间隔轮询目录。如果您将一半捆绑包复制到部署文件夹,并且fileinstall poll启动,那么它将只部署一半捆绑包。感谢Christian Schneider的澄清,因此,如果我理解,我可以将Karaf功能定义为一组捆绑包,在我安装和启动该功能时启动,Karaf容器将应用一种策略来正确解析这些包,从而避免“使用约束冲突”??如果是真的,你能解释一下Karaf如何确定解决捆绑包的最佳顺序,这不是felix做的吗?ThanksKaraf只是使用felix特性来解析捆绑包。fileinstall的主要区别在于它可以将捆绑包作为一个完整的集合进行解析,而不是单独安装捆绑包。关于一个功能的示例,请参见:感谢您提供的示例,我已经看到了,它真的很有帮助:)请回答其他问题,因此,定义一个Karaf功能允许在一段时间内启动该功能的所有捆绑包,但不计算顺序,例如,返回到我给出的示例,Karaf可以安装四个捆绑包,然后按顺序解决它们(b1、b2、b3、b4),这会引发问题中的异常?是这样吗?这与在启动容器之前在/deploy目录中复制所有这些捆绑包类似吗(因此felix文件安装将在同一轮询中检索它们)?因为即使使用ApacheFelix的可分发二进制文件,并通过在/deploy目录中复制捆绑包,felix也将在一段时间内解析它们(安装所有捆绑包,然后返回以逐个启动它们),我们总是会发现此错误?在使用felix file install并同时将所有这些捆绑包放入监视目录时也是如此(因此进行相同的轮询)Apache Karaf不会创建特殊的命令来避免包使用冲突,这是felix解析器的职责。听起来好像您的案例没有包含在解析器中,但我不确定它的内部工作原理。在任何情况下,您的安全解决方案都是避免包的使用。如果包是由您开发的,那么您可能需要可以使用更好的封装来解决这个问题。