Equinox OSGi系列之一 Equinox入门

1. 背景信息

Equinox项目是Eclipse开源组织提供的OSGi框架的实现。Eclipse自3.0版本开始,其内核移植到OSGi框架上。通过OSGi框架强大的组件控制,交互和管理能力,再加上Eclipse插件的自有特点,Eclipse开源框架得到了跳跃式的发展。同时,OSGi规范得益于Eclipse IDE环境庞大的使用者,OSGi联盟也进入了快速发展时期。

OSGi框架在2006年之前还不为广大的开发者所知,OSGi的开源框架实现也只有ObjectWeb上的Oscar和Knopflerfish两个实现。最初的OSGi标准主要应用于J2ME和J2SE,Equinox的加入使得OSGi标准的应用领域不断扩充,目前OSGi在J2EE方面的应用也在不断的发展中。

OSGi的本质是将Java面向对象的开发转向面向组件和服务的开发。OSGi框架提供了一套完善的机制用于管理和控制组件(Bundle)、服务(Service)的生命周期,以及组件和服务在其生命周期内的交互。

本文及后续系列文章将以Equinox项目为基础,讲述如何实现基于OSGi的应用。

2. Equinox项目概述

Equinox项目包括OSGi R4版本规范核心框架的实现,一系列OSGi标准服务Bundle及运行基于OSGi的系统的一些基础构件。用户可以直接访问该项目在Eclipse的网址Equinox获取概括性的信息。目前,关于Equinox的进展大部分资料及项目进展存在于Eclipse Wiki上。

目前,Equinox项目包括OSGi核心框架的实现,OSGi标准服务Bundle实现,OSGi的服务器端(J2EE实现)应用,Equinox部署更新框架及一些研究方向(未成熟发布的构想如JMX管理,安全管理,面向方面的设计与应用等)。

2.1 OSGi核心框架的实现

Equinox的OSGi核心实现由三部分组成,包括:

Ø OSGi核心规范的实现(org.eclipse.osgi

该项目是OSGi核心框架标准规范的实现。由于Eclipse在3.0版本之前未采用OSGi作为系统内核,所以,为了重用Eclipse3.0以前核心系统的代码,Equinox的OSGi实现在一定程度上显得比较繁冗。用户如果想研究开源的OSGi框架实现的源代码,可以从Oscar(目前为Apache的Felix项目)或Knopflerfish项目着手。ObjectWeb上的Oscar项目最初实现OSGi R2版本框架时,整个核心的源代码不超过40个类文件。现在,Oscar项目转由Apache维护,项目称之为Felix,目前已发布1.0版本。Knopflerfish也是很早实现OSGi的一个开源项目,该项目的网站上提供了很多关于OSGi编程的注意事项。

Ø OSGi框架启动支持(org.eclipse.equinox.launcher

OSGi 框架启动支持对于Eclipse IDE开发环境熟悉的开发用户来说并不算陌生。使用Eclipse以前版本的用户会发现在Eclipse安装目录下有一个startup.jar的文件,该文件是Eclipse开发环境的入口程序封装。Equinox将该Jar文件的实现迁移为一个独立的OSGi Fragment。该Fragment主要是帮助Equinox建立起运行环境,如类加载路径,运行配置参数等等。

Ø Equinox启动可执行程序

Equinox启动可执行程序即为eclipse.exe文件,该执行程序并不是Eclipse以前版本的exe可执行文件,而是由原来的eclipse.exe程序拆分而来,该执行文件的一部分功能拆分为一个共享DLL,放置在OSGi框架启动支持段项目(org.eclipse.equinox.launcher)中,与原来的Eclipse根目录下的startup.jar文件功能合并。

2.2 OSGi标准服务Bundle实现

OSGi在提出核心框架规范的同时为一些常用的服务如日志服务(LogService),配置管理服务(Config Admin),事件管理服务(Event Admin),HTTP服务(HTTP Service)等。Equinox提供了大部分OSGi标准服务的bundle的实现,同时,借助于Eclipse环境的一些自身的特点,Equinox在实现这些OSGi标准服务的同时,提供了很多功能扩展服务(如org.eclipse.equinox.common)。

Equinox项目目前提供的OSGi标准服务实现如下所示:

  • org.eclipse.equinox.app

Application Container

该项目实现了OSGi R4 MEG中的应用程序容器服务

  • org.eclipse.equinox.common

Common Utility Bundle

由一组Eclipse工具类(如IStatus,Assert,IAdaptable等)组成的实用程序Bundle。该Bundle也可以在非OSGi环境中独立使用。

  • org.eclipse.equinox.device

Device Access Service

OSGi R4规范中的Device Access Service标准服务的实现,该组件由Prosyst公司提供实现。

  • org.eclipse.equinox.ds

Declarative Services

OSGi R4规范中的Declarative Service标准服务的实现,该组件由Prosyst公司提供实现

  • org.eclipse.equinox.event

Event Admin Service

OSGi R4规范中的事件管理服务的实现。

  • org.eclipse.equinox.http

HTTP Service

OSGi R4规范中的HTTP服务实现

  • org.eclipse.equinox.log

Log Service

OSGi R4规范中的日志服务实现

  • org.eclipse.equinox.metatype

Metatype Service

OSGi R4规范中的Metatype服务的实现

  • org.eclipse.equinox.preferences

Preferences Service

OSGi R4规范中的Preferences服务的实现

  • org.eclipse.equinox.registry

Extension Registry

Equinox提供的Ecipse扩展点(extension point)注册表服务

  • org.eclipse.equinox.supplement

Supplemental Bundle/JAR

Equinox提供的一组Equinox实现所使用的类型库

  • org.eclipse.equinox.useradmin

User Admin Service

OSGi R4规范中的用户管理服务实现

  • org.eclipse.equinox.wireadmin

Wire Admin Service

OSGi R4规范中的服务通信拓扑管理服务

  • org.eclipse.osgi.services

OSGi Services API

OSGi R4规范中的服务接口定义,该Bundle由OSGi联盟定义的服务API接口组成

  • org.eclipse.osgi.util

OSGi Utilities

OSGi R4规范中的工具类接口及接口实现Bundle

2.3 OSGi的服务器端(J2EE实现)应用

Equinox实现了OSGi在J2ME、J2SE方面的应用的同时,也推动了OSGi在J2EE方面的应用。Equinox提供了一组基础的Bundle,使得使用JSP、Servlet和Struts等J2EE技术的Web应用项目可以运行于Equinox OSGi环境中。同样的,Equinox通过一组Bundle,可以将Equinox OSGi应用嵌入到现有的Web服务器(如Tomcat,Jetty等)和应用服务器(如Websphere,Weblogic等)中。

下面是Equinox在J2EE应用方面的一组Bundle列表:

  • org.eclipse.equinox.http

HTTP service

该Bundle是OSGi R4规范中的HTTP服务的标准实现。目前该实现只支持Servlet 2.3。

  • org.eclipse.equinox.http.registry

HTTP registry

该Bundle支持使用Eclipse的扩展注册表注册servlet,文件资源和JSP而不是使用OSGi中的代码注册机制。

  • org.eclipse.equinox.servletbridge

Servlet Bridge

该Bundle提供一个底层的Hook servlet,使得Equinox可以嵌入到现有的应用服务器中运行。该Bundle中的servlet启动嵌入的Equinox并使其可以处理来自底层应用服务器接收的HTTP请求。

  • org.eclipse.equinox.http.servlet

HTTP Servlet

该Bundle为在Equinox中发布其他servlet处理引擎(如传统的应用服务器)为OSGi HTTP服务提供支持 。

  • org.eclipse.equinox.http.servletbridge

HTTP ServletBridge

该Bundle为底层的应用服务器(如Tomcat,Jetty等)发布为OSGi HTTP服务提供一层封装。封装的应用服务器必须安装该servlet bridge。

  • javax.servlet

Servlet API

Servlet规范标准接口API的Bundle封装。

  • javax.servlet.jsp

Servlet JSP API

Servlet JSP API接口的Bundle封装。

  • org.mortbay.jetty

Jetty

嵌入式Jetty实现的Bundle封装。目前Equinox提供的Jetty实现版本为5.x。

  • org.eclipse.equinox.http.jetty

HTTP Jetty

该Bundle封装Jetty为标准的OSGI HTTP服务。目前该服务只能使用Jetty 5.x版本;如果用户希望使用Jetty 6.x版本的Bundle封装,可以参考ops4j上的实现。

关于如何在Equinox环境中部署Web应用(JSP、Servlet和Struts等),请参考Equinox网站相关资料。我会在本系列后续文档中给出详细介绍。

2.4 Equinox部署更新框架(Provisioning)

Eclipse提供为插件的分组,更新及远程维护提供了一套完善的机制。用户可以通过远程更新站点安装或升级所需功能的插件。为了适应OSGi环境的特点,Equinox项目组为基于OSGi的系统的部署更新提供了一套全新的框架,称为 “equinox p2”。目前该框架还在第一个发布版本的最后阶段,该功能预计将在Eclipse 3.4版本中集成发布。

2.5 Equinox的最新研究方向

Ø 资源管理(Resource Monitoring

该方向致力于为基于OSGi的系统提供一个轻量级的资源监控管理基础框架,该框架基于JMX技术。目前该研究方向已经提供了一套可供展示的基本实现。

Ø 安全管理

该方向致力于将Java安全机制(JCA/JAAS框架)集成到Eclipse中。为Eclipse/Equinox环境提供诸如消息摘要,数字签名,密钥存储,证书存储等基础安全机制。此外,该方向还为Eclipse提供JAVA包签名,Bundle加载时的签名校验,代码权限等机制的实现。

Ø 面向方面的开发

该方向致力于解决在OSGi环境中面向方面编程的一些技术问题,如加载编排和模块化等。

3. 结论与参考

本文简要概述了Equinox在OSGi规范方面的实现以及它为OSGi在其他领域的应用所做的研究。后续文档中,我们将会将上述各个方面展开进行详细的描述。OSGi的广泛应用将大大推动JAVA由面向对象的编程向面向组件和服务的编程转变。

目前,JCP组织提出JSR-291将OSGi纳入JAVA标准规范。如果该JSR最终被集成到J2SE实现中,开发人员可以在JAVA基础编程中直接采用OSGi提供动态的模块化应用。

Equinox项目源代码的位置位于CVS服务器上::pserver:anonymous:dev.eclipse.org/cvsroot/eclipse路径下,以org.eclipse.equinox.*命名的项目以及该位置下的equinox-incubator目录下。

4. 附注

SUN公司提出了一个类似于OSGi的模块化系统规范称之为“HK2”。HK2的全称为“Hundred Kilobytes Kernel”,包括Modules Subsytem和Component Model两部分。据称,该内核将在JDK 7中集成,同时,SUN在其开源的GlassFish J2EE应用服务器项目V3版本中将HK2作为其系统内核实现。


你可能感兴趣的:(Equinox OSGi系列之一 Equinox入门)