Equinox OSGi系列之一 Equinox入門
Equinox項目是Eclipse開源組織提供的OSGi框架的實現(xiàn)。Eclipse自3.0版本開始,其內(nèi)核移植到OSGi框架上。通過OSGi框架強大的組件控制,交互和管理能力,再加上Eclipse插件的自有特點,Eclipse開源框架得到了跳躍式的發(fā)展。同時,OSGi規(guī)范得益于Eclipse IDE環(huán)境龐大的使用者,OSGi聯(lián)盟也進入了快速發(fā)展時期。
51CTO編輯推薦:OSGi入門與實踐全攻略
OSGi框架在2006年之前還不為廣大的開發(fā)者所知,OSGi的開源框架實現(xiàn)也只有ObjectWeb上的Oscar和Knopflerfish兩個實現(xiàn)。最初的OSGi標準主要應用于J2ME和J2SE,Equinox的加入使得OSGi標準的應用領域不斷擴充,目前OSGi在J2EE方面的應用也在不斷的發(fā)展中。
OSGi的本質(zhì)是將Java面向?qū)ο蟮拈_發(fā)轉(zhuǎn)向面向組件和服務的開發(fā)。OSGi框架提供了一套完善的機制用于管理和控制組件(Bundle)、服務(Service)的生命周期,以及組件和服務在其生命周期內(nèi)的交互。
本文及后續(xù)系列文章將以Equinox項目為基礎,講述如何實現(xiàn)基于OSGi的應用。
2. Equinox項目概述
Equinox項目包括OSGi R4版本規(guī)范核心框架的實現(xiàn),一系列OSGi標準服務Bundle及運行基于OSGi的系統(tǒng)的一些基礎構件。用戶可以直接訪問該項目在Eclipse的網(wǎng)址Equinox獲取概括性的信息。目前,關于Equinox的進展大部分資料及項目進展存在于Eclipse Wiki上。
目前,Equinox項目包括OSGi核心框架的實現(xiàn),OSGi標準服務Bundle實現(xiàn),OSGi的服務器端(J2EE實現(xiàn))應用,Equinox部署更新框架及一些研究方向(未成熟發(fā)布的構想如JMX管理,安全管理,面向方面的設計與應用等)。
2.1 OSGi核心框架的實現(xiàn)
Equinox的OSGi核心實現(xiàn)由三部分組成,包括:
OSGi核心規(guī)范的實現(xiàn)(org.eclipse.osgi)
該項目是OSGi核心框架標準規(guī)范的實現(xiàn)。由于Eclipse在3.0版本之前未采用OSGi作為系統(tǒng)內(nèi)核,所以,為了重用Eclipse3.0以前核心系統(tǒng)的代碼,Equinox的OSGi實現(xiàn)在一定程度上顯得比較繁冗。用戶如果想研究開源的OSGi框架實現(xiàn)的源代碼,可以從Oscar(目前為Apache的Felix項目)或Knopflerfish項目著手。ObjectWeb上的Oscar項目最初實現(xiàn)OSGi R2版本框架時,整個核心的源代碼不超過40個類文件?,F(xiàn)在,Oscar項目轉(zhuǎn)由Apache維護,項目稱之為Felix,目前已發(fā)布1.0版本。Knopflerfish也是很早實現(xiàn)OSGi的一個開源項目,該項目的網(wǎng)站上提供了很多關于OSGi編程的注意事項。
OSGi框架啟動支持(org.eclipse.equinox.launcher)
OSGi 框架啟動支持對于Eclipse IDE開發(fā)環(huán)境熟悉的開發(fā)用戶來說并不算陌生。使用Eclipse以前版本的用戶會發(fā)現(xiàn)在Eclipse安裝目錄下有一個startup.jar的文件,該文件是Eclipse開發(fā)環(huán)境的入口程序封裝。Equinox將該Jar文件的實現(xiàn)遷移為一個獨立的OSGi Fragment。該Fragment主要是幫助Equinox建立起運行環(huán)境,如類加載路徑,運行配置參數(shù)等等。
Equinox啟動可執(zhí)行程序
Equinox啟動可執(zhí)行程序即為eclipse.exe文件,該執(zhí)行程序并不是Eclipse以前版本的exe可執(zhí)行文件,而是由原來的eclipse.exe程序拆分而來,該執(zhí)行文件的一部分功能拆分為一個共享DLL,放置在OSGi框架啟動支持段項目(org.eclipse.equinox.launcher)中,與原來的Eclipse根目錄下的startup.jar文件功能合并。
2.2 OSGi標準服務Bundle實現(xiàn)
OSGi在提出核心框架規(guī)范的同時為一些常用的服務如日志服務(LogService),配置管理服務(Config Admin),事件管理服務(Event Admin),HTTP服務(HTTP Service)等。Equinox提供了大部分OSGi標準服務的bundle的實現(xiàn),同時,借助于Eclipse環(huán)境的一些自身的特點,Equinox在實現(xiàn)這些OSGi標準服務的同時,提供了很多功能擴展服務(如org.eclipse.equinox.common)。
Equinox項目目前提供的OSGi標準服務實現(xiàn)如下所示:
org.eclipse.equinox.app
Application Container
該項目實現(xiàn)了OSGi R4 MEG中的應用程序容器服務
org.eclipse.equinox.common
Common Utility Bundle
由一組Eclipse工具類(如IStatus,Assert,IAdaptable等)組成的實用程序Bundle。該Bundle也可以在非OSGi環(huán)境中獨立使用。
org.eclipse.equinox.device
Device Access Service
OSGi R4規(guī)范中的Device Access Service標準服務的實現(xiàn),該組件由Prosyst公司提供實現(xiàn)。
org.eclipse.equinox.ds
Declarative Services
OSGi R4規(guī)范中的Declarative Service標準服務的實現(xiàn),該組件由Prosyst公司提供實現(xiàn)
org.eclipse.equinox.event
Event Admin Service
OSGi R4規(guī)范中的事件管理服務的實現(xiàn)。
org.eclipse.equinox.http
HTTP Service
OSGi R4規(guī)范中的HTTP服務實現(xiàn)
org.eclipse.equinox.log
Log Service
OSGi R4規(guī)范中的日志服務實現(xiàn)
org.eclipse.equinox.metatype
Metatype Service
OSGi R4規(guī)范中的Metatype服務的實現(xiàn)
org.eclipse.equinox.preferences
Preferences Service
OSGi R4規(guī)范中的Preferences服務的實現(xiàn)
org.eclipse.equinox.registry
Extension Registry
Equinox提供的Ecipse擴展點(extension point)注冊表服務
org.eclipse.equinox.supplement
Supplemental Bundle/JAR
Equinox提供的一組Equinox實現(xiàn)所使用的類型庫
org.eclipse.equinox.useradmin
User Admin Service
OSGi R4規(guī)范中的用戶管理服務實現(xiàn)
org.eclipse.equinox.wireadmin
Wire Admin Service
OSGi R4規(guī)范中的服務通信拓撲管理服務
org.eclipse.osgi.services
OSGi Services API
OSGi R4規(guī)范中的服務接口定義,該Bundle由OSGi聯(lián)盟定義的服務API接口組成
org.eclipse.osgi.util
OSGi Utilities
OSGi R4規(guī)范中的工具類接口及接口實現(xiàn)Bundle
2.3 OSGi的服務器端(J2EE實現(xiàn))應用
Equinox實現(xiàn)了OSGi在J2ME、J2SE方面的應用的同時,也推動了OSGi在J2EE方面的應用。Equinox提供了一組基礎的Bundle,使得使用JSP、Servlet和Struts等J2EE技術的Web應用項目可以運行于Equinox OSGi環(huán)境中。同樣的,Equinox通過一組Bundle,可以將Equinox OSGi應用嵌入到現(xiàn)有的Web服務器(如Tomcat,Jetty等)和應用服務器(如Websphere,Weblogic等)中。
下面是Equinox在J2EE應用方面的一組Bundle列表:
org.eclipse.equinox.http
HTTP service
該Bundle是OSGi R4規(guī)范中的HTTP服務的標準實現(xiàn)。目前該實現(xiàn)只支持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可以嵌入到現(xiàn)有的應用服務器中運行。該Bundle中的servlet啟動嵌入的Equinox并使其可以處理來自底層應用服務器接收的HTTP請求。
org.eclipse.equinox.http.servlet
HTTP Servlet
該Bundle為在Equinox中發(fā)布其他servlet處理引擎(如傳統(tǒng)的應用服務器)為OSGi HTTP服務提供支持 。
org.eclipse.equinox.http.servletbridge
HTTP ServletBridge
該Bundle為底層的應用服務器(如Tomcat,Jetty等)發(fā)布為OSGi HTTP服務提供一層封裝。封裝的應用服務器必須安裝該servlet bridge。
javax.servlet
Servlet API
Servlet規(guī)范標準接口API的Bundle封裝。
javax.servlet.jsp
Servlet JSP API
Servlet JSP API接口的Bundle封裝。
org.mortbay.jetty
Jetty
嵌入式Jetty實現(xiàn)的Bundle封裝。目前Equinox提供的Jetty實現(xiàn)版本為5.x。
org.eclipse.equinox.http.jetty
HTTP Jetty
該Bundle封裝Jetty為標準的OSGI HTTP服務。目前該服務只能使用Jetty 5.x版本;如果用戶希望使用Jetty 6.x版本的Bundle封裝,可以參考ops4j上的實現(xiàn)。
關于如何在Equinox環(huán)境中部署Web應用(JSP、Servlet和Struts等),請參考Equinox網(wǎng)站相關資料。我會在本系列后續(xù)文檔中給出詳細介紹。
2.4 Equinox部署更新框架(Provisioning)
Eclipse提供為插件的分組,更新及遠程維護提供了一套完善的機制。用戶可以通過遠程更新站點安裝或升級所需功能的插件。為了適應OSGi環(huán)境的特點,Equinox項目組為基于OSGi的系統(tǒng)的部署更新提供了一套全新的框架,稱為 “equinox p2”。目前該框架還在***個發(fā)布版本的***階段,該功能預計將在Eclipse 3.4版本中集成發(fā)布。
2.5 Equinox的***研究方向
資源管理(Resource Monitoring)
該方向致力于為基于OSGi的系統(tǒng)提供一個輕量級的資源監(jiān)控管理基礎框架,該框架基于JMX技術。目前該研究方向已經(jīng)提供了一套可供展示的基本實現(xiàn)。
安全管理
該方向致力于將Java安全機制(JCA/JAAS框架)集成到Eclipse中。為Eclipse/Equinox環(huán)境提供諸如消息摘要,數(shù)字簽名,密鑰存儲,證書存儲等基礎安全機制。此外,該方向還為Eclipse提供JAVA包簽名,Bundle加載時的簽名校驗,代碼權限等機制的實現(xiàn)。
面向方面的開發(fā)
該方向致力于解決在OSGi環(huán)境中面向方面編程的一些技術問題,如加載編排和模塊化等。
3. 結論與參考
本文簡要概述了Equinox在OSGi規(guī)范方面的實現(xiàn)以及它為OSGi在其他領域的應用所做的研究。后續(xù)文檔中,我們將會將上述各個方面展開進行詳細的描述。OSGi的廣泛應用將大大推動JAVA由面向?qū)ο蟮木幊滔蛎嫦蚪M件和服務的編程轉(zhuǎn)變。
目前,JCP組織提出JSR-291將OSGi納入JAVA標準規(guī)范。如果該JSR最終被集成到J2SE實現(xiàn)中,開發(fā)人員可以在JAVA基礎編程中直接采用OSGi提供動態(tài)的模塊化應用。
Equinox項目源代碼的位置位于CVS服務器上::pserver:anonymous:dev.eclipse.org/cvsroot/eclipse路徑下,以org.eclipse.equinox.*命名的項目以及該位置下的equinox-incubator目錄下。
4. 附注
SUN公司提出了一個類似于OSGi的模塊化系統(tǒng)規(guī)范稱之為“HK2”。HK2的全稱為“Hundred Kilobytes Kernel”,包括Modules Subsytem和Component Model兩部分。據(jù)稱,該內(nèi)核將在JDK 7中集成,同時,SUN在其開源的GlassFish J2EE應用服務器項目V3版本中將HK2作為其系統(tǒng)內(nèi)核實現(xiàn)。
【編輯推薦】