|
去年我們組要開(kāi)發(fā)一個(gè)新的產(chǎn)品,在討論產(chǎn)品架構(gòu)路線的時(shí)候,美國(guó)的架構(gòu)師向大家征集了架構(gòu)設(shè)計(jì)思想(我推薦了SCSF),有一位工程師向他推薦了OSGi。以前我還沒(méi)有聽(tīng)過(guò)OSGi這玩意,雖然我參加工作后,現(xiàn)學(xué)了Java和Flex,但非常菜。在工作之前我用了4年的.NET。接觸了OSGi后,發(fā)現(xiàn)它是一個(gè)面向Java的服務(wù)規(guī)范,還沒(méi)有一個(gè)像樣的面向.NET的框架(有個(gè)EgeyeAddIn,據(jù)說(shuō)兼容OSGi,我看了源代碼了,覺(jué)得它離OSGi較遠(yuǎn)http://www.codeplex.com/EgeyeAddIn)。隨著對(duì)其概念的模糊了解,我覺(jué)得這玩意不錯(cuò),于是我準(zhǔn)備自己做個(gè)基于.NET的OSGi框架(因?yàn)槲以跇I(yè)余的時(shí)候在設(shè)計(jì)一個(gè)UI框架,原先準(zhǔn)備采用SCSF,接觸了OSGi后,我決定將二者合并,重新設(shè)計(jì)OSGi+CAB的框架)。于是,我在互聯(lián)網(wǎng)找了很多次關(guān)于OSGi的資料,但很失望,沒(méi)有得到多少需要的東西。因此,我只好自己翻譯了OSGi規(guī)范前6章,邊翻譯,邊理解(當(dāng)我翻譯完第6章的時(shí)候,發(fā)現(xiàn)網(wǎng)上已經(jīng)有OSGi規(guī)范中文版了,給自己省了點(diǎn)事),期間我翻譯了SCSF英文指南,看了EgeyeAddIn、SharpDeveloper Core和Eclipse OSGi的源代碼,最終設(shè)計(jì)了基于.NET的OSGi規(guī)范和OSGi.NET概要圖,目前OSGi.NET測(cè)試版已經(jīng)完成,預(yù)計(jì)年底可以發(fā)布。因此,對(duì)OSGi和SOA有了更深一步的了解。
在我理解中(對(duì)于SOA,我不專(zhuān)業(yè),如果有誤,大家批評(píng)),目前大部分應(yīng)用的SOA中的S,已經(jīng)不是傳統(tǒng)意義的Web Service或者遠(yuǎn)程Service類(lèi)似的Heavy Service,而更偏向于暴露出一個(gè)接口,向其它模塊提供通用功能的服務(wù)(或類(lèi))。在分層應(yīng)用,上層類(lèi)將調(diào)用下層的類(lèi),這種依賴(lài)是層與層之間的依賴(lài),相比沒(méi)有分層的混沌狀態(tài)的類(lèi)間依賴(lài)要好很多;在SOA應(yīng)用,模塊間通過(guò)服務(wù)依賴(lài),這種依賴(lài)是可以管理的,非常清晰,每一個(gè)模塊也很容易被重用。下圖是我理解的分層和SOA的比較。
OSGi規(guī)范是一個(gè)服務(wù)框架的規(guī)范,在OSGi中,(1)每一個(gè)模塊叫Bundle,即服務(wù)包,每個(gè)服務(wù)包向其它服務(wù)包暴露其服務(wù),服務(wù)包間服務(wù)的引用是可以管理的;(2)每一個(gè)服務(wù)包類(lèi)似一個(gè)模塊,其實(shí)更是一個(gè)插件,可以被動(dòng)態(tài)的加載到OSGi框架,動(dòng)態(tài)注冊(cè)、引用、回收和卸載服務(wù),也可以被動(dòng)態(tài)的卸載;(3)服務(wù)包在運(yùn)行時(shí)的依賴(lài)是通過(guò)可管理的服務(wù)來(lái)體現(xiàn),在設(shè)計(jì)時(shí),從功能復(fù)用的角度,即一個(gè)服務(wù)包會(huì)使用另一個(gè)服務(wù)包的類(lèi),服務(wù)包之間在設(shè)計(jì)時(shí)有一種依賴(lài),這種依賴(lài)在服務(wù)包清單配置文件中定義,由Export、Import、Require、DynamicImport配置節(jié)組成。Export即這個(gè)服務(wù)包暴露出的可被別的包使用的類(lèi)型集合定義,Import是服務(wù)包引用其他服務(wù)包Export的定義,Require則是引用了另一個(gè)服務(wù)包的所有Export定義。因此,OSGi還定義了類(lèi)型加載模型,用于實(shí)現(xiàn)一個(gè)服務(wù)包從OSGi系統(tǒng)加載其依賴(lài)的類(lèi)型。
OSGi內(nèi)核在實(shí)現(xiàn)上,有點(diǎn)復(fù)雜,在此不過(guò)說(shuō),估計(jì)關(guān)心的人會(huì)少一點(diǎn),能把OSGi的SOA思想和應(yīng)用用好就Very Good了。OSGi.NET是我們團(tuán)隊(duì)利用業(yè)余時(shí)間開(kāi)發(fā)的,從2008年10月份開(kāi)始,借鑒了SharpDevelop、EgeyeAddin和Eclipse OSGi設(shè)計(jì),用分層方式,劃分成配置成、解析元數(shù)據(jù)層、解析層、運(yùn)行時(shí)加載層、Bundle層、Core層和Adapter層,當(dāng)然最重要的是面向最終用戶的公共接口層了,第一個(gè)版本的設(shè)計(jì)是大部分兼容OSGi規(guī)范,把認(rèn)為復(fù)雜的需求給去掉了,也簡(jiǎn)化了Service的設(shè)計(jì)。由于接觸SOA時(shí)間比較晚,對(duì)SOA的理解沒(méi)有SOA專(zhuān)家體會(huì)的深,歡迎批評(píng)指正。
it知識(shí)庫(kù):OSGi——面向服務(wù)架構(gòu)規(guī)范簡(jiǎn)述,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。