什么是OSGI
OSGi(Open Service Gateway Initiative)有双重含义。一方面它指OSGi Alliance组织;另一方面指该组织制定的一个基于Java语言的服务(业务)规范——OSGi服务平台(Service Platform)。
OSGi Alliance是一个由Sun Microsystems、IBM、爱立信等于1999年3月成立的开放的标准化组织, 最初名为Connected Alliance。该组织及其标准原本主要目的在于使服务提供商通过住宅网关,为各种家庭智能设备提供各种服务。目前该平台逐渐成为一个为室内、交通工具、移动电话和其他环境下的所有类型的网络设备的应用程序和服务进行传递和远程管理的开放式服务平台。
该规范和核心部分是一个框架 ,其中定义了应用程序的生命周期模式和服务注册。基于这个框架定义了大量的OSGi服务:日志、配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO连接、连线管理、Jini和 UPnP。
这个框架实现了一个优雅、完整和动态的组件模型。应用程序(称为bundle)无需重新引导可以被远程安装、启动、升级和卸载(其中Java包/类的管理被详细定义)。API中还定义了运行远程下载管理政策的生命周期管理。服务注册允许bundles去检测新服务和取消的服务,然后相应配合。
OSGi原先关注于服务网关,其实可用于多个方面。现在OSGi规范已经用于从移动电话到开源的Eclipse(其中包括了与IBM的OSGi框架SMF兼容的开源版本)。 OSGi服务平台的应用包括:服务网关、 汽车、移动电话、 工业自动化、建筑物自动化、 PDA 网格计算、娱乐(如iPronto)、和 IDE。
OSGi规范是由成员通过公开的程序开发,对公众免费而且没有许可证限制。但是OSGi Alliance的兼容性程序只对成员开放,目前有12个兼容的实现。
2003年Eclipse选择OSGi作为其插件的底层运行时架构。Equinox project对该理念进行了实验,2004年6月在Eclipse3 R3中发布。ProSyst是面向OSGi开发者的Eclipse插件。
2003年10月, 诺基亚、摩托罗拉,ProSyst 和其他OSGi成员组建了Mobile Expert Group (MEG)为下一代智能手机规范业务平台,做为对 MIDP 和CDC的补充。
OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。 Java提供在多个平台支持产品的可移植性。OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语。这些组件能够组装进一个应用 和部署中。
OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。OSGi容器已有多家开源实现,比如 Knoflerfish、Equinox和Apache的Felix。您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管 理这些模块单元之间的交叉依赖关系。
OSGi的主要职责就是为了让开发者能够建动态化、模块化的Java系统。
传统的开发和部署的局限性
1、java讲求的是面向接口编程,比如接口A有两个实现类B和C,当在运行时需要将B转换成C的时候,就需要重新启动服务,否则是无法实现的,也就是说J2EE本身是不提供这种支持的。
2、JAR文件规范粒度太粗,没有足够的约束力。运行期,如果这些第三方Jar包不存在,或者命名存在差异,或者提供了不同JAR包版本,则会出现各种不同结果。Java SE/Java EE平台没有细化这方面的任何内容。
3、由于Java EE平台规范没有针对Java package引入版本支持,这使得在同一企业应用中几乎不可能启用同一JAR包的不同版本。与此同时,现有的Java EE技术体系难以动态升级、替换生产环境,实际的做法是,每次部署新版应用时,都需要重启应用或Java EE容器,进而影响到在线用户。
4、维护成本较高。因为企业应用的模块化程度不高,即Java EE的模块化更多地是停留在逻辑概念层面。通常,我们会将企业应用以单个WAR包形式存在,其中内置了当前应用所有的内容,包括.class、.jsp、.js等资源。很显然,这给维护工作带来挑战,毕竟升级或修改WAR包中的任何内容都可能会波及到整个WAR包。这就要求,每次升级生产环境之前,都必须对整个WAR包的各个方面进行完整的回归测试,进而增加了不必要的维护成本,包括人力和物力成本。
5、开发不具备模块化的特性,一般企业中项目往往是放到一个工程中,这样造成的后果是模块化能力不强,难于维护,越大越不容易维护。
OSGI的优缺点
a) 您可以在不重启容器的情况下,动态地安装、卸载、启动和停止您的应用程序中的不同模块;
b) 对于您应用程序中的某一特定模块,容器可以同时运行该模块的多个版本;
c) OSGi为开发嵌入式应用、移动应用、富互联网应用(RIA)提供了非常优秀的基础架构
OSGI的分类
主要分成以下三个部分:
1、OSGi服务平台Core规范及服务集合。这类似于Java SE平台。
2、OSGi服务平台Residential规范。这类似于Java ME平台。
3、OSGi服务平台Enterprise规范。这类似于Java EE平台。
使用OSGI实现SOA
模块化设计是软件设计的一个基本思想,同时作为SOA应用,一个很重要的需求就是要方便用户扩展,利用扩展向SOA应用添加新功能,并能够很方便地和应用 本身做无缝集成。这就要求SOA应用中的模块提供可接入的扩展实现,还可以提供进一步扩展的能力。OSGi具备构造满足这样特点的SOA应用模块的能力。 OSGi提供了一个微内核的机制,实现了模块的可插拔,并为模块定义了一个清晰的物理格式,保证了模块开发与复用的一致性。
详细的内容可以参考
http://book.51cto.com/art/200912/173733.htm
OSGI和云计算
云计算是当前比较热的一个话题,个人认为,在云计算的实现模式中,osgi是一个非常好的标准,用于实现松耦合的saas和paas层。
但是具体在未来的发展中是否能够成为业界的标准有待验证。