所以我有这个代码,我打电话在启动期间更新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
?
答案 0 :(得分:0)
从您给出的描述和代码示例中,无法确切地说出出现了什么问题:
name
的符号名称的包。bundle.stop()
和bundle.start()
。此外,这段代码中的逻辑是有缺陷的:如果一个bundle在它现在变为活动之前没有活动。start
方法调用此代码,它可能会尝试更新自身,这会导致各种不可预测的行为。