簡單介紹Spring osgi:一些問題與點評
這兩天才看了BlueDavy的《OSGI實戰》和《OSGI進階》,2篇寫得很好的文檔。實戰可做OSGI的入門資料,進階可做OSGI的實踐資料。很感謝BlueDavy大大的文檔,他的BLOG是http://bluedavy.javaeye.com/。進階中講解了一個留言板的例子,基于Spring/Hibernate/WebWork2/OSGI.
其中提供了Hibernate和WebWork2的OSGI集成方案實現,很精彩。
51CTO編輯推薦:OSGi入門與實踐全攻略
Spring則采用Spring osgi.其留言板的例子是按應用模塊進行劃分的,并用Equinox的擴展點方式展現了菜單的加載和卸載實例。雖然這個菜單僅僅是一個鏈接,但也頗有參考意義。
此外還有如何將現有系統重構成OSGI系統的講解,并總結了自己對OSGI應用中的設計模式和最佳實踐的理解。這是目前我看到的最好的OSGI的中文資料了。
該書對模塊的劃分很細(其實不是基于功能模塊,而是基于用例了),可能是因為留言板的例子太過簡單,只好如此來演示。我想,在實際的項目中不會以這樣的細粒度進行分模塊的開發,否則BUNDLE會多不勝數,反而給維護帶來麻煩。
在BlueDavy總結的最佳實踐中,我認為“接口和實現分離為不同的Bundle”不是一個好的實踐,搞太多的BUNDLE不是好事情。把接口BUNDLE掛著只對實現BUNDLE進行熱插拔,與將接口和實現放在一個BUNDLE中做熱插拔是一樣的。
使用Spring osgi時就需要導入那么多的BUNDLE,我想最好能提供一個集成的BUNDLE,讓開發者更容易搭建開發環境。當然也提供零散的 BUNDLE讓開發者可以自行選擇需要的,就像有spring.jar也有spring-bens.jar/spring-context.jar /spring-aop.jar一樣。
現在搭建一個Spring osgi的開發環境還是挺麻煩的,在下載的Spring osgi1.0M3的lib中還少了一些BUNDLE,只好在M2中去找。spring2.5發行的jar包將會同時支持普通開發和OSGI開發,那時可能會方便一點,現在還是rc1的版本,沒有試驗是否可用。
現在在實際項目中運用OSGI風險還是太大,spring2.5和strut2的2.1正式發布時,應該才是引入OSGI到實際項目的時機。
【編輯推薦】