2011-09-22 140 views
5

我想在主要方法中運行OSGi框架(Equinox)。 每次我啓動框架,當我打印BundleContext.getBundles().length時,它表示框架上只安裝了1個Bundle(這當然是系統捆綁包)。 當我安裝我的第一個捆綁包時,捆綁ID將從最後一個會話繼續。假設我最後一次使用了4個bundle(並且在停止系統包之前我已經停止並卸載了所有這些包),那麼首先設置Bundle ID爲5. 現在,我想知道框架如何選擇bundle ID?爲什麼以及框架如何記住上一次會話,即使我已經卸載了所有的捆綁包?是否因爲Bundle Cache?如果是這樣,我如何清除緩存(重新從1開始編號)?OSGi框架如何設置Bundle ID?

回答

6

該框架在其管理的持久性存儲中的某處存在最後使用的捆綁ID。這個商店看起來像是一個框架實現細節。當您啓動框架時,您可以指定org.osgi.framework.storage.clean框架配置屬性。這將清除所有已安裝的軟件包,但我不確定它是否會重置上次使用的軟件包ID。

+0

它重置編號。 – palacsint

+0

@palacsint - 這個配置是否刪除你在答案中提到的'equinox/org.eclipse.osgi'文件夾? – Reza

+0

我認爲它刪除。 (我在'equinox/org.eclipse.osgi'文件夾中創建了一個空目錄,在我用'clean = true'啓動框架後它就消失了。) – palacsint

2

刪除equinox/org.eclipse.osgi文件夾將重置編號。在刪除之前,請確保您的軟件包在此文件夾下沒有任何重要數據。

bundle命令有效的捆綁ID可以顯示equinox/org.eclipse.osgi文件夾的絕對路徑:

osgi> bundle 7 
slf4j.api_1.6.1 [7] 
    Id=7, Status=ACTIVE  Data Root=D:\temp\test\equinox\org.eclipse.osgi\bundles\7\data 
... 
+0

該路徑中存儲的數據包類型重要嗎? – Reza

+1

也許你的包在那裏存儲一些持久數據。如果他們沒有堅持任何事情,通常沒有什麼可擔心的。它主要取決於你的包。配置管理器配置的另一種可能性,但我不太瞭解它。我們將持久數據存儲在此目錄之外。 – palacsint