在 Java 框架启动期间更新 Apache Felix Bundles
Update Apache Felix Bundles during framework start up in Java
所以我有这段代码,我在启动期间调用它来更新 Apache Felix Framework
中的捆绑包,但我只更新我特意设置为 7 级或更高级别的捆绑包。每当执行此代码时,更新的包就会从列表中删除并且控制台会挂起。其他时候,更新包的状态是 ACTIVE
但控制台也挂起。
Arrays.stream(bundleContext.getBundles())
.filter((bundle) -> return bundle.adapt(BundleStartLevel.class).getStartLevel() > 6;
.forEach((Bundle bundle) -> {
try {
this.logger.log(LOG_DEBUG, "updating : " + bundle.getSymbolicName());
if (bundle.getState() == Bundle.ACTIVE) {
bundle.stop();
}
bundle.update();
bundle.start(Bundle.ACTIVE);
} catch (BundleException exception) {
this.logger.log(LOG_ERROR, "Bundle update for " + name + " failed.", exception);
}
});
在Apache Felix Framework
中是否有更新包的正确方法?
根据您提供的描述和代码示例,无法准确判断出哪里出了问题:
- 这段代码具体是什么时候调用的?
- 您在描述中说只有启动级别为 7 或更高的捆绑包才会更新。我在代码中的任何地方都看不到这一点。事实上,它只更新符号名称等于
name
. 的包
- 更新时根本不需要调用
bundle.stop()
和 bundle.start()
。此外,这段代码中的逻辑是有缺陷的:如果一个 bundle 以前不活跃,它现在会变得活跃。
- 如果从 `BundleActivator 的
start
方法调用此代码,它可能会尝试更新自身,这会导致各种不可预测的行为。
所以我有这段代码,我在启动期间调用它来更新 Apache Felix Framework
中的捆绑包,但我只更新我特意设置为 7 级或更高级别的捆绑包。每当执行此代码时,更新的包就会从列表中删除并且控制台会挂起。其他时候,更新包的状态是 ACTIVE
但控制台也挂起。
Arrays.stream(bundleContext.getBundles())
.filter((bundle) -> return bundle.adapt(BundleStartLevel.class).getStartLevel() > 6;
.forEach((Bundle bundle) -> {
try {
this.logger.log(LOG_DEBUG, "updating : " + bundle.getSymbolicName());
if (bundle.getState() == Bundle.ACTIVE) {
bundle.stop();
}
bundle.update();
bundle.start(Bundle.ACTIVE);
} catch (BundleException exception) {
this.logger.log(LOG_ERROR, "Bundle update for " + name + " failed.", exception);
}
});
在Apache Felix Framework
中是否有更新包的正确方法?
根据您提供的描述和代码示例,无法准确判断出哪里出了问题:
- 这段代码具体是什么时候调用的?
- 您在描述中说只有启动级别为 7 或更高的捆绑包才会更新。我在代码中的任何地方都看不到这一点。事实上,它只更新符号名称等于
name
. 的包
- 更新时根本不需要调用
bundle.stop()
和bundle.start()
。此外,这段代码中的逻辑是有缺陷的:如果一个 bundle 以前不活跃,它现在会变得活跃。 - 如果从 `BundleActivator 的
start
方法调用此代码,它可能会尝试更新自身,这会导致各种不可预测的行为。