yuyee

bundle生命周期

bundle的生命周期分为installed,resovled,starting,active,stopping,unstalled
install:解析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 羔羊 阅读(511) 评论(0)  编辑  收藏 所属分类: osgi