隨筆-1  評論-9  文章-7  trackbacks-0

           

          目前,關(guān)注OSGi的人變得越來越多,OSGi本身也早已從那個專注于嵌入式平臺的“小”角色轉(zhuǎn)變過來了,慢慢向企業(yè)級應用市場滲透。

          從某種角度說,Eclipse可以說是OSGi在企業(yè)應用領(lǐng)域的試金石,2003Eclipse3.0做了一次架構(gòu)上的調(diào)整,繼續(xù)延用插件的架構(gòu)思想,但是從3.0版之后,是基于OSGi的實現(xiàn)。也就是這一次的調(diào)整,推動了Eclipse的迅猛發(fā)展。

          這是在桌面應用的成功示例,而OSGi的目標遠不止于此,以其優(yōu)秀的類加載機制,可以說,只需對其進行擴展,那么就可以目標瞄準任何一個領(lǐng)域。談到企業(yè)應用,無可避免的要涉及Web應用,相信大多數(shù)人都在從事該領(lǐng)域的開發(fā)。OSGi R4版已明確提出了對Web的支持方式——當然,這種方式還是很有限的,這一點將在后面的文章中詳細說明。

          鑒于此,很多開源框架都已經(jīng)或正準備發(fā)布支持OSGi的版本,比如Spring DMStruts1.8.1CXF等等,基本上日常所用的開源框架都發(fā)布了基于OSGi版本。另外,有不少應用服務器也已經(jīng)基于OSGi進行實現(xiàn),比如WAS6.1版就已經(jīng)是基于OSGi的實現(xiàn),而Spring也在2009年推出了Spring DM Server,可見OSGi的吸引力還是很大的。

          那么這一切將會為以后的開發(fā)帶來什么影響呢?本文試圖從OSGi和構(gòu)件化開發(fā)的角度認識一下該問題。

          OSGi的類加載機制非常優(yōu)秀,為每個運行于其中的bundle創(chuàng)建了獨立的類加載器環(huán)境,而運行于同一個OSGi框架內(nèi)部的bundle之間不像Web服務器中的Web應用那樣絕緣,它們之間是可以進行包依賴的,當然OSGi也提供了服務注冊等相關(guān)機制,確保bundle之間的相互協(xié)作能力。而且OSGi支持bundle動態(tài)部署。所以,系統(tǒng)無需停機重啟,就可以實現(xiàn)其內(nèi)部的動態(tài)更新。

          構(gòu)件化開發(fā)的概念已經(jīng)提了很多年了,似乎一直缺乏一種有效的機制對其進行支持。構(gòu)件化開發(fā)為系統(tǒng)開發(fā)帶來了很多好處,整個系統(tǒng)的開發(fā)可以按照模塊的方式進行劃分,從而按模塊進行開發(fā);系統(tǒng)由各模塊之間拼裝而成,通過代碼一級的依賴或者服務依賴的方式;對于某個模塊進行更新,只要保持接口不變,則可以實現(xiàn)對外界無影響。

          由于缺乏有效的底層支持,構(gòu)件化開發(fā)方式一直沒有推行起來。由其對于Web應用而言,想要實現(xiàn)構(gòu)件化開發(fā),似乎更是無從談起。

          OSGi的出現(xiàn),讓這一事情有所轉(zhuǎn)機。傳統(tǒng)的Web應用開發(fā)過程中,可能大多數(shù)人的做法就是將一個大的Web應用按功能模塊進行劃分,通過包切分來實現(xiàn)模塊化開發(fā),但是各模塊之間并沒有從物理上隔離,只是以一種組織方式上的約束,使其從表面看上去是分離的。對于這種方式,動態(tài)更新某個模塊也就無從談起了。

          而如果將OSGi引入Web應用,每個模塊都對應于一個bundle,那么模塊與模塊之間則從物理上進行了隔離,能有效的將模塊內(nèi)部實現(xiàn)對外隱藏。模塊之間的交互,可以通過接口的導出與引用來實現(xiàn),對于未經(jīng)導出的部分,對于其他模塊是不可見的。另外,由于OSGi支持bundle的熱部署,那就意味著,在當前Web應用未停機的情況下,可以對某個或某些模塊(對應OSGi中的bundle)進行動態(tài)更新,而不影響整個應用的正常運行。

          這種從物理上的有效隔離的方式,為重用帶來了新的方式。以前代碼一級的重用,一般都通過Jar包的形式進行,而這種方式存在上述的一些缺點,即封裝性不夠。而通過基于OSGibundle的形式,則可以有效隱藏內(nèi)部實現(xiàn),從包一級進行隱藏(這一點個人覺得可以作為Java封裝性的一種擴展,以前的封裝只能做到類一級,不知道未來是否會被Java規(guī)范吸收)。

          就這一點而言,OSGi對構(gòu)件化開發(fā)進行了很好的支持,當然OSGi并不為此而生。

          以上所說的構(gòu)件依賴都是基于API一級的,那么當然,我們也可以將Web Service等類型服務封裝至構(gòu)件當中,再結(jié)合ESB,是不是對SOA的一種更好實現(xiàn)呢!ESB的關(guān)注點在于服務,這是一種細粒度的,它并不考慮服務的封裝、重用等方面——這些方面都由設計人員去把握。而結(jié)合OSGi,當然還需要其他設施的支持,比如CXF已經(jīng)發(fā)布了基于OSGi的實現(xiàn),可以將服務封裝至一個bundle,以bundle為單元,向外界提供服務,這種服務即變成了一種粗粒度的——構(gòu)件的特點之一。

          綜上所述,我相信,OSGi的發(fā)展,將會為構(gòu)件化的開發(fā)方式帶來福音。

          引出話題:OSGiSCA在很多方面有著異曲同工這妙,并且SCA的實現(xiàn)框架——Tuscany也對OSGi做了支持。這兩者有互補特性,有時間將對這兩者做一個對比研究。

          posted on 2010-03-28 11:49 Dreava 閱讀(746) 評論(0)  編輯  收藏 所屬分類: OSGi

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 大渡口区| 肥东县| 宁河县| 长汀县| 东阳市| 芜湖县| 麦盖提县| 喀什市| 梨树县| 鱼台县| 平山县| 通化县| 宁安市| 新余市| 桃源县| 松滋市| 南充市| 富宁县| 于田县| 饶河县| 洛浦县| 隆安县| 滨州市| 万全县| 自治县| 鄂托克前旗| 嘉兴市| 和静县| 宁化县| 阿拉尔市| 余庆县| 南通市| 边坝县| 张家港市| 陇川县| 五原县| 沁阳市| 拉萨市| 花莲市| 交口县| 诸城市|