【问题标题】:OSGI deployment OrderOSGI 部署顺序
【发布时间】:2019-12-14 16:18:46
【问题描述】:

我的 karaf 部署目录中有一些包 [OSGI 和非 OSGI]。如果每次启动 karaf 时启动顺序都不同。我想每次都有标准订单。我看到一些从 OSGI 应用程序设置启动级别的方法,但我需要在 karaf 容器级别设置任何方法。有没有办法设置?

不是来自类似的代码,

Bundle bundle = framework.getBundleContext().installBundle(location);
BundleStartLevel bundleStartLevel = bundle.adapt(BundleStartLevel.class);
bundleStartLevel.setStartLevel(xxx);

【问题讨论】:

  • 我想每次都有标准订单 - 为什么?只要正确地满足并声明了依赖项...标准是按声明的依赖项的顺序开始。如果有多种选择,或者不需要等待激活完成:何必……

标签: osgi apache-karaf osgi-bundle


【解决方案1】:

您应该尽量避免使用起始关卡。很少有开始级别真正有意义的情况,但绝对不应该使用它们来制作“每次都标准订单”。如果您的应用程序需要以特定顺序启动捆绑包(同样也有少数例外),这是设计不佳的标志。

请记住,即使您决定使用起始关卡,同一起始关卡中的捆绑包的启动顺序仍然会有所不同。因此,要获得“固定”开始顺序,您必须将每个捆绑包分配给自己的开始级别。虽然可行,但维护起来将是一场噩梦。

你应该做的是

  • 尽可能多地使用服务。服务有自己的生命周期,并且可以在某种程度上独立于捆绑生命周期来启动/停止。
  • 使用Requirements 来表达bundle 需要一些东西的事实。使用Capabilities 来表达bundle 提供了一些东西的事实。这样,除非满足要求(在这种情况下由另一个捆绑包),否则捆绑包不会被解决,这有效地确保了一个必须先于另一个启动。

如果您决定忽略所有这些并继续使用初始级别,那么在 Karaf 的情况下,最简单的做法可能是拥有一个包含所有捆绑包的功能,您可以在其中 provide start level for each bundle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2017-04-11
    • 2015-02-15
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多