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

标签 java maven osgi updates apache-ace

在 OSGi (Apache Felix 4.2.1) 中,我希望我的包在启动时自动检查更新。

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

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

我想自动刷新 bundle (使用 FrameworkWiring),但前提是其中一个 .update() 调用实际上导致了我的服务器的新部署。

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

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

最佳答案

它们都已更新,因为您的代码明确地对所有这些调用update

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

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

相关文章:

java - JSP 和 OSGi : bundling css and javascript

java - Spring RestTemplate with rootUri 返回 URI 不是绝对错误

java - 防止 toString() 无限递归的最有效方法?

java - 在gradle中更改生成代码的输出目录

Java 8 流分组通过使用比较器

java - 动态创建和配置具有依赖关系的 OSGi 服务

java - 在类路径文件中找不到自动测试的问题

Maven 安装时出现 Maven 构建错误

java - Spring 启动: Cannot load configuration class

osgi - 在Pom文件中将jar添加到apache felix?