簡體   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