Java OSGi容器在什么时候开始使用在运行时添加的更新版本包的导出?

Java OSGi容器在什么时候开始使用在运行时添加的更新版本包的导出?,java,osgi,Java,Osgi,假设我的OSGi容器中有以下捆绑包: Bundle-Name: Bundle A Import-Package: org.foo;version="[1.0.0,2)" Bundle-Name: Bundle B1 Export-Package: org.foo;version="1.0.0" 然后过了一会儿,我添加了B2 Bundle-Name: Bundle B2 Export-Package: org.foo;version="1.1.0" 在什么时候开始使用B2的1.1.0中的类?

假设我的OSGi容器中有以下捆绑包:

Bundle-Name: Bundle A
Import-Package: org.foo;version="[1.0.0,2)"

Bundle-Name: Bundle B1
Export-Package: org.foo;version="1.0.0"
然后过了一会儿,我添加了
B2

Bundle-Name: Bundle B2
Export-Package: org.foo;version="1.1.0"

在什么时候开始使用
B2
1.1.0
中的类?这是添加导出新增量版本的捆绑包的固有部分,还是必须手动执行某些操作来告诉OSGi查找“升级”?

您必须在解决B2后调用捆绑包a上的刷新来重新连接包。例如:

Bundle systemBundle = bundleContext.getBundle(0);
FrameworkWiring frameworkWiring = systemBundle.adapt(FrameworkWiring.class);
frameworkWiring.refreshBundles(Arrays.asList(bundleA.getBundleId()));
在未刷新捆绑包A之前,它将连接到捆绑包B1。即使您卸载了bundle B1,bundle A也会一直连接到它。Bundle B1将获得_pending _remove u状态,直到有任何东西连接到它为止(直到刷新所有连接到它的Bundle)

有关更多信息,请参阅