OSGI部署顺序

OSGI deployment Order

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

不是来自

这样的代码
Bundle bundle = framework.getBundleContext().installBundle(location);
BundleStartLevel bundleStartLevel = bundle.adapt(BundleStartLevel.class);
bundleStartLevel.setStartLevel(xxx);

您应该尽量避免使用起始级别。在极少数情况下,起始等级确实有意义,但它们绝对不应该用于制作 "standard orders every-time"。如果您的应用程序需要以特定顺序启动 bundle,那么(同样也有少数例外)是糟糕设计的标志。

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

你应该做的是

  • 尽可能多地使用服务。服务有自己的生命周期,可以 started/stoped 在某种程度上独立于 bundle 生命周期。
  • Requirements to express the fact that bundle needs something. Use Capabilities表示bundle提供了一些东西。这样,除非满足要求(在这种情况下由另一个捆绑包),否则捆绑包不会被解决,这有效地确保了一个必须在另一个之前开始。

如果您决定忽略所有这些并仍然使用起始级别,那么在 Karaf 的情况下,最简单的事情可能就是拥有一个包含所有捆绑包的功能,您可以 provide start level for each bundle