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 方面的应用也在不断的发展中。IBM Websphere Application Server 6.0 版本开始其内核转向由OSGi 实现。
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.1OSGi核心框架的实现
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.2OSGi标准服务Bundle实现
OSGi 在提出核心框架规范的同时为一些常用的服务如日志服务(LogService ),配置管理服务(Config Admin ),事件管理服务(Event Admin ),HTTP 服务(HTTP Service )等。Equinox 提供了大部分OSGi 标准服务的bundle 的实现,同时,借助于Eclipse 环境的一些自身的特点,Equinox 在实现这些OSGi 标准服务的同时,提供了很多功能扩展服务(如org.eclipse.equinox.common )。
Equinox 项目目前提供的OSGi 标准服务实现如下所示:
Equinox 实现项目
服务名称
服务说明
Application Container
该项目实现了OSGi R4 MEG 中的应用程序容器服务
Common Utility Bundle
由一组Eclipse 工具类(如IStatus Assert IAdaptable 等)组成的实用程序Bundle 。该Bundle 也可以在非OSGi 环境中独立使用。
Device Access Service
OSGi R4 规范中的Device Access Service 标准服务的实现,该组件由Prosyst 公司提供实现。
Declarative Services
OSGi R4 规范中的Declarative Service 标准服务的实现,该组件由Prosyst 公司提供实现
Event Admin Service
OSGi R4 规范中的事件管理服务的实现。
HTTP Service
OSGi R4 规范中的HTTP 服务实现
Log Service
OSGi R4 规范中的日志服务实现
Metatype Service
OSGi R4 规范中的Metatype 服务的实现
Preferences Service
OSGi R4 规范中的Preferences 服务的实现
Extension Registry
Equinox 提供的Ecipse 扩展点(extension point )注册表服务
Supplemental Bundle/JAR
Equinox 提供的一组Equinox 实现所使用的类型库
User Admin Service
OSGi R4 规范中的用户管理服务实现
Wire Admin Service
OSGi R4 规范中的服务通信拓扑管理服务
OSGi Services API
OSGi R4 规范中的服务接口定义,该Bundle OSGi 联盟定义的服务API 接口组成
OSGi Utilities
OSGi R4 规范中的工具类接口及接口实现Bundle
2.3OSGi的服务器端(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 列表:
Equinox J2EE 实现项目
服务名称
服务说明
HTTP service
Bundle OSGi R4 规范中的HTTP 服务的标准实现。目前该实现只支持Servlet 2.3
HTTP registry
Bundle 支持使用Eclipse 的扩展注册表注册servlet ,文件资源和JSP 而不是使用OSGi 中的代码注册机制。
Servlet Bridge
Bundle 提供一个底层的Hook servlet ,使得Equinox 可以嵌入到现有的应用服务器中运行。该Bundle 中的servlet 启动嵌入的Equinox 并使其可以处理来自底层应用服务器接收的HTTP 请求。
HTTP Servlet
Bundle 为在Equinox 中发布其他servlet 处理引擎(如传统的应用服务器)为OSGi HTTP 服务提供支持
HTTP ServletBridge
Bundle 为底层的应用服务器(如Tomcat Jetty 等)发布为OSGi HTTP 服务提供一层封装。封装的应用服务器必须安装该servletbridge
Servlet API
Servlet 规范标准接口API Bundle 封装。
Servlet JSP API
Servlet JSP API 接口的Bundle 封装。
Jetty
嵌入式Jetty 实现的Bundle 封装。目前Equinox 提供的Jetty 实现版本为5.x
HTTP Jetty
Bundle 封装Jetty 为标准的OSGI HTTP 服务。目前该服务只能使用Jetty 5.x 版本;如果用户希望使用Jetty 6.x 版本的Bundle 封装,可以参考 ops4j 上的实现。
关于如何在Equinox 环境中部署Web 应用(JSP Servlet Struts 等),请参考Equinox 网站相关资料。我会在本系列后续文档中给出详细介绍。
2.4Equinox部署更新框架(Provisioning
Eclipse 提供为插件的分组,更新及远程维护提供了一套完善的机制。用户可以通过远程更新站点安装或升级所需功能的插件。为了适应OSGi 环境的特点,Equinox 项目组为基于OSGi 的系统的部署更新提供了一套全新的框架,称为 equinox p2 ”。目前该框架还在第一个发布版本的最后阶段,该功能预计将在Eclipse 3.4 版本中集成发布。
2.5Equinox的最新研究方向
Ø 资源管理(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)