2015-04-21 62 views
0

我想在OSGI中實現功能切換,這意味着我想以編程方式啓動和停止包。以編程方式啓動/停止片段

對於插件,真的很容易:

Bundle plugin = //... 
plugin.start(); 
plugin.stop(); 

對於片段它不是那麼容易的。停止根本不起作用,如果我使用uninstall()該片段已經消失,並且我無法再次安裝它,因爲我不知道BundleContext#installBundle(...)的正確位置(並且正在查看Bundle#getLocation(),片段本身)。

我面臨的問題是我有一個片段有助於一些Eclipse擴展點。只要停止主機插件不會刪除這些服務(無論出於何種原因)。所以我需要手動停止這個片段(或者清除愚蠢的Eclipse高速緩存,以阻止應用程序的運行?)。

那麼如何在運行時安裝碎片?

回答

2

片段沒有自己的生命週期。它們是主機捆綁生命週期的一部分。這意味着無法獨立於主機啓動/停止它們。

如果您需要更多有關軟件包,碎片和生命週期的背景知識,我建議您閱讀OSGi規範,該規範可從http://osgi.org/網站下載。

+1

是的。如果您需要以編程方式啓動和停止某個功能,則不應使用碎片來保存該功能。 –

+0

問題是:如果我停止主機插件,該片段仍將提供其服務。 –

+0

您必須解釋「services」意味着什麼,因爲任何由bundle發佈的OSGi服務將在該bundle停止時自動消失。也許你在談論一些擴展模式(它可以做與生命週期有關的任何事情,所以你必須看看它的文檔或代碼)? –

相關問題