[英]Karaf : Recommended way to uninstall/install API's bundle, and how to avoid ghost bundle resolution
在過去的兩年中,我一直在使用Karaf(2.4。*和4.0。*)執行不同的任務,並且每次卸載/安裝API捆綁包時都遇到緩存問題。
讓我們想象一下以下情形:
當我使用bundle:install -s安裝bundle,卸載以卸載它們時,會發生不同的行為:
-core並不總是停止的。 實際上,他使用的是service-api的緩存版本。 當我執行導入-i(2)時,甚至可以看到包ID(1)。 進行“解決(2)”並不能解決問題,只能解決“停止(2)”然后重新啟動的事實。
當我安裝service-api / 1.1.0時,仍然會出現3中的錯誤,並且我的服務核心再次使用舊的-api。 最大的問題是,如果我安裝了新的服務肥皂,它將使用捆綁軟件(3),而(2)使用捆綁軟件(1),從而在類加載器之間產生沖突。
我在互聯網上找不到關於此問題的任何資源,並且我嘗試了Equinox&Felix,但沒有看到該問題的任何解決方案。 bundle:install是安裝bundle的好方法嗎? 使用部署是否是更好的解決方案?
獎勵:在OSGI規范中,在發布所有參考之前,不應該卸載捆綁軟件,但是在Karaf中,捆綁軟件是直接在直接卸載自身。這是否是導致上述問題的原因?
您所看到的符合OSGi規范。 卸載API時,所有使用該API的捆綁軟件仍將使用它,直到再次解決它們為止。 引入此行為是為了避免在運行時級聯更改。
要使捆綁包獲取或釋放API,您需要解決捆綁包。 最簡單的方法是使用resolve命令。 解析給定的捆綁包或所有捆綁包。
自動解析捆綁軟件的另一種方法是始終使用Apache Karaf功能安裝它們。 當您安裝/卸載功能時,Karaf將始終確保重新解析所有可能受影響的捆綁軟件。
要增加Christian的答案-您需要了解安裝/卸載捆綁軟件的不同方法是如何工作的。 不幸的是,似乎沒有標准的方法!
例如,如果您從gogo shell卸載,它將不會重新解析。 也就是說,使用已刪除的捆綁軟件的捆綁軟件在重新解析之前仍會表現為什么都沒有發生。 但是,如果您先安裝然后通過Fileinstall卸載,它將自動重新解析。 正如Christian指出的,Karaf功能也是如此。
如您在這里看到的,您所描述的不是特定於Karaf的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.