深入理解OSGI:第三章 生命周期层规范与原理(1)

OSGi规范把模块化“静态”的一面,比如如何描述元数据、如何加载模块中的类和资源等内容定义于模块层规范之中;而把模块化“动态”的一面,比如模块从安装到解析、启动、停止、更新、卸载的过程,以及在这些过程中的事件监听和上下文支持环境等定义于生命周期层(Life Cycle Layer)之中。在第2章介绍了模块层相关知识后,这里再从OSGi运行时的角度去看一下模块化“动态”的相关知识。


深入理解OSGI:第三章 生命周期层规范与原理(2)

开发人员可以使用代码来启动、停止某些Bundle,用户也可以在Equinox控制台中完成这项工作。但是从OSGi系统整体来看,各个模块的启动和停止顺序不应当由代码或人工完成,尤其是在Bundle数量很多时,OSGi框架提供一种全局的控制Bundle启动、停止的方案就显得更有必要了。


《OSGI实战》:第三章 生命周期(一)

在接下来的章节中,我们将更进一步地了解什么是生命周期管理以及为何要关注它,随后介绍OSGi bundle生命周期的定义。在后续几节里你将学到管理bundle生命周期的API。本章将借助一个简单的OSGi shell示例以及一个拥有生命周期的绘图程序版本,帮助读者掌握所有知识。


《OSGI实战》:第三章 生命周期(二)

到目前为止,我们并没有为shell实现太多的功能——只是创建了激活器并执行了关闭和启动操作。在本节中,我们将向读者展示如何实现更多的功能。通过一个简单的命令模式提供可执行的操作,你可以交互式地安装、启动、停止、更新以及卸载bundle。我们甚至还将为shell增加永久的历史记录,记录过去执行的命令。


《OSGI实战》:第三章 生命周期(三)

在OSGi中,生命周期层与模块层之间存在一种双向关系。生命周期层会对安装到框架之中的bundle进行管理,显然这会影响到模块层对bundle依赖的解析。模块层使用bundle元数据,确保bundle在被使用前它的所有所依赖都已满足。使用bundle时,模块层与生命周期层之间的这种共生关系,会产生一种类似先有鸡还是先有蛋的情景。