【问题标题】:Resolve OSGi bundle from code从代码中解析 OSGi 包
【发布时间】:2016-12-06 08:38:45
【问题描述】:

我必须以编程方式确保几个 OSGi 包的特定启动顺序,因为激活过程对其他包有一些依赖性。我从 Java 代码管理包的生命周期,在其中我尝试确定包的接线以计算正确的启动顺序。所有捆绑包都已正确安装。

因为捆绑接线接缝要在已解决状态下初始化,所以我正在寻找一种以编程方式解决捆绑的方法。我只找到bundle.start() 解决但也启动捆绑。有没有办法只解决而不开始?如果我手动使用 OSGi shell,我可以通过 resolve <bundle-id> 来实现。

【问题讨论】:

  • 你不能使用注册一些虚拟服务并使用它们来解决订单的方法吗?

标签: java osgi bundle osgi-bundle


【解决方案1】:

您无法以可靠且稳健的方式执行此操作。 OSGi 没有开始排序。时期。出去。克服它。

原因很简单,捆绑包可能会被停止,并且会抛出您在启动时发明的任何巧妙排序。

唯一有效的顺序是服务依赖关系。每个组件都应该指定它所依赖的服务,并且在它需要的服务注册之前不启动。这是获得订单的唯一可靠方式。

当您可以使用 DS 时,这当然是微不足道的。

【讨论】:

    【解决方案2】:

    您可以使用FrameworkWiring.resolveBundles 解析一组捆绑包。但是解决捆绑包只是启动捆绑包的必要前提,而与订购无关。您可以一次解析所有捆绑包,然后以随机顺序启动捆绑包。

    正如 Peter 所说,如果您需要以特定顺序启动捆绑包,则说明您的系统有问题。它将如何处理更新包?

    【讨论】:

    • 我不寒而栗地想象“我尝试确定包的接线以计算正确启动顺序的 Java 代码”是什么样子的!您意识到这正是 OSGi 框架本身为您所做的吗?
    猜你喜欢
    • 2012-12-06
    • 2012-10-11
    • 1970-01-01
    • 2023-04-07
    • 2012-06-09
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多