繁体   English   中英

OSGI:从jar安装时更新已安装的捆绑软件?

[英]Osgi: update already installed bundle when installing from jar?

我实现了一项功能,即我的osgi在启动时或在接收新的捆绑包时以编程方式在文件系统上安装表示为jar的捆绑包。 但是,当我收到一个时,它在启动过程中已经安装,由于冲突而崩溃。 如果发生冲突而不是通过编程安装,是否有办法(我不知道ID或名称)?

BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext();
Bundle bundle = context.getBundle("file:/Path.jar");

希望有人知道...

我在类似情况下的操作:

  • 我编写了一个BundleTracker,将每个捆绑包保存在addBundle中的Map中,并在removeBudnle中将其删除
  • 当我想以编程方式安装捆绑软件时,我检查了是否存在具有相同符号名的捆绑软件,如果确实存在,则我使用bundle.update(inputStream)方法代替了bundleContext.install(...)

如果要允许同一捆绑包的多个版本,则可以在更新或安装之前也检查捆绑包的版本。 在这种情况下,如果

  • 新捆绑包的位置是相同的(如果在首次安装时使用正确的路径)
  • 版本是一样的
  • 捆绑包是单例捆绑包(版本不同无关紧要)

如果您关心位置并且位置已更改,请使用bundle.uninstall()和bundlecontext.install(...)代替update(inputstream),它们会重新安装捆绑包。

最后,您应该调用refresh()以具有正确的包装接线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM