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 联系起来。
Equinox OSGi是IBM公司开发的一个开源OSGi实现,它是Eclipse项目的一部分,用于创建模块化、可扩展且轻量级的应用程序。OSGi(Open Service Gateway Initiative)是一种Java平台的标准,它允许开发者将应用程序分解...
最近整OSGI,整的心情很是不爽,尤其最近搞equinox命令行下的bundle调试,搞两下就很厌倦输入java -jar equinox.jar -console,然后可怜的去加载一个个bundle,虽然通过config.ini可以一把加载相应需要的bundle,但是每次...
Equinox是Eclipse基金会提供的一个OSGi实现,它是Eclipse IDE的基础,同时也被广泛用于构建可扩展的、灵活的和模块化的Java应用程序。 本教程将深入讲解如何使用Equinox开发OSGi应用程序,并提供相关的源码供学习和...
Equinox是Eclipse组织提供的一个OSGi框架的实现,它支持Eclipse平台的插件机制,使得Eclipse可以作为一个动态的模块化应用程序运行。 标签“OSGi Equinox Modular Java”强调了三个核心概念:OSGi,Equinox以及模块...
Equinox是Eclipse项目的一个组件,它提供了OSGi规范的实现,使我们能够构建模块化、可扩展且灵活的Java应用程序。OSGi(Open Service Gateway Initiative)是一种Java标准,它允许我们创建由小型、独立组件组成的...
标题"基于EQUINOX的OSGI BUNDLE运行例子"指的是一个实际操作示例,展示了如何在EQUINOX OSGi环境中运行OSGi Bundle。EQUINOX提供了一个完整的运行时环境,使得开发者可以方便地管理和执行这些模块化的Bundle。 描述...
1. **Equinox简介**:Equinox是一个高度模块化、动态的Java运行环境,基于OSGi框架规范构建。它体积小巧,性能卓越,且高度可定制。Equinox是所有Eclipse系统的基础,从嵌入式航空自助登机亭、滑雪场闸门到丰富的...
【标题】"Equinox快速入门"是针对IBM的开源OSGi框架Equinox的学习指南,它主要帮助初学者理解和掌握如何在开发环境中使用Equinox。OSGi(Open Service Gateway Initiative)是一种模块化系统,用于Java应用程序的...
基于Equinox平台的OSGi Bundle开发提供了一种强大且灵活的方式来构建复杂的、可扩展的Java应用程序。通过利用OSGi的服务模型和动态模块化特性,开发人员可以创建出高度解耦、易于维护和升级的系统。无论是构建企业级...
从Eclipse环境中脱离,将Equinox OSGi应用程序部署为独立的Java应用,需要创建一个包含所有依赖bundle和Equinox运行时的启动脚本。启动脚本通常会调用Equinox提供的启动器,如`org.eclipse.osgi.launch....
下面将详细介绍如何使用Equinox框架开发一个简单的OSGi应用程序——Hello World示例。 ##### 准备工作 1. 下载并安装Eclipse 3.x版本。推荐使用Eclipse 3.3.2或更高版本,因为它全面支持OSGi R4规范。 2. 解压...
Equinox是OSGi规范的一个实现,它是由Eclipse基金会开发的。本文将详细介绍OSGi Equinox的原理、应用以及最佳实践。 一、OSGi Equinox原理 OSGi框架的核心是其模块化系统,它将程序分割成一系列的“Bundle”,每个...
以下是对“OSGi和Equinox:创建高度模块化的Java系统”这一主题的深入解析。 ### OSGi:模块化标准 OSGi(Open Service Gateway Initiative)最初是为了满足嵌入式设备如家庭网关和机顶盒的需求而设计的。随着时间...
Equinox OSGi是IBM公司开发的一个开源实现,它是OSGi规范的主要实现之一,用于创建模块化Java应用程序。OSGi(Open Services Gateway Initiative)是一种Java技术,它将JVM(Java虚拟机)转换为模块化的运行时环境,...
OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...
Equinox是Eclipse基金会提供的一个OSGi实现,它允许开发者构建可热插拔的组件,使得系统具有更好的可扩展性和维护性。本章节的核心内容是将GPS(全球定位系统)和安全气囊服务作为服务发布,同时确保它们对外部...
Equinox是OSGi规范的一个实现,由Eclipse基金会开发,是Eclipse IDE的基础。本资源包括两部分:《深入理解OSGi:Equinox原理、应用与最佳实践》的源代码和equinox-SDK-3.8的源代码。 深入理解OSGi这本书提供了对...
Equinox是Eclipse基金会实现OSGi核心规范的一个开源实现,它是OSGi联盟指定的参考实现之一。Spring DM(Dependency Manager)则是Spring框架对OSGi环境的支持,它使得Spring应用可以在OSGi容器中无缝运行。 在OSGi...