java - OSGi:如何知道 bundle 是否已更新

标签 java maven osgi updates apache-ace

在 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标题更改,但如何自动化呢?

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

最佳答案

他们都更新了 ,因为您的代码清楚地调用了 update在他们所有人身上。

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

关于java - OSGi:如何知道 bundle 是否已更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23243609/

相关文章:

java - 如何在我的 Gradle 项目中使用 slf4j 在 IntelliJ 中获取日志记录输出?

java - 基于 Maven 的 JAX WS 项目无法在 Eclipse 中运行

java - Maven使用错误版本的android进行编译

java - BND 在 'uses' 指令中包含相同包的导出包

java - 在特定时间更改图像

java - Google Search Appliance Feed错误

maven - 找不到记录器的附加程序(org.springframework.web.context.ContextLoader)

java - OSGI 容器中的数据源

java - 在 pax 考试测试阶段未创建配置管理和声明性服务

java - 如何使用getX()和getY()画一条线?