2014-08-30 83 views
1

我只是試圖解決我對捆綁停止時發生的情況以及對依賴它們的捆綁的後果的理解。捆綁依賴於已解決狀態的捆綁

例如,如果有兩個軟件包A和B.軟件包A沒有依賴性(除了OSGi框架),但導出一些軟件包。 Bundle B從A中導入包,然後使用它們中的類但不包含服務(如果有)。這兩個軟件包都安裝在OSGi框架中,並將其狀態報告爲「活動」。

現在情況發生束A被停止(但不重新啓動),所以如果我理解正確的束A轉換到'已解決'狀態。這是否意味着捆綁包A中的任何出口都不可用,如果是的話,捆綁B也會在A時停止(由框架自動)?

回答

1

當捆綁包B啓動時,捆綁包A也會啓動(之前)。但是,如果捆綁包A已停止,捆綁包B將不會停止。可能有三種原因疊B將停止:

  • 停止呼籲捆B
  • 框架的啓動級別比捆B的起始水平低
  • 捆B變得懸而未決

此外:如果在軟件包A上調用卸載,軟件包B將仍然處於活動狀態。原因是捆綁包A會得到一個「標記爲移除」狀態,但它不會被完全刪除,直到任何連接到它。如果在捆綁包B上調用刷新,則接線將被刪除。

+0

在我的OSGI控制檯中,即使卸載A後,我也能夠刷新,解析並激活Bundle B.爲什麼? – Ngupta 2017-05-23 19:33:21

1

已解決狀態和活動狀態之間的區別僅在於執行啓動器的啓動/停止方法。因此,停止捆綁包A不會影響捆綁包B,只要它僅使用捆綁包A中的類,而不使用將被註銷的服務。

事實上,如果捆綁包A沒有BundleActivator,捆綁包將從已解決 - >主動或主動 - >解決方案轉換,而根本沒有任何更改。