Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi包更新后如何重新布线框架_Java_Osgi_Equinox_Osgi Bundle - Fatal编程技术网

Java OSGi包更新后如何重新布线框架

Java OSGi包更新后如何重新布线框架,java,osgi,equinox,osgi-bundle,Java,Osgi,Equinox,Osgi Bundle,我有一个基于equinox的应用程序。我需要更新一个捆绑包,并重新布线与更新的捆绑包对应的OSGi捆绑包 我使用 bundle.update(new FileInputStream(new File(filePath))); 我需要刷新受影响的捆绑包,以使更新受到影响 我该怎么做 BundleContext bcx = bundle.getBundleContext(); Bundle systemBundle = bcx.getBundle(0); bundle.update(new Fi

我有一个基于equinox的应用程序。我需要更新一个捆绑包,并重新布线与更新的捆绑包对应的OSGi捆绑包

我使用

bundle.update(new FileInputStream(new File(filePath)));
我需要刷新受影响的捆绑包,以使更新受到影响

我该怎么做

BundleContext bcx = bundle.getBundleContext();
Bundle systemBundle = bcx.getBundle(0);

bundle.update(new FileInputStream(new File(filePath)));

FrameworkWiring frameworkWiring = systemBundle.adapt(FrameworkWiring.class);
frameworkWiring.refreshBundles(null);

请注意,refreshBundles是一个异步函数调用。因此,如果您想在刷新捆绑包时捕获事件,必须将FrameworkListener作为第二个参数传递。

a确认此刷新所有捆绑包正确吗?。我们不能只刷新受影响的捆绑包吗???。是的,您可以,请参阅:,org.osgi.FrameworkListener…)检查FrameworkWiring.refreshBundles(…)的javadoc功能。算法在那里有很好的说明。简而言之:只有那些必须刷新的包才会被刷新(但所有这些包都是可传递的)。。然后只刷新那些包。正确的?。。当存在动态导入时,它会产生怎样的影响?我不知道动态导入在刷新时的行为。通常,我不仅尝试避免使用动态导入,还尝试避免使用任何具有动态导入的技术。我更喜欢使用refreshBundles(null)。我不会试图找出应该刷新什么,因为我不希望最后有一个部分刷新的框架。如果捆绑包在停止事件中以编程方式卸载另一个捆绑包,该怎么办?如果我不知道,我可能不会刷新使用以编程方式卸载的捆绑包的捆绑包。