在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()
调用实际上导致了我的服务器的新部署。
当我从Maven部署到我的OBR时,我的SNAPSHOT版本具有相同的编号。从gogo,我可以看到Bnd-LastModified
标题发生变化,但如何自动化?
答案 0 :(得分:3)
它们都已更新,因为您的代码清楚地在所有代码上调用了update
。
您可能的意思是如何判断捆绑是否需要进行更新。为此,您可以使用bundle.getLastModified()
方法,并将其与文件的时间戳进行比较。但是,当您有多台计算机生成的时间戳时,这会带来风险,因为它们的系统时钟永远不会精确同步。如果它们来自远程服务器(例如通过HTTP),那么就忘了它。下载后你应该使用类似ETag或SHA散列的文件。
答案 1 :(得分:2)
如果您想了解更多关于Apache ACE的信息,我建议您阅读ACE网站上的以下两篇文章:
老实说,如果你想要的只是在启动时更新一组软件包,那么ACE就有点矫枉过正了。它可用于管理多个&#34;目标&#34; (来自OSGi的框架)来自中央服务器,自动推送更新到它并管理大量的捆绑和其他工件,将它们分组在功能和发行版中。
答案 2 :(得分:0)
您是否尝试过实施listener?