Peter在2月23的時(shí)候在OSGi的官方網(wǎng)站上貼了這么一篇blog,挺經(jīng)典,至少讓我學(xué)到了一些東西,建議關(guān)注OSGi或者關(guān)心系統(tǒng)設(shè)計(jì)中資源管理的人都看看,在這篇blog中我簡(jiǎn)單的將peter寫的blog的意思大概寫一下,也不全部翻譯了,另外說(shuō)一下自己的看法。
引起Peter寫這篇blog的主要原因是對(duì)于使用程序的資源文件的例子的介紹,例如在windows中,當(dāng)我們安裝了editplus后,假設(shè)我們把txt的打開(kāi)方式已經(jīng)設(shè)置為了editplus,但此時(shí)我們不能隨意的將editplus目錄隨意的轉(zhuǎn)移,當(dāng)轉(zhuǎn)移后就會(huì)出現(xiàn)txt無(wú)法再用editplus打開(kāi)了,而在mac中,程序的文件目錄是可以隨意轉(zhuǎn)移的,轉(zhuǎn)移并不會(huì)影響到使用它的文件,顯然后者強(qiáng)于前者,其實(shí)也就類似于現(xiàn)在倡導(dǎo)的綠色軟件的概念,Peter也提及了為什么在mac中實(shí)現(xiàn)了這個(gè),而在windows中沒(méi)實(shí)現(xiàn),mac使用了小型數(shù)據(jù)庫(kù)來(lái)記錄程序所在的路徑等等信息,windows通常使用注冊(cè)表來(lái)記錄,這里并沒(méi)有什么很大的差別,差別在于在mac中當(dāng)移動(dòng)目錄或刪除目錄時(shí)會(huì)發(fā)送消息給小型數(shù)據(jù)庫(kù),使得其做出相應(yīng)的同步動(dòng)作,而windows則不會(huì),這也就決定了在mac中可以隨意的去移動(dòng)或刪除程序,而在windows中則不能。
從這樣的一個(gè)問(wèn)題中,peter想到了基于OSGi也實(shí)現(xiàn)一個(gè)這樣的智能的資源管理的東西,他把它稱為Extender Model,其實(shí)我覺(jué)得有點(diǎn)象擴(kuò)展點(diǎn),不過(guò)不同的地方就在于它增加了一個(gè)資源管理的概念,資源管理最重要的其實(shí)就是關(guān)注資源的改變(安裝、刪除、移動(dòng)等),peter以servlet這個(gè)為例,來(lái)說(shuō)明了OSGi Extender Model的實(shí)現(xiàn)方法以及意義,基于OSGi Extender Model的話,就可以使得servlet本身不用再去主動(dòng)調(diào)用HttpService.registerServlet來(lái)注冊(cè),而是由一個(gè)Servlet Extender Model實(shí)現(xiàn)的Bundle Listener來(lái)根據(jù)Bundle的安裝、卸載、更新等狀態(tài)來(lái)主動(dòng)的加載、卸載、更新servlet,可以看到,在這樣的情況下的好處就是Servlet Bundle本身不用再去關(guān)注Http Service的狀態(tài),同時(shí)也不用去調(diào)用HttpService的東西,這呢,從另外一個(gè)角度去看,大家就會(huì)發(fā)現(xiàn),這也是一種非常符合DI思想的設(shè)計(jì),采用Extender Model這種設(shè)計(jì)方法就可以做到資源不用主動(dòng)的去調(diào)用容器來(lái)實(shí)現(xiàn)對(duì)于其自身生命周期的管理,這樣就使得整個(gè)系統(tǒng)處于更加靈活的體系中了,非常的爽。
其實(shí)實(shí)現(xiàn)OSGi Extender Model非常的簡(jiǎn)單,編寫一個(gè)Bundle Listener,監(jiān)聽(tīng)Bundle的安裝、卸載、更新動(dòng)作,同時(shí)根據(jù)Bundle的元信息中的描述做出相應(yīng)的反應(yīng)(如Servlet Bundle Listener就是當(dāng)監(jiān)聽(tīng)到有Bundle安裝時(shí),即解析Bundle的元信息,如其中含有
ServletMap這樣的信息,則獲取其具體信息,并注冊(cè)其中的Servlet)。
如果感興趣的話,請(qǐng)同學(xué)們?nèi)ゲ榭碢eter的這兩個(gè)帖子:
http://www.osgi.org/blog/2007/02/osgi-extender-model.htmlhttp://www.aqute.biz/Snippets/Extender這個(gè)OSGi Extender Model給了我們什么啟示呢:
1、Declarative方式的使用
????? Declarative無(wú)非是現(xiàn)在一種非常非常流行的軟件設(shè)計(jì)理念,在這樣的理念中,可以盡量的保證當(dāng)前組件的簡(jiǎn)單,而通過(guò)Declarative的方式去增強(qiáng)的描述該組件,其實(shí)在spring中最重要的也是這個(gè)思想,而在OSGi的DS中也是這么一個(gè)思想,聲明式的編程自然讓整個(gè)系統(tǒng)的體系變得非常的簡(jiǎn)單和靈活,并且大大提升系統(tǒng)組件的可重用性,特別是對(duì)于編譯型的語(yǔ)言而言,在OSGi Extender Model中通過(guò)Declarative的方式說(shuō)明了定義Bundle中的資源,容器則自動(dòng)的對(duì)其生命周期進(jìn)行管理,這充分的發(fā)揮了Declarative的優(yōu)勢(shì)(聲明式的增強(qiáng)功能)以及DI思想(運(yùn)行于容器中的東西不需要主動(dòng)調(diào)用容器來(lái)實(shí)現(xiàn)注入、生命周期管理這些功能等)的特點(diǎn)。
2、跨Bundle的資源管理方式
????? 跨Bundle的資源管理其實(shí)是之前基于OSGi搭建Webwork+Spring+Hibernate這樣結(jié)構(gòu)的難處,總是沒(méi)想到很好的方法去管理Hibernate的PO文件,采用OSGi Extender這種思想的話這個(gè)就很容易實(shí)現(xiàn)了,不過(guò)Hibernate還存在的一個(gè)問(wèn)題就是SessionFactory的重建,這個(gè)對(duì)于動(dòng)態(tài)化來(lái)講是有一定的影響的,因?yàn)閟essionfactory的重建消耗的時(shí)間太長(zhǎng)了點(diǎn),同樣的道理,對(duì)于Webwork Action的管理也是如此。