我嘗試學習osgi是如何工作的。我寫了我的第一個hello-world包,它在bundle激活器類的start-method被執行時給出了一些控制檯輸出。現在,我已閱讀了懶惰的啓動機制,並將此標誌放到了我的捆綁軟件清單中。然後,我啓動了Equinox控制檯,安裝了我的包並啓動了它。但現在我已經期望我的包被標記爲「開始」。但它已經將其稱爲啓動方法並被標記爲活動。 我是否瞭解懶惰啓動機制的任何錯誤?osgi軟件包生命週期問題
回答
如果您有其他捆綁包依賴於捆綁軟件包中的捆綁包和類,則使用懶惰開始標誌。
說你有兩束A和B,其中
- 一個出口C類
- B依賴於一個
- B包含一類d指向Ç
什麼捆綁B被激活時發生?
沒有 lazy-load標誌,首先加載並激活A bundle。
隨着的延遲加載標誌,則一束未加載或激活,直到類d需要引用類C.
,可以使在所述的活動模式非常大的差異,如捆綁的加載和激活被推遲發生,儘可能延遲加載標誌,所以來自捆綁的初始響應非常快...
相反,這個標誌也使它成爲一個更多的洞很難推斷B中方法的執行時間,因爲這可以在任何時候隨着加載和激活bundle而被截獲......
您說過,安裝後您已經開始安裝捆綁軟件 - 如果您手動啓動捆綁軟件包,則無論採用惰性激活策略,它都會被激活。
根據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. 頁生命週期問題
- 2. Android生命週期問題
- 3. Android生命週期問題
- 4. OSGi軟件包啓動問題
- 5. 軟件開發生命週期資源
- 6. 活動生命週期中的問題
- 7. Glassfish戰爭生命週期問題
- 8. Android活動生命週期問題
- 9. 活動生命週期問題
- 10. 活動生命週期相關問題
- 11. iOS 5.0查看生命週期問題
- 12. 片段生命週期的問題
- 13. 關於asp.net生命週期的問題
- 14. 頁面生命週期問題
- 15. ASP.net頁面生命週期問題
- 16. JSF 2 f:ajax生命週期問題
- 17. Axapta:表單生命週期問題
- 18. Android活動生命週期問題
- 19. 問題與頁面生命週期(asp.net)
- 20. ASP.NET頁面生命週期問題
- 21. JSF - 關於生命週期的問題
- 22. 活動生命週期問題
- 23. 會話生命週期問題
- 24. 光標生命週期問題
- 25. asp.net頁面生命週期問題
- 26. 應用程序生命週期問題
- 27. 微軟dotnet(DNX)的生命週期
- 28. OSGi的DS組件的生命週期和參考
- 29. 問題OSGI包
- 30. angular2組件生命週期
非常感謝你們倆!這在我的書中沒有得到很好的解釋,但現在我明白了:-) – July