初涉OSGi

原创
2012/07/17 12:49
阅读数 812

开始对OSGi作一些了解和学习。下个月可能会做的一个项目要用到OSGi。

目前作为学习资料的是OSGi and Apache Felix 3.0 Beginner's Guide》。

基本简介:

OSGi(Open Services Gateway initiative)的概念开始于1999年,OSGi Alliance组织的最初目的是将java技术嵌入到住宅网关,为各种家庭智能设备提供各种服务目前该平台逐渐成为一个为室内、交通工具、移动电话和其他环境下的所有类型的网络设备的应用程序和服务进行传递和远程管理的开放式服务平台。

OSGi(Open Services Gateway initiative)服务平台提供一个通用的平台,应用程序(Bundle)被下载后可以直接插入原有的基础框架进行使用。这样一来,新的服务能够很快地被交付、部署使用,同一个服务也能够适用于不同的目标系统。

框架结构:

在OSGi框架中,bundle作为其模块化实体。bundle类似于JAR包,由代码、资源及配置文件组成。该框架把bundle作为有生命周期的实体进行操作,并提供代码和服务。同时它还与其他组件和该框架中已安装的bundle交流发生的改变。

功能层:包括运行环境层,组件层,生命周期层,服务层,安全层(可选)。层与层之间的关系如下。

OSGi功能层结构图

bundle生命周期状态:bundle首先被安装到框架中(INSTALLED);然后组件层(module layer)读取该bundle的manifest头、执行必要的检查并确定bundle的依赖关系(RESOLVED);接下来bundle被启动、激活、停止,这些过程由生命周期层(ifecycle layer)管理;最后,如果bundle被卸载(UNINSTALLED),该组件将无法再用来做任何工作。

bundle生命周期状态图

bundle wiring:bundle通过导出(export)提供可访问的包给其他bundle使用,通过导入(import)使用其他bundle提供的包。以这样的方式将多个bundle联系起来来。此外,bundle需要在框架的服务层(service layer)进行注册,这样框架中的其他bundle便可以使用该服务。

bundle wiring

start levels:在服务平台被启动时,所有的bundle应该按照一定的顺序被启动。在OSGi框架中,每个bundle被指定一个非负整数的“bundle start level”,比如1;然后“active start level”的值用于指定哪个层的bundles应该被激活。(be active)在框架启动后,所有bundle将一层层被启动。但是当“active start level”为2时,Bundle C不会被启动,而是Resolved。使用start level可以对bundle进行层的划分,比如数据服务,逻辑服务,用户界面服务等等。

start level

展开阅读全文
打赏
0
6 收藏
分享
加载中
更多评论
打赏
0 评论
6 收藏
0
分享
在线直播报名
返回顶部
顶部