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 的 ServletBridge 项目,提供一个示例来说明如何使用 ... 前一种:和普通的 OSGI bundle 开发差不多,而后一种:Equinox 提供 servletBridge 来将 OSGI framework 和 Servelet Container 联系起来。
最近整OSGI,整的心情很是不爽,尤其最近搞equinox命令行下的bundle调试,搞两下就很厌倦输入java -jar equinox.jar -console,然后可怜的去加载一个个bundle,虽然通过config.ini可以一把加载相应需要的bundle,但是每次...
第一部分主要介绍了OSGi和Equinox,以及OSGi标准的Eclipse实现;第二部分采用非正式教程的方式教给读者如何从零开始构建真实的Toast应用,针对每一个步骤都提供了完整的在线示例代码;第三部分由原型构建转向实际的...
Equinox开发OSGi应用程序
http://www.cnblogs.com/kira2will/p/5040264.html
本教程就将演示如何在 Eclipse ...并结合示例代码演示 OSGi 开发的一些重要技术,最后探讨了基于 OSGi 应用程序一般所采用的架构,以及如何将 Equinox OSGi 应用程序脱离 Eclipse 而部署为一个标准的 Java 应用程序。
OSGi and Equinox, Creating Highly Modular Java Systems
我实现的《使用Equinox开发OSGI应用程序》全部功能的代码和分发包,工程师基于Eclipse3.3的
介绍基于Equinox平台的OSGi Bundle开发
Equinox_osgi_skeleton 这个git仓库包含一个带有Equinox OSGi最小设置的Eclipse工作区。
基于 equinox 的 OSGI 运行BUNDLE例子,已包含 ECLIPSE 下的OSGI平台包,按步骤运行即可。 当然,设置JAVA_HOME,及BIN环境变量运行JAVAC 就不用说了 ^-^
深入理解OSGi:Equinox原理、应用与最佳实践.pdfOSGi应用开发
OSGi and Equinox:Creating Highly Modular Java Systems
资源名称:OSGi与Equinox 创建高度模块化的Java系统内容简介:阅读本书,首先你很快就会使用Eclipse bundle工具创建第一个基于OSGi的系统,进而转向复杂的产品开发。接下来,你将掌握一些用于创建具有特殊模块化、...
OSGi_with_Eclipse_Equinox_-_Tutorial
NULL 博文链接:https://dreava.iteye.com/blog/547190
maven-osgi-plugin-launcher-framework-equinox-1.0.15.jar
OSGi与Equinox 创建高度模块化的Java系统 This first part of the book introduces OSGi and Equinox, Eclipse’s implementation of the OSGi standard. Chapter 1outlines the history and context of OSGi. Its ...
深入理解OSGi:Equinox原理、应用与最佳实践源代码,同时附带equinox-SDK-3.8源代码。