|
OSGi正在成為一種趨勢(shì),越來(lái)越多的項(xiàng)目采用了OSGi,越來(lái)越多的中間件都開始采取了OSGi的標(biāo)準(zhǔn)。身為一名Java開發(fā)人員,如果你還對(duì)OSGi結(jié)構(gòu)一無(wú)所知,那你真的有點(diǎn)Out了。
什么是OSGi
OSGi的名稱來(lái)源于其開源組織的名稱Open Services Gateway initiative,OSGi是一個(gè)標(biāo)準(zhǔn),它致力于提供給Java項(xiàng)目一個(gè)模塊化的底層環(huán)境,以及一系列通用的服務(wù)(Service)。和普通的JVM程序相比,OSGi的程序天生擁有動(dòng)態(tài)模塊的特點(diǎn),不同的模塊(OSGi里稱之為Bundle)有著獨(dú)立的生命周期,可以獨(dú)立進(jìn)行安裝、啟動(dòng)、停止、卸載的操作,模塊間的依賴性管理也由OSGi提供。你可以看出,OSGi非常適合需要進(jìn)行Plugin管理的項(xiàng)目,一個(gè)典型的成功案例就是Eclipse和它眾多的Plugin。OSGi標(biāo)準(zhǔn)還規(guī)范了一系列我們常間的操作,日志、配置文件、事件隊(duì)列、Web開發(fā)、JPA&JDBC等等,大部分部署OSGi標(biāo)準(zhǔn)的框架都提供了這些服務(wù),這樣一方面規(guī)范了我們代碼的結(jié)構(gòu),一方面節(jié)約了我們開發(fā)的時(shí)間。
目前基于OSGi的框架大概有4個(gè):Knopflerfish, Apache Felix, Equinox, Spring DM。因?yàn)槎际腔贠SGi標(biāo)準(zhǔn)的,他們的大致用法和核心功能是一致的。一般來(lái)說(shuō)一個(gè)OSGi的組件(Bundle)可以輕易的從一個(gè)框架遷移到另一個(gè)框架。框架的不同主要是體現(xiàn)在他們本身的設(shè)計(jì)和額外的服務(wù)上。根據(jù)我的一些經(jīng)驗(yàn),對(duì)這4個(gè)框架進(jìn)行了一下比較,希望對(duì)剛接觸OSGi或是由于如何選擇OSGi框架的人有所幫助。
Apache Felix 最全面的框架
Apache Felix是Apache旗下的一個(gè)OSGi框架,項(xiàng)目本身非常成熟,已經(jīng)被用到了很多其他的項(xiàng)目中,例如Apache Servicemix。它本身提供的服務(wù)也是最全的,幾乎涵蓋了全部的OSGi 4.2的標(biāo)準(zhǔn)。除此之外還提供了一些非標(biāo)準(zhǔn)的功能,例如iPOJO。框架本身非常緊湊,你只需要3個(gè)包加一個(gè)shell就可以運(yùn)行了,無(wú)論是開發(fā)還是Debug都非常簡(jiǎn)便。除了Felix,還有兩個(gè)項(xiàng)目是和OSGi相關(guān)的。一個(gè)是Apache Felix Karaf,它本身是Felix的一個(gè)子項(xiàng)目,但他其實(shí)是封裝了Felix提供更高一層的Runtime,例如提供了JAAS。另一個(gè)是Apache Aries,目前還處于起步階段,它作為Felix的補(bǔ)充,提供OSGi企業(yè)級(jí)規(guī)范,包括JPA、JDBC、JTA、JNDI等等。
總的來(lái)說(shuō),Apache Felix是我個(gè)人推薦的最佳OSGi框架,它簡(jiǎn)單的結(jié)構(gòu)也更適合出學(xué)OSGi的開發(fā)人員。
Equinox 與Eclipse完美結(jié)合
Equinox是Eclipse旗下的OSGi框架,本身也被Eclipse采用,是Eclipse注明的PDE開發(fā)環(huán)境的底層。Equinox本身也是相當(dāng)?shù)娜娴目蚣埽峁┑墓δ懿槐菷elix少多少。但是它功能的分類就稍顯混亂,文檔和Sample也組織的不是很好。事實(shí)上相當(dāng)Equinox還是被當(dāng)做開發(fā)Eclipse Plugin的應(yīng)用較多,如果你要開發(fā)一個(gè)Web程序,你就會(huì)感到它本身的功能和文檔不夠全面。Equinox最大的優(yōu)勢(shì)在于它和Eclipse結(jié)合緊密,只要你安裝了PDE,你就已經(jīng)有了Equinox,可以方便的在Eclipse里設(shè)置你開發(fā)的Bundle,啟動(dòng)、部署等操作也異常簡(jiǎn)單,而且有專門的Debug界面,你還能要求什么呢?
如果你想基于Eclipse開發(fā),Equinox無(wú)疑是好選擇。但對(duì)于新手而言,有時(shí)候會(huì)搞混Eclipse Plugin與OSGi的關(guān)系。
Spring DM 畸形的需求產(chǎn)物
Spring DM是Spring旗下的OSGi框架,Spring我想大家都知道了,Spring DM的最大特點(diǎn)就是結(jié)合了Spring框架。我之所以說(shuō)特點(diǎn)還不是優(yōu)勢(shì),是因?yàn)槲艺J(rèn)為這個(gè)需求本身就是錯(cuò)誤的。Spring和核心就是一個(gè)IoC,當(dāng)然后來(lái)它的外延擴(kuò)大了,提供了越來(lái)越多亂七八糟的功能。OSGi規(guī)范本身就制定了一系列IoC的功能標(biāo)準(zhǔn),尤其是其中的BluePrint其實(shí)相當(dāng)多的借鑒了Spring,因此完全沒(méi)有必要再引入Spring充當(dāng)新的IoC了。Spring本身無(wú)論是ClassLoader還是配置文件上都與OSGi格格不入,之所以有這種需求是因?yàn)楝F(xiàn)在有大量基于Spring的項(xiàng)目想要過(guò)渡到OSGi上。Spring還發(fā)布了一個(gè)App Server叫Spring DM Server,是一個(gè)基于Spring DM的App Server,你會(huì)發(fā)現(xiàn)你需要加載80+的包來(lái)完成一個(gè)hello world操作,這種恐怖的依賴性正是Spring所帶來(lái)的。
意識(shí)到這個(gè)問(wèn)題的顯然不只是我一個(gè)人,傳聞Spring DM和Spring DM Server都將會(huì)移交給Eclipse。就目前來(lái)說(shuō)除非你有基于Spring項(xiàng)目的移植需求,我不推薦其他任何情況下使用Spring DM。
Knopflerfish 孤獨(dú)孤傲
Knopflerfish其實(shí)是OSGi的先行者,但是由于沒(méi)有強(qiáng)力的靠山,再后來(lái)的競(jìng)爭(zhēng)中顯然不如前三者有人氣。它本身是一個(gè)相當(dāng)標(biāo)準(zhǔn)OSGi框架,提供了絕大多數(shù)標(biāo)準(zhǔn)功能,但是無(wú)論在人氣上,開發(fā)進(jìn)度上,文檔完善上都不如其他的三者。
既生瑜,何生亮阿~
it知識(shí)庫(kù):4大 Java OSGi 框架比較 (Knopflerfish, Apache Felix, Equinox, Spring DM),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。