Equinox OSGi系列之一 Equinox入門

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.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 標準服務實現如下所示:
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.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 列表:
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 服務提供一層封裝。封裝的應用服務器必須安裝該 servlet bridge
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.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 作爲其系統內核實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章