osgi - 当以编程方式启动 bundle 时,是否也应该启动依赖项?

标签 osgi apache-felix obr

这是场景:

我在 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/

相关文章:

Java:从 OSGi 应用程序中设置时区

OSGI:当调用一个已经很忙的服务时会发生什么?

Spring + Felix war = FileNotFoundException

scala - 使用 Akka Actors 演示 OSGi 的简单 Hello World?

osgi - 在 Nexus 中安装 obr 插件

maven - 使用 maven-assembly-plugin 构建 OSGi 包包括依赖项

java - 基于 OSGi 的示例项目

OSGI:只有在外部存在时才可以导入包,否则使用本地精简版?

java - 如何从 AetherRepository 迁移到 MavenBndRepository?

Maven 到 OBR 存储库