`

Equinox OSGi系列之一 Equinox入门

 
阅读更多
1. 背景信息
Equinox项目是Eclipse开源组织提供的OSGi框架的实现。Eclipse3.0版本开始,其内核移植到OSGi框架上。通过OSGi框架强大的组件控制,交互和管理能力,再加上Eclipse插件的自有特点,Eclipse开源框架得到了跳跃式的发展。同时,OSGi规范得益于Eclipse IDE环境庞大的使用者,OSGi联盟也进入了快速发展时期。
OSGi框架在2006年之前还不为广大的开发者所知,OSGi的开源框架实现也只有ObjectWeb上的OscarKnopflerfish两个实现。最初的OSGi标准主要应用于J2MEJ2SEEquinox的加入使得OSGi标准的应用领域不断扩充,目前OSGiJ2EE方面的应用也在不断的发展中。IBM Websphere Application Server6.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核心框架的实现
EquinoxOSGi核心实现由三部分组成,包括:
ØOSGi核心规范的实现(org.eclipse.osgi
该项目是OSGi核心框架标准规范的实现。由于Eclipse3.0版本之前未采用OSGi作为系统内核,所以,为了重用Eclipse3.0以前核心系统的代码,EquinoxOSGi实现在一定程度上显得比较繁冗。用户如果想研究开源的OSGi框架实现的源代码,可以从Oscar(目前为ApacheFelix项目)或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工具类(如IStatusAssertIAdaptable等)组成的实用程序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规范中的服务接口定义,该BundleOSGi联盟定义的服务API接口组成
OSGi Utilities
OSGi R4规范中的工具类接口及接口实现Bundle
2.3OSGi的服务器端(J2EE实现)应用
Equinox实现了OSGiJ2MEJ2SE方面的应用的同时,也推动了OSGiJ2EE方面的应用。Equinox提供了一组基础的Bundle,使得使用JSPServletStrutsJ2EE技术的Web应用项目可以运行于Equinox OSGi环境中。同样的,Equinox通过一组Bundle,可以将Equinox OSGi应用嵌入到现有的Web服务器(如TomcatJetty等)和应用服务器(如WebsphereWeblogic等)中。
下面是EquinoxJ2EE应用方面的一组Bundle列表:
Equinox J2EE实现项目
服务名称
服务说明
HTTP service
BundleOSGi 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为底层的应用服务器(如TomcatJetty等)发布为OSGi HTTP服务提供一层封装。封装的应用服务器必须安装该servletbridge
Servlet API
Servlet规范标准接口APIBundle封装。
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应用(JSPServletStruts等),请参考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. 结论与参考
本文简要概述了EquinoxOSGi规范方面的实现以及它为OSGi在其他领域的应用所做的研究。后续文档中,我们将会将上述各个方面展开进行详细的描述。OSGi的广泛应用将大大推动JAVA由面向对象的编程向面向组件和服务的编程转变。
目前,JCP组织提出JSR-291OSGi纳入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 SubsytemComponent Model两部分。据称,该内核将在JDK 7中集成,同时,SUN在其开源的GlassFish J2EE应用服务器项目V3版本中将HK2作为其系统内核实现。
分享到:
评论

相关推荐

    Equinox OSGI ServletBridge 原理与实践.rar

    本文将介绍 Equinox 的 ServletBridge 项目,提供一个示例来说明如何使用 ... 前一种:和普通的 OSGI bundle 开发差不多,而后一种:Equinox 提供 servletBridge 来将 OSGI framework 和 Servelet Container 联系起来。

    Equinox OSGi应用嵌入Jersey框架搭建REST服务

    Equinox OSGi是IBM公司开发的一个开源OSGi实现,它是Eclipse项目的一部分,用于创建模块化、可扩展且轻量级的应用程序。OSGi(Open Service Gateway Initiative)是一种Java平台的标准,它允许开发者将应用程序分解...

    我写的equinox osgi server

    最近整OSGI,整的心情很是不爽,尤其最近搞equinox命令行下的bundle调试,搞两下就很厌倦输入java -jar equinox.jar -console,然后可怜的去加载一个个bundle,虽然通过config.ini可以一把加载相应需要的bundle,但是每次...

    使用Equinox开发OSGI应用程序工程及源码

    Equinox是Eclipse基金会提供的一个OSGi实现,它是Eclipse IDE的基础,同时也被广泛用于构建可扩展的、灵活的和模块化的Java应用程序。 本教程将深入讲解如何使用Equinox开发OSGi应用程序,并提供相关的源码供学习和...

    OSGi and Equinox

    Equinox是Eclipse组织提供的一个OSGi框架的实现,它支持Eclipse平台的插件机制,使得Eclipse可以作为一个动态的模块化应用程序运行。 标签“OSGi Equinox Modular Java”强调了三个核心概念:OSGi,Equinox以及模块...

    基于Equinox开发OSGi应用(一)

    Equinox是Eclipse项目的一个组件,它提供了OSGi规范的实现,使我们能够构建模块化、可扩展且灵活的Java应用程序。OSGi(Open Service Gateway Initiative)是一种Java标准,它允许我们创建由小型、独立组件组成的...

    基于EQUINOX的 OSGI BUNDLE 运行例子

    标题"基于EQUINOX的OSGI BUNDLE运行例子"指的是一个实际操作示例,展示了如何在EQUINOX OSGi环境中运行OSGi Bundle。EQUINOX提供了一个完整的运行时环境,使得开发者可以方便地管理和执行这些模块化的Bundle。 描述...

    Geting started with Equinox and OSGi

    1. **Equinox简介**:Equinox是一个高度模块化、动态的Java运行环境,基于OSGi框架规范构建。它体积小巧,性能卓越,且高度可定制。Equinox是所有Eclipse系统的基础,从嵌入式航空自助登机亭、滑雪场闸门到丰富的...

    equinox快速入门

    【标题】"Equinox快速入门"是针对IBM的开源OSGi框架Equinox的学习指南,它主要帮助初学者理解和掌握如何在开发环境中使用Equinox。OSGi(Open Service Gateway Initiative)是一种模块化系统,用于Java应用程序的...

    Equinox OSGi 开发

    基于Equinox平台的OSGi Bundle开发提供了一种强大且灵活的方式来构建复杂的、可扩展的Java应用程序。通过利用OSGi的服务模型和动态模块化特性,开发人员可以创建出高度解耦、易于维护和升级的系统。无论是构建企业级...

    使用Equinox开发OSGi应用程序

    从Eclipse环境中脱离,将Equinox OSGi应用程序部署为独立的Java应用,需要创建一个包含所有依赖bundle和Equinox运行时的启动脚本。启动脚本通常会调用Equinox提供的启动器,如`org.eclipse.osgi.launch....

    Equinox开发OSGi应用程序

    下面将详细介绍如何使用Equinox框架开发一个简单的OSGi应用程序——Hello World示例。 ##### 准备工作 1. 下载并安装Eclipse 3.x版本。推荐使用Eclipse 3.3.2或更高版本,因为它全面支持OSGi R4规范。 2. 解压...

    深入理解OSGi:Equinox原理、应用与最佳实践.pdf

    Equinox是OSGi规范的一个实现,它是由Eclipse基金会开发的。本文将详细介绍OSGi Equinox的原理、应用以及最佳实践。 一、OSGi Equinox原理 OSGi框架的核心是其模块化系统,它将程序分割成一系列的“Bundle”,每个...

    OSGi and Equinox:Creating Highly Modular Java Systems

    以下是对“OSGi和Equinox:创建高度模块化的Java系统”这一主题的深入解析。 ### OSGi:模块化标准 OSGi(Open Service Gateway Initiative)最初是为了满足嵌入式设备如家庭网关和机顶盒的需求而设计的。随着时间...

    equinox_osgi_skeleton:这个git仓库包含一个带有Equinox OSGi最小设置的Eclipse工作区

    Equinox OSGi是IBM公司开发的一个开源实现,它是OSGi规范的主要实现之一,用于创建模块化Java应用程序。OSGi(Open Services Gateway Initiative)是一种Java技术,它将JVM(Java虚拟机)转换为模块化的运行时环境,...

    OSGi入门教程(OSGi Introduce)

    OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...

    《osgi与equinox创建高度模块化的java系统》第五章源码

    Equinox是Eclipse基金会提供的一个OSGi实现,它允许开发者构建可热插拔的组件,使得系统具有更好的可扩展性和维护性。本章节的核心内容是将GPS(全球定位系统)和安全气囊服务作为服务发布,同时确保它们对外部...

    深入理解OSGi:Equinox原理、应用与最佳实践源代码+equinox-SDK-3.8源代码

    Equinox是OSGi规范的一个实现,由Eclipse基金会开发,是Eclipse IDE的基础。本资源包括两部分:《深入理解OSGi:Equinox原理、应用与最佳实践》的源代码和equinox-SDK-3.8的源代码。 深入理解OSGi这本书提供了对...

    osgi Equinox bridge and spring dm最新jar包

    Equinox是Eclipse基金会实现OSGi核心规范的一个开源实现,它是OSGi联盟指定的参考实现之一。Spring DM(Dependency Manager)则是Spring框架对OSGi环境的支持,它使得Spring应用可以在OSGi容器中无缝运行。 在OSGi...

Global site tag (gtag.js) - Google Analytics