我必须以编程方式确保多个 OSGi 包的特定启动顺序,因为激活过程对其他包有一些依赖性。我通过 Java 代码管理 bundle 的生命周期,在其中尝试确定 bundle 的连接以计算正确的启动顺序。所有 bundle 均已正确安装。
由于 bundle 接线缝要在已解析状态下初始化,因此我正在寻找一种以编程方式解析 bundle 的方法。我只找到bundle.start()
这不仅解决了问题,而且还启动了 bundle 。有没有办法只解决而不开始?如果我手动使用 OSGi shell,我可以通过 resolve <bundle-id>
来实现此目的.
最佳答案
您无法以可靠且稳健的方式做到这一点。 OSGi 没有开始排序。时期。出去。克服它。
原因很简单, bundle 可能会被停止,并且会导致您在启动时发明的任何巧妙的顺序失效。
唯一有效的顺序是服务依赖关系。每个组件应该指定它所依赖的服务,并且在它需要的服务注册之前不要启动。这是获得订单的唯一可靠方式。
当您可以使用 DS 时,这当然是微不足道的。
关于java - 从代码中解析 OSGi 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991055/