我正在實現一個包含三個bundle的GUI(swing)應用程序,比如說bundleA,bundleB和bundleC。我使用BundleContext.installBundle(字符串位置)方法將所有這三個包安裝在/使用單獨的安裝程序包中。OSGi軟件包更新不會停止/卸載舊軟件包,爲什麼?
問題開始時我使用名爲「UpgradeBundle」另一束更新三個已安裝包中的一個。更確切地說,我調用BundleC.update(null)方法,然後調用FrameworkWiring.refreshBundles(BundlesForRefresh,null)方法,因爲我讀到該bundle更新需要調用FrameworkWiring.refreshBundles。然而,調用FrameworkWiring.refreshBundles會導致啓動一個帶有更新包的新GUI應用程序(而不是在已經運行的應用程序實例中更新它),而已經運行的應用程序會繼續使用舊捆綁包運行。任何想法爲什麼發生這種情況?
如果你需要對這個問題進行更多的討論,請讓我知道,我會嘗試進一步說明這個問題。
P.S.我正在使用Equinox OSGi框架。
親愛的@Peter非常感謝您的回覆。是的,我意識到我的應用程序在捆綁生命週期管理方面設計的很糟糕。我會深入研究這一點。 進一步我意識到,我試圖更新的bundleC實際上是一個片段(它有助於bundleA,並沒有自己的激活器)。這使我想到另一個問題:更新包與更新片段之間是否存在顯着差異? – Nadeem