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 作为其系统内核实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值