看了下BlueDavy的OSGi實(shí)戰(zhàn)這篇OpenDoc,很感謝BlueDavy同學(xué)!
例子舉的是一個(gè)User Login的Case,例子很簡(jiǎn)單,讓我們從中領(lǐng)略了OSGi的風(fēng)情。這個(gè)Doc中的例子都是圍繞Equinox展開(kāi)的,它是Eclipse 3.1以后的核心實(shí)現(xiàn),也就是說(shuō)現(xiàn)在的Eclipse是個(gè)OSGi架構(gòu)。
從架構(gòu)上來(lái)說(shuō)OSGi和SOA如出一轍,都強(qiáng)調(diào)面向服務(wù),而OSGi似乎對(duì)熱切換和契約管理比較著重,也就是說(shuō)OSGi更現(xiàn)實(shí),它強(qiáng)調(diào)的是一種實(shí)際的合約標(biāo)準(zhǔn)。產(chǎn)生的結(jié)果是差不多的,就是系統(tǒng)模塊之間的高度解藕。
可以看OSGi的Core Framework,最內(nèi)層是L0:運(yùn)行環(huán)境(就是語(yǔ)言平臺(tái)或者解釋平臺(tái)一類(lèi)的環(huán)境),然后是OSGI的L1:模塊,L2:生命周期管理,L3:服務(wù)注冊(cè)。
我認(rèn)為這種架構(gòu)也基本上是一個(gè)SOA需要關(guān)注的幾個(gè)問(wèn)題。
L1是實(shí)現(xiàn)OSGi的基礎(chǔ),在Java下提供了類(lèi)加載機(jī)制,使系統(tǒng)能夠模塊化。個(gè)人感覺(jué)類(lèi)似原來(lái)Eclipse中的微內(nèi)核。
L2是解決模塊之間依賴(lài)關(guān)系的最基本工作單位,負(fù)責(zé)初始化、停止、更新等操作,這樣模塊能夠活起來(lái),同時(shí)在這些過(guò)程中可以手動(dòng)維護(hù)依賴(lài)關(guān)系,也是模塊協(xié)作的基礎(chǔ)。
L3則是協(xié)作的合同簽署場(chǎng)所,應(yīng)該是L2的擴(kuò)展,使模塊之間能夠按照契約工作。我覺(jué)得更形象地說(shuō)就是路由器,模塊間的動(dòng)態(tài)依賴(lài)可以很好地通過(guò)它來(lái)解決,讓OSGi可以動(dòng)起來(lái)。
擁有了這幾層,我想我們完全可以理解為一個(gè)SOA的實(shí)現(xiàn),當(dāng)然更細(xì)化。應(yīng)該是一種新的組合應(yīng)用的方式。
白嘴說(shuō)肯定沒(méi)有BlueDavy的文章好,大家還是去看看那篇文檔。
說(shuō)說(shuō)遺憾:
1、OSGi在B/S架構(gòu)中還不好應(yīng)用。雖然例子是B/S的,可是居然是Servlet模型,里面解釋了目前Equinox項(xiàng)目也在擴(kuò)展應(yīng)用服務(wù)器支持和JSP支持等,可是起碼目前還不成熟。
2、模塊的粒度很成問(wèn)題。目前OSGi的契約機(jī)制與java interface機(jī)制對(duì)比一下。OSGi不可能完全取代本地的interface式的解藕,當(dāng)然人家也沒(méi)這么說(shuō)。只使我擔(dān)心過(guò)渡設(shè)計(jì)后,過(guò)細(xì)的Bundle肯定會(huì)得不償失,所以需要有人設(shè)計(jì)/計(jì)劃這個(gè)粒度。這個(gè)可能與基于Web services的SOA架構(gòu)面臨類(lèi)似的問(wèn)題,需要好的架構(gòu)師。
3、文檔不友好么?說(shuō)實(shí)話(huà),很感謝BlueDavy和OSGi觀(guān)察者那些大牛的貢獻(xiàn)。但是感覺(jué)production的樣例工程還是很難搞到(其實(shí)Eclipse plugins的例子滿(mǎn)多哈,可惜沒(méi)啥文檔,需要硬著頭皮看),對(duì)應(yīng)的指導(dǎo)文檔還沒(méi)出現(xiàn)。BlueDavy提供的servlet實(shí)現(xiàn)我們不可能跟上,畢竟簡(jiǎn)單也是一種需求。(那誰(shuí)說(shuō)過(guò)度設(shè)計(jì)比設(shè)計(jì)不足更可怕,那個(gè)我不是唱反調(diào),我希望我們都能找到那個(gè)sweet point,有個(gè)好的參照那最好不過(guò)了)。
4、由于思想先進(jìn),在某些人看來(lái)是陽(yáng)春白雪。估計(jì)不少人還是埋頭下里巴人。觀(guān)望態(tài)度。
結(jié)束,又是流水賬,大家拍磚。