一、OSGI(面向Java的动态模型系统)
OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用和部署中。
基于OSGI框架的开发是基于插件的开发,使得面向接口的开发模式更为突出。
在开源界中实现OSGI的框架比较知名的有:Equinox、Knopflerfish、Oscar。
二、OSGI优点
(1)可插拔的系统
硬件界中USB的设计与实现使得即插即用成为可能,而这种热插拔技术一直就是软件界所追求的,而OSGI则使得热插拔技术在软件界成为现实。
基于OSGI的系统,可通过安装新的Bundle、更新或停止现有的Bundle来实现系统功能的插拔。
(2)可动态改变行为的系统
面向对象的开发与可插拔的技术使得改变系统行为成为可能(例如动态改变登录验证方式),基于这个基础上可以做出更为复杂的多的动态改变系统行为的支持。可插拔、可动态改变行为从根本上保证了系统在运行期足够的灵活性和扩展性。
(3)稳定、高效的系统
基于OSGI的系统采用的是微核机制,微核机制保证了系统的稳定性,微核机制的系统只要微核是稳定运行的,那么系统就不会崩溃,也就是说基于OSGI的系统不会受到运行在其中的Bundle的影响,不会因为Bundle的崩溃而导致整个系统的崩溃。
OSGI的动态性原则保证了系统的高效,只有在请求发生时OSGI才去完全加载、启动相应的Bundle、Service。
(4)规范的、可积累的模块
规范的模块开发方式其实是大部分软件公司都期盼的。OSGI框架中没分bundle就是一个模块,框架能够更好地对模块进行抽象与分离。
三、OSGI开发概念
(1)OSGI两个设计方向
A.将WEB容器内嵌到OSGI环境中;
B.将OSGI以WAR的方式发布到独立的WEB容器中.
(2)Bundle的生命周期(LifeCycle)
安装,启动,更新,停止,卸载。
OSGI框架是一个微核结构的容器,所有的模块都需要运行在容器范围内,在OSGI中所有模块的部署都必须以Bundle的方式来进行部署。Bundle其实就是一个jar文件,这个jar文件和普通的jar文件唯一不同的地方就是Meta-inf目录下的MANIFEST.MF文件的内容,关于Bundle的所有信息都在MANIFEST.MF中进行描述,说的时髦点,可以称它为bundle的元数据,这些信息中包含有象Bundle的名称、描述、开发商、classpath、需要导入的包以及输出的包。
Bundle是个独立的概念,在OSGI框架中对于每个Bundle采用的是独立的classloader机制,这也就意味着不能采用传统的如引用其他Bundle的工程来实现Bundle间的协作了,那么在OSGI框架中Bundle之间是怎么协作的呢,在OSGI框架中对于每个Bundle可以定义输出的包以及引用的包,这样在Bundle间就可以共享包中的类了,尽管这样也可以直接实现简单的Bundle的协作,但在OSGI框架中更加推荐的是采用Service的方式,Service-Oriented的概念(例如SOA)大家都接触多了,OSGI框架也同样是如此的,每个Bundle可以通过BundleContext注册对外提供的服务,同时也可以通过BundleContext来获得需要引用的服务,采用Service-Oriented的方式可以使得对外提供的服务能够更加的封闭,不需要为了使用别的Bundle提供的Service而做环境依赖等的设置,同时,Bundle还可以采用Require-Bundle的方式来直接引用其他的Bundle(相当于引用其他Bundle的工程或jar)。
四、配置OSGI开发环境
做基于 Equinox 的开发,我们首先要下载Equinox。链接地址:http://archive.eclipse.org/equinox/drops/R-3.6.2-201102101200/#Equinox。Equinox 是Eclipse 的工程, Eclipse 3.1 之后的版本都是通过它来启动的,如果使用的是Eclipse 3.1 之后的版本,Eclipse 本身就已经包含了Equinox,可在Eclipse 的plugins 目录下看到类似org.eclipse.osgi_3.6.2.R36x_v20110210.jar 这样的文件(不同版本的Eclipse 下对应的版本号和日期会有所不同),它其实就是Equinox 的OSGi R4 Core的实现。如果采用的不是Eclipse 3.1 之后的版本,建议下载一个Eclipse 3.1 之后的版本。
下面我们来检查环境,首先启动Eclipse。
第一步,打开Run Configurations对话框。
第二步,创建OSGi Framework 类型的新的运行配置
第三步,显示所有的Bundles,并选中org.eclipse.osgi
第四步,运行。
点击 Run 按钮,如果Console 中出现“osgi>”并且没有错误信息,说明环境已经正常了。我们可以在osgi>提示符后输入ss,然后回车