java - OSGi 捆绑跟踪器 : order of tracked bundles

标签 java osgi

我正在跟踪这样的 OSGi 包:

BundleTracker<Foo> bundleTracker = new BundleTracker<>(context, Bundle.ACTIVE, 
    new BundleTrackerCustomizer<Foo>(){

                @Override
                public Foo addingBundle(Bundle bundle, BundleEvent event) {
                    ...
                }

                @Override
                public void modifiedBundle(Bundle bundle, BundleEvent event, Foo foo) {
                    ...
                }

                @Override
                public void removedBundle(Bundle bundle, BundleEvent event, Foo foo) {
                    ...
                }
            });

现在,如果 bundle B 具有依赖项 A 并且启动了 B,那么据我了解,第一个 bundle A 将被激活。这是正确的吗?

问题是,有时我会在收到有关某些 bundle 的相关 bundle 的通知之前收到有关某些 bundle 的通知。那么,我如何才能按依赖顺序收到通知(如果 B 依赖于 A,则首先收到有关 A 的通知,然后收到有关 B 的通知)?

最佳答案

bundle 之间的代码依赖关系(导入包或要求 bundle )(通常)不会对 bundle 的启动顺序产生任何影响。这是使用延迟激活的 bundle 之间的一些交互。

因此,一旦 A 和 B 解决,启动 B 与启动 A 无关。

这里需要注意的重要一点是,模块层依赖项不会影响包的启动顺序。

关于java - OSGi 捆绑跟踪器 : order of tracked bundles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9977857/

相关文章:

java - 如何通过索引选择随机元素?

java - 从 HTTPSampler 获取 HTTPClient 以在 Beanshell 中使用它

scala - Karaf Unresolved JDBC 约束

java - AEM 6.0 Web 控制台 bundle (OSGi bundle )中安装的软件包未正确安装(状态应为 Activity 未安装)

osgi - OSGi 中的类路径扫描

java - 监听从 PHP Web 服务访问的 MySQL 数据库中的更改

java - 当值大于 x 时从 map 中删除的最佳方法是什么

Java key 适配器

java - 阅读我自己的 jar list

java - 尝试在 virgo tomcat 中配置自定义 session 管理器时获取 ClassNotFoundException