繁体   English   中英

OSGi:如何知道捆绑包是否已更新

[英]OSGi: How to know if a bundle was updated

在OSGi(Apache Felix 4.2.1)中,我希望捆绑软件在启动时自动检查更新。

我使用以下代码(在“管理代理”中)执行此操作。 如何判断捆绑包是否已更新?

Bundle[] bundles = context.getBundles();
for (int i = 0; i < bundles.length; i++) {
  Bundle bundle = bundles[i];
  bundle.update();
}
// which bundle was updated?

我想自动刷新捆绑包(使用FrameworkWiring ),但.update().update()调用之一实际上导致了服务器上的新部署。

当我从Maven部署到OBR时,我的SNAPSHOT版本具有相同的编号。 从gogo中,我可以看到Bnd-LastModified标头发生了变化,但是如何Bnd-LastModified自动化?

PS:如果存在简单的解决方案,比起自己动手解决方案更能解决整个更新问题,我也很感兴趣。 它需要精益。 (Apache Karaf?,Apache ACE?其他?)

他们都在更新 ,因为你的代码中明确提出update上所有的人。

您可能要说的是如何判断是否需要更新捆绑软件。 为此,您可以使用bundle.getLastModified()方法,并将其与文件的时间戳进行比较。 但是,当您有多台计算机生成的时间戳时,这会带来风险,因为它们的系统时钟永远不会精确同步。 如果它们来自远程服务器(例如,通过HTTP),则将其忘记。 下载后,您可能应该使用文件的ETag或SHA哈希之类的东西。

如果您想了解有关Apache ACE的更多信息,我建议您阅读ACE网站上的以下两篇文章:

老实说,如果您只想在启动时更新一组捆绑软件,那么ACE有点过头了。 它可用于从中央服务器管理多个“目标”(运行OSGi的框架),自动向其推送更新,并管理大量捆绑包和其他工件,将它们按功能和分布进行分组。

您是否尝试实现监听器

暂无
暂无

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

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