从代码解析 OSGi 包
Resolve OSGi bundle from code
我必须以编程方式确保几个 OSGi 包的特定启动顺序,因为激活过程对其他包有一些依赖性。我从 Java 代码管理捆绑包的生命周期,我在其中尝试确定捆绑包的接线以计算正确的启动顺序。所有包均已正确安装。
因为要在已解析状态下初始化捆绑布线接缝,所以我正在寻找一种以编程方式解析捆绑的方法。我只找到 bundle.start()
解决但也启动捆绑包。有没有办法只解决不开始?如果我手动使用 OSGi shell 我可以通过 resolve <bundle-id>
.
实现
您无法以可靠且稳健的方式执行此操作。 OSGi 没有启动顺序。时期。出去。克服它。
原因很简单,一个 bundle 可能会停止,并且会抛出您在启动时发明的任何巧妙的顺序。
唯一有效的排序是服务依赖项。每个组件都应该指定它所依赖的服务,并且在它需要的服务注册之前不启动。这是唯一可靠的订购方式。
当您可以使用 DS 时,这当然是微不足道的。
您可以使用 FrameworkWiring.resolveBundles 解决一组捆绑包。但解析捆绑只是启动捆绑的必要先决条件,与排序无关。您可以一次解决所有捆绑包,然后以随机顺序启动捆绑包。
正如 Peter 所说,如果您需要按特定顺序启动捆绑包,则说明您的系统存在问题。它将如何处理捆绑更新?
我必须以编程方式确保几个 OSGi 包的特定启动顺序,因为激活过程对其他包有一些依赖性。我从 Java 代码管理捆绑包的生命周期,我在其中尝试确定捆绑包的接线以计算正确的启动顺序。所有包均已正确安装。
因为要在已解析状态下初始化捆绑布线接缝,所以我正在寻找一种以编程方式解析捆绑的方法。我只找到 bundle.start()
解决但也启动捆绑包。有没有办法只解决不开始?如果我手动使用 OSGi shell 我可以通过 resolve <bundle-id>
.
您无法以可靠且稳健的方式执行此操作。 OSGi 没有启动顺序。时期。出去。克服它。
原因很简单,一个 bundle 可能会停止,并且会抛出您在启动时发明的任何巧妙的顺序。
唯一有效的排序是服务依赖项。每个组件都应该指定它所依赖的服务,并且在它需要的服务注册之前不启动。这是唯一可靠的订购方式。
当您可以使用 DS 时,这当然是微不足道的。
您可以使用 FrameworkWiring.resolveBundles 解决一组捆绑包。但解析捆绑只是启动捆绑的必要先决条件,与排序无关。您可以一次解决所有捆绑包,然后以随机顺序启动捆绑包。
正如 Peter 所说,如果您需要按特定顺序启动捆绑包,则说明您的系统存在问题。它将如何处理捆绑更新?