在 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 方法调用此代码,它可能会尝试更新自身,这会导致各种不可预测的行为。