Osgi:从jar安装时更新已经安装的bundle?

时间:2013-09-10 15:36:49

标签: java install osgi bundle updates

我实现了一个功能,即我的osgi正在安装捆绑包,这些捆绑包在启动时或接收新协议时以编程方式在文件系统上表示为jar。 但是,当我收到一个,在启动时已经安装了它,它会因冲突而崩溃。 有没有办法(我不知道ID和名称)如果要更新冲突而不是以编程方式安装?

BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
Bundle bundle = context.getBundle("file:/Path.jar");
希望有人知道......

1 个答案:

答案 0 :(得分:0)

我在类似案件中做了什么:

  • 我写了一个BundleTracker,它在addsBundle中将每个包保存到Map中,并在removeBudnle中删除它
  • 当我想以编程方式安装捆绑包时,我检查了是否已存在具有相同符号名称的捆绑包,如果确实存在,则使用bundle.update(inputStream)方法而不是使用bundleContext.install(...)< / LI>

如果您想允许同一个软件包的多个版本,您还可以在更新或安装之前检查软件包的版本。在这种情况下,如果

,我会进行更新
  • 新捆绑包的位置相同(如果您在首次安装时使用正确的路径)
  • 版本相同
  • 捆绑包是一个单独的捆绑包(如果版本不同则无关紧要)

如果您关心位置并且它已被更改,请使用bundle.uninstall()和bundlecontext.install(...)重新安装捆绑包,而不是更新(输入流)。

最后,你应该调用refresh()来获得正确的包裹接线。