Equinox OSGi系列之一 Equinox入门
来源:互联网 发布:站长之家工具源码 编辑:程序博客网 时间:2024/05/25 19:58
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入门
- Equinox OSGi系列之一 Equinox入门
- Equinox OSGi系列之一 Equinox入门
- Equinox OSGi系列之二 搭建Equinox OSGi核心环境
- Equinox OSGi系列之二 搭建Equinox OSGi核心环境
- Equinox OSGi
- Equinox OSGi系列之三 Equinox配置参数详解
- Equinox OSGi系列之三 Equinox配置参数详解
- OSGI之Debug Equinox
- Eclipse 、 Equinox 和 OSGi
- equinox的osgi命令
- OSGI Equinox 环境搭建
- osgi equinox helloword
- Equinox 和 OSGI 介绍
- OSGi#1:Equinox 初探
- OSGI EQUINOX 参数配置
- 使用equinox开发osgi
- equinox
- If I were a child.......
- delphi idtcp通信server
- Access数据导入DB2
- Access数据导入DB2
- 需求的陷阱
- Equinox OSGi系列之一 Equinox入门
- Access数据导入DB2
- 抽象工厂模式
- gridview 删除时出错
- 全面解析IIS
- 手机应用测试的要点
- 导出数据库出现.EXP-00003: 未找到段 (11,419) 的存储定义
- 生活
- 生活