bundle生命周期
bundle的生命周期分為installed,resovled,starting,active,stopping,unstalledinstall:解析bundle的MANIFEST.MF信息,校驗格式,同時查看是否存在相同的bundle, 分配bundleid,生成bundle對象,并放入已安裝的bundles集合中,狀態為installed,可以通過命令bundle id來查看這個ID的bundle的關系圖
resolve:尋找bundle中所需依賴的包和bundle是否存在以及被resolve,包括import-package,require-bundle,如尋找到則進入檢查,檢查完沖突后形成綁定關系,有個關系圖直接定位,以便加載類時直接加載。
start:檢查bundle狀態,如未resolve,則先resolve,尋找MANIFEST.MF中配置的bundle-activator,找到后調用他的start方法,將bundle狀態改為 active
stop:卸載當前bundle對外提供的service,并釋放bundle引用的其他服務,之后調用activator類里的stop方法,改bundle狀態為resovled
uninstall:
檢查bundle狀態,如果為active,則先stop,釋放bundle對其他bundle的類依賴,如其他bundle依賴此bundle的類,則記錄,如沒有,則釋放該bundle的classloader,最終修改bundle的狀態為unstalled
update:
首先是停止當前bundle,
重新安裝并resovle bundle,恢復到bundle更新之前的狀態
如果希望更新bundle所引用到的類,則必須refresh動作,但refresh也值對unreslve狀態以及uninstall時還有其他類依賴classloader還存活的bundle進行unresolve動作,并重新resolve對他們有依賴的bundle,建立新的綁定關系圖,因此refresh可能會讓某些bundle的classloader重建.
posted on 2010-10-27 00:35 羔羊 閱讀(515) 評論(0) 編輯 收藏 所屬分類: osgi