2

这是场景:

我在 OSGi 容器中安装并启动了一个捆绑包“BundleA”。新版本的 BundleA 可用。BundleA 是使用 Felix Bundle Repository 提供的。新版本的 BundleA 对来自“BundleB”的包声明了新的包级别要求。

在我更新 BundleA(使用 OBR 的 deploy())之前,我停止了 BundleA,因为我希望所有线程都停止运行,并且 deactivator 提供了这种能力。

当我在 BundleA 上执行 deploy() 时,BundleB 也按预期安装。

然后我再次以编程方式 start() BundleA,并且 BundleA 启动。但是 BundleB 是“已解决”,而不是“活动”。我可以手动启动 BundleB,它按预期工作。

这是预期的,与我以编程方式调用 OSGi API 的方式有关,还是出了什么问题?

4

2 回答 2

2

OSGi 框架不会自动启动捆绑软件。(但是,它将在框架启动时重新启动先前启动的包。)框架对包之间的启动依赖关系一无所知,并且包不应该需要特定的启动顺序。正如 Gunnar 所提到的,您可以使用激活策略来触发延迟激活,但如果您没有在具有延迟激活策略的捆绑包上调用 start,则不会执行任何操作。

于 2012-09-28T11:42:06.257 回答
2

这是预期的默认行为。

一旦加载了其中的任何类,您就可以启用捆绑包的自动激活。为此,您需要设置Bundle-ActivationPolicy: lazy标题。

在 Eclipse 中,在“概览”页面的清单编辑器中选中“加载其中一个类时激活此插件”复选框。

于 2012-09-28T10:35:53.597 回答