近期做了幾個使用OSGi開發(fā)的應(yīng)用,發(fā)現(xiàn)使用過細粒度的Bundle不會給項目帶來任何好處,而很多設(shè)計人員實際都會在使用OSGi平臺時陷入這個陷阱。
首先我們分析OSGi的特點及可以給我們應(yīng)用帶來的好處
1 良好的動態(tài)特性
2 更細粒度的類裝載控制,多個版本組件在同一運行環(huán)境中共同運行
3 在JVM內(nèi)部實現(xiàn)SOA(我個人倒是認為OSGi所涉及的僅僅是SOA思想的一小部分)
4 DS提供的IoC支持
請思考你的應(yīng)用程序真的需要這些嗎?
很多設(shè)計和開發(fā)人員都會在設(shè)計和實現(xiàn)時忽略應(yīng)用的真正需要和OSGi的復(fù)雜性,將應(yīng)用的所有內(nèi)部細小劃分都采用Bundle實現(xiàn)。
而我們除了應(yīng)該注意采用OSGi開發(fā)和調(diào)試帶來的復(fù)雜性;同時也要明白動態(tài)特性的支持并不是僅僅采用OSGi平臺就可以搞定的,要真正實現(xiàn)動態(tài)特性必須注意模塊的啟動順序無關(guān)性及對其所依賴服務(wù)的監(jiān)聽等,這些都會大大增加系統(tǒng)實現(xiàn)和調(diào)試的復(fù)雜性。
其實我們應(yīng)該認真分析應(yīng)用是否需要這些OSGi的特性及這些特性應(yīng)該在應(yīng)用的那些部分體現(xiàn),例如我們可以在擴展方面采用Bundle實現(xiàn)擴展插件,至于其它部分則不必采用過多的Bundles(甚至可以采用一個大的Bundle,而其內(nèi)部則可以采用如Spring來幫助我們實現(xiàn)模塊化)。
同時,不要忘記其他的framework同樣提供了很好的組件化的基礎(chǔ)架構(gòu)如Spring,Pico-Container,在OSGi與其它技術(shù)混合時SCA同樣是很好的選擇。
保持應(yīng)用的簡單性,不要針對特定技術(shù)進行設(shè)計,而要為設(shè)計選擇適合的技術(shù)。
蔡超
Chaocai2001@yahoo.com.cn
JEE咨詢顧問
SCEA(1.2&5)
IBM Certified OOA&D Solution Designer vUML2