2009-09-16 64 views
3

我有一個運行的春分osgi框架與一堆已啓動的包。現在我通過'update'更新一個使用osgi控制檯的軟件包。 (或使用提供的方法:bundle.update(url));Equinox:框架重新啓動後丟失的包的更新

一切工作完美...但如果我完全重新啓動osgi框架之前更新的捆綁包再次處於原始狀態(因爲它是在更新之前)。

我使用eclipse的update.configurator來搜索插件目錄中的所有包並安裝它們,但我認爲它可以識別包是否已更新。

有人可以給我一個提示,我失蹤了嗎?

感謝, 邁克爾滿庚

回答

1

你是如何開始春分?你是否開始使用-clean(會消滅所有更新)?

請注意,'udpate'只是更新內存中運行的副本,而不是更改磁盤上原始JAR上的任何位。如果你啓動了春分,並通過舊包(但不是新包),那麼它可能會回到舊狀態。

P2在一定程度上假設一旦你切割了一個包的位,然後它保持不變 - 換句話說,P2有效地打破了bundle.update()的地位。但是,您可能應該管理磁盤上的位,以便即使某人確實執行了清理操作,您也可以獲得正確的數據。

+1

嗨!不,我不開始用 - 清潔。目前我使用的是equinox 3.2,因爲我從未換到更高版本。 也許問題是,我認爲bundle.update(...)將捆綁包的上傳版本存儲在配置區域中(這是爲一系列捆綁包完成的......當jar包不知道規則時存儲在那裏,當不存在時)。 如果是這種情況..我會更改我的代碼,以便上傳文件首先將文件存儲到文件系統,然後刪除舊版本。 如果這是對應的方法。 傷心,我不能在這種情況下使用bundle.update(InputStream in)。 你覺得怎麼樣? – 2009-09-20 08:35:35

+1

OSGi規範沒有說明重啓後應該發生什麼事情。只是它應該把它帶回來。我不認爲更新本身會更新持久包 - 特別是對於基於文件的包。我不確定如果從遠程URL安裝捆綁軟件並執行更新會發生什麼情況。 無論如何,在這種情況下,該規範的這個區域是未定義的:-) 請注意,如果需要,仍然可以使用bundle.update(InputStream)。但是,您必須安排將位更新到正確的位置,然後(之後)調用update()。 – AlBlue 2009-09-20 09:30:31

+0

我會改變我的impl,使其取代原來的基於文件的捆綁。 感謝您的幫助! – 2009-09-21 09:02:29

相關問題