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