Java OSGi包更新后如何重新布线框架
我有一个基于equinox的应用程序。我需要更新一个捆绑包,并重新布线与更新的捆绑包对应的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
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)。我不会试图找出应该刷新什么,因为我不希望最后有一个部分刷新的框架。如果捆绑包在停止事件中以编程方式卸载另一个捆绑包,该怎么办?如果我不知道,我可能不会刷新使用以编程方式卸载的捆绑包的捆绑包。