簡體   English   中英

如何在運行時清理OSGi捆綁包緩存

[英]How to clean OSGi bundles cache at runtime

我有以下示例方案...(請注意,我可以使用服務來實現方案,但是我正在嘗試一些事情)

一個具有Activator類的OSGi捆綁包(將其命名為“客戶端”),另一個OSGi捆綁包是一個簡單的庫(命名為“服務器”),其中公開了一個名為callMe()的方法。 在“客戶端”的start()方法中,有一個對“服務器”的callMe()方法的調用。 當然,“服務器”捆綁包在具有callMe()方法的類的地方公開了該包,而“客戶端”捆綁包則將其作為導入的包。 在未安裝兩個捆綁軟件的情況下啟動OSGi框架,我首先安裝了“客戶端”捆綁軟件,當我嘗試執行start()方法時,顯示以下錯誤:

org.osgi.framework.BundleException:包org.example.helloworld中未解決的約束[4]:無法解決4.0:缺少要求[4.0] osgi.wiring.package; (osgi.wiring.package = org.example.helloworldlib)

沒錯,因為既未安裝也未解決“服務器”捆綁包。 現在,我安裝了“服務器”捆綁包,並在“客戶端”上調用了start():這一次一切正常,因為安裝了“服務器”捆綁包,因此可以解析,激活“客戶端”,並且可以在其上調用callMe()方法“服務器”。

之后,我卸載“服務器”捆綁包,離開“客戶端”。 現在奇怪的是...停止“客戶端”並重新啟動()...“客戶端”有效! 即使我以前卸載了它,也可以調用“ server”的callMe()方法! 我知道OSGi框架具有捆綁包緩存,因此似乎“服務器”捆綁包在緩存中,但是為什么沒有在捆綁包列表中顯示呢?

是否可以在運行時清除緩存?

保羅。

當捆綁包進入已解決狀態時,OSGi會建立與所需軟件包的連接。 然后,將保留這些布線,直到調用刷新為止。

因此,在卸載服務器捆綁包時,客戶端保持工作是完全正常的。

當您調用刷新時,將再次執行解析步驟。 因此,此時客戶端無法解決。 據我所知,接線沒有緩存在磁盤上。

因此,如果您卸載服務器並重新啟動框架客戶端,也應該無法解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM