淺析Apache Felix項(xiàng)目中的OSGi
OSGi正在被越來越多的項(xiàng)目所采用。OSGi規(guī)范為以模塊化形式編寫和部署應(yīng)用到本地或遠(yuǎn)程計(jì)算機(jī)提供了一個(gè)公共模型。與創(chuàng)建一個(gè)單一的不可分應(yīng)用(monolithic app)不同,該規(guī)范允許眾多小組件相互協(xié)作。這篇新聞為你展現(xiàn)了為什么有像OSGi這樣一個(gè)規(guī)范是至關(guān)重要的,它真正包含了哪些內(nèi)容,以及未來發(fā)展方向。 Apache Felix是一個(gè)OSGi 4版本規(guī)范的Apache實(shí)現(xiàn),而Equinox項(xiàng)目是Eclipse開源組織的OSGi R4版本規(guī)范核心框架的實(shí)現(xiàn)。OSGi是一個(gè)基于Java的服務(wù)平臺(tái)規(guī)范,其目標(biāo)是被需要長(zhǎng)時(shí)間運(yùn)行、動(dòng)態(tài)更新、對(duì)運(yùn)行環(huán)境破壞最小化的系統(tǒng)所使用。有許多公司(包括Eclipse IDE,它是第一個(gè)采用OSGi技術(shù)的重要項(xiàng)目)已經(jīng)使用OSGi去創(chuàng)建其微內(nèi)核和插件架構(gòu),以允許在運(yùn)行時(shí)刻獲得好的模塊化和動(dòng)態(tài)組裝特性。幾個(gè)其他項(xiàng)目如Apache Directory、Geronimo、Jackrabbit、Spring以及JOnAS也都正在轉(zhuǎn)向采用OSGi。
Richard Hall是該項(xiàng)目的提交者之一,他上個(gè)月在ApacheCon對(duì)Apache Felix項(xiàng)目作了介紹。他的介紹是從OSGi架構(gòu)概覽及其框架層開始的。他說任何應(yīng)用,不論是嵌入式系統(tǒng)、客戶端或服務(wù)器應(yīng)用,都可以從在其使用OSGi實(shí)現(xiàn)過程中獲取模塊化和擴(kuò)展性等益處。在介紹中,Richard還示范了在一個(gè)簡(jiǎn)單的基于Swing的繪圖程序中使用Felix組件的例子。
InfoQ就Felix項(xiàng)目目標(biāo)、當(dāng)前狀態(tài)、以及該框架怎樣適合其他Apache項(xiàng)目等問題采訪了Richard,尤其是那些在SOA棧中的項(xiàng)目,因?yàn)镕elix也把提供面向服務(wù)組件模型作為目標(biāo)。
Richard說Apache Felix項(xiàng)目是志愿者社區(qū)努力的結(jié)果。該項(xiàng)目的目標(biāo)是使該框架易于嵌入其他項(xiàng)目中去。他說目前發(fā)布的1.0.1版本大部分符合了OSGi的R4規(guī)范,并且已經(jīng)進(jìn)行過OSGi TCK(Test Compatibility Kit)測(cè)試。TCK測(cè)試套件測(cè)試結(jié)果發(fā)布在Apache Felix 網(wǎng)站上。按照R4規(guī)范要求,目前主要缺少的一塊是支持bundle fragment,這將在下一個(gè)版本中完成。Fragment是附屬于主要應(yīng)用bundle上的bundle。關(guān)于fragment一個(gè)比較好的例子是為不同地區(qū)翻譯文件。Felix 1.0.2版預(yù)計(jì)很快就會(huì)發(fā)布。
針對(duì)Felix怎樣適合Apache SOA項(xiàng)目(如ServiceMix和CXF)這一問題,他回答說,ServiceMix和CXF社區(qū)對(duì)OSGi技術(shù)都很有興趣,而且OSGi平臺(tái)為部署和管理那些使用了這些技術(shù)實(shí)現(xiàn)的服務(wù)提供了一個(gè)很好的環(huán)境。
企業(yè)SOA項(xiàng)目中依賴和版本管理及治理都在達(dá)成SOA利益過程中扮演著至關(guān)重要的角色,F(xiàn)elix能在企業(yè)級(jí)SOA實(shí)施中扮演什么樣的角色呢?
至少,它給它們提供了一個(gè)平臺(tái)。其中,它們可以以模塊化的形式打包、部署、以及執(zhí)行應(yīng)用,以幫助它們進(jìn)行依賴和版本管理。事實(shí)上,OSGi技術(shù)正是Java平臺(tái)所缺少的模塊化層。另外,OSGi平臺(tái)還提供面向服務(wù)的應(yīng)用模型,除了模塊化之外,它還允許基于OSGi的應(yīng)用按照面向服務(wù)原則來構(gòu)建。
最新版Eclipse——Europa,是作為OSGi模塊來打包的。有計(jì)劃將Apache其他產(chǎn)品(例如Tomcat)也打包成OSGi模塊嗎?
Eclipse使用OSGi作為其插件的模塊化機(jī)制。我們Felix的目標(biāo)是讓其它Apache項(xiàng)目將其產(chǎn)品打包成OSGi bundle。在Felix內(nèi)部,我們已經(jīng)開始為各種常用開源包的JAR文件創(chuàng)建bundle包裝器,以幫助啟動(dòng)這一過程。很多情況下,這一工作簡(jiǎn)單到只需在已有JAR文件manifest中增加一些元數(shù)據(jù)即可,但是還有一些情況下,將已有項(xiàng)目與OSGi技術(shù)集成需要付出更多的努力。我們也正在與Maven社區(qū)一起工作,試圖給每個(gè)Maven所創(chuàng)建的JAR文件中增加一些OSGi元數(shù)據(jù),這將是一個(gè)好的開始。
Apache Felix的下一個(gè)重要版本將是1.2版本,它將會(huì)支持bundle fragment。有了對(duì)fragment的支持,Richard認(rèn)為這個(gè)Felix將基本上符合R4規(guī)范要求,這將使其進(jìn)一步符合R4.1規(guī)范過程更加容易。
今年初,F(xiàn)elix從Apache孵化器畢業(yè),成為一個(gè)頂級(jí)項(xiàng)目;該項(xiàng)目團(tuán)隊(duì)在十月份發(fā)布了1.0.1版本。上個(gè)月,一個(gè)針對(duì)服務(wù)組件運(yùn)行時(shí)(Service Component Runtime ——SCR)描述符的Maven插件發(fā)布了。該插件可以用來基于注解產(chǎn)生OSGi服務(wù)描述符。Felix也有了Eclipse集成支持,開發(fā)者可以在Eclipse IDE里運(yùn)行Felix。Felix組件按照Apache軟件許可證2.0(Apache Software License Version 2.0)來發(fā)布許可。
這是felix 以前版本的列表:http://archive.apache.org/dist/felix/
【編輯推薦】