2011-07-16 121 views
5

我嘗試學習osgi是如何工作的。我寫了我的第一個hello-world包,它在bundle激活器類的start-method被執行時給出了一些控制檯輸出。現在,我已閱讀了懶惰的啓動機制,並將此標誌放到了我的捆綁軟件清單中。然後,我啓動了Equinox控制檯,安裝了我的包並啓動了它。但現在我已經期望我的包被標記爲「開始」。但它已經將其稱爲啓動方法並被標記爲活動。 我是否瞭解懶惰啓動機制的任何錯誤?osgi軟件包生命週期問題

回答

8

如果您有其他捆綁包依賴於捆綁軟件包中的捆綁包和類,則使用懶惰開始標誌。

說你有兩束A和B,其中

  • 一個出口C類
  • B依賴於一個
  • B包含一類d指向Ç

什麼捆綁B被激活時發生?

沒有 lazy-load標誌,首先加載並激活A bundle。

隨着的延遲加載標誌,則一束未加載或激活,直到類d需要引用類C.

,可以使在所述的活動模式非常大的差異,如捆綁的加載和激活被推遲發生,儘可能延遲加載標誌,所以來自捆綁的初始響應非常快...

相反,這個標誌也使它成爲一個更多的洞很難推斷B中方法的執行時間,因爲這可以在任何時候隨着加載和激活bundle而被截獲......

+0

非常感謝你們倆!這在我的書中沒有得到很好的解釋,但現在我明白了:-) – July

3

您說過,安裝後您已經開始安裝捆綁軟件 - 如果您手動啓動捆綁軟件包,則無論採用惰性激活策略,它都會被激活。

根據the OSGi specification以下是激活真:

懶惰的激活策略表示捆綁,一旦開始,必須 不能直到一類是從它加載啓動;在正常的 類加載期間或通過Bundle loadClass方法。資源加載 不會觸發激活。此默認激活策略的更改會反映在捆綁包的狀態及其 事件中。當包使用lazy激活策略啓動,必須​​採取 以下步驟:在束創建

  • 一個包上下文。
  • 捆綁包狀態被移動到STARTING狀態。
  • LAZY_ACTIVATION事件被觸發。
  • 系統等待來自包發生的類加載。
  • 正常的STARTING事件被觸發。
  • 該包已激活。
  • 捆綁包狀態被移至ACTIVE。
  • STARTED事件被觸發。

如果因爲包激活啓動方法 拋出的異常激活失敗,則必須捆綁而不調用 包激活停止方法停止。這些步驟如圖4.29中的流程圖 所示。該流程圖還顯示了正常激活激活的 激活策略和激活的惰性激活策略之間的差異。

更新:我不能說我寫的,我當時已經打開了規範版本的答案(不過,我相信,這是不是4.2或4.3),我檢查了電流,V5 .0規範,第4.4.6.2節包含實際的,語義上相同的地方。

+1

您應該提供規範的來源。規範可能會隨着時間而改變,未來的讀者(像我)不知道你從哪個版本獲得該報價。 –

+1

感謝您的評論;我已經添加了對規範的引用。 –