这是场景:
我在 OSGi 容器中安装并启动了一个 bundle “BundleA”。 BundleA 的新版本现已推出。 BundleA 使用 Felix Bundle Repository 进行配置。新版本的 BundleA 对“BundleB”中的包声明了新的包级别要求。
在更新 BundleA 之前(使用 OBR 的部署()),我停止 BundleA,因为我希望所有线程停止运行,并且停用器提供了此功能。
当我在 BundleA 上执行部署()时,BundleB 也会按预期安装。
然后,我再次以编程方式 start() BundleA,然后 BundleA 启动。但 BundleB 是“已解决”,而不是“活跃”。我可以手动启动 BundleB 并且它按预期工作。
这是预期的吗?与我以编程方式调用 OSGi API 的方式有关,还是出了什么问题?
最佳答案
这是预期的默认行为。
一旦加载了 bundle 中的任何类,您就可以启用 bundle 的自动激活。为此,您需要设置 Bundle-ActivationPolicy:lazy
header 。
在 Eclipse 中,这是概述页面上 list 编辑器中的复选框“加载其中一个类时激活此插件”。
关于osgi - 当以编程方式启动 bundle 时,是否也应该启动依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636357/