什么是osgi

OSGi(Open Service Gateway Initiative)有双重含义。一方面它指OSGi Alliance组织;另一方面指该组织制定的一个基于Java语言的服务(业务)规范——OSGi服务平台(Service Platform)。

OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。OSGi容器已有多家开源实现,比如 Knoflerfish、Equinox和Apache的Felix。您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管 理这些模块单元之间的交叉依赖关系。

OSGi规范和Servlet规范及EJB规范类似,该规范定义了两种对象,一是容器对外提供的服务对象,另一个是容器和您的应用程序之间必须遵守的契约,其中,服务对象是容器要实现的。您如果想要在OSGi平台上进行开发,首先,您必须要使用OSGi API来创建您的应用,然后将之部署到OSGi容器中。
OSGi中具体实现Module的单位是bundle,一个bundle就是一个jar文件,其中包含所需的类文件和资源文件,同时必须包含一个描述文件;每个bundle都可以被独立打包、部署,有自己的生命周期。
从开发者的角度看,OSGi具有以下优点:
a) 您可以在不重启容器的情况下,动态地安装、卸载、启动和停止您的应用程序中的不同模块,避免了我们Java部署时频繁重新服务;
b) 对于您应用程序中的某一特定模块,容器可以同时运行该模块的多个版本;
c) 向模块转移带来更大的便利性,jar包只能隐藏类的方法,OSGi提供了标准的Java软件包,作为一个新的信息隐藏单元。当我们的代码是运行在一个OSGi框架内时,JAR中的每个包对于使用者来说都可以可见或隐藏。
就如同类可以用一组小的公共方法来描述其与使用者之间的规则,一个模块化的Jar文件(OSGi术语称bundle)用一组小的导出包来描述公共规则。大部分代码都隐藏在内部包中,对于其它JAR并不可见。
设想可以重命名类、分割或合并类、把类从一个包转移到另一个包、把整个包从一个JAR移动到另一个JAR,所有这些操作都不必担心会影响到JAR的使用者。这么多种类型的重构操作现在都不必再担心会出问题。基于包层次的信息隐藏给予我们施行重构的信心,让我们能够及时迎合用户的需求。
 
对于OSGi的成功应用,最有名的应该是eclipse了,它就是基于OSGi service platform的产品,相信很快将会在Java的世界普及。
阅读全文...

你可能感兴趣的:(eclipse,框架,servlet,ejb,osgi)