訪談實錄:開源文檔《OSGi進階》發布暨作者
OSGi正在變得炙手可熱,無論是OSGi與JSR 277之爭,還是Struts2開始使用OSGi來完成插件的熱部署,都使它越來越頻繁地進入開發人員的視線。而近日,Bluedavy在去年發布了名為《OSGi 實戰》的開源文檔后,又發布了此系列的第二篇:《OSGi 進階》。InfoQ中文站就這次發布邀請Bluedavy對文檔的寫作背景、OSGi的設計理念及當前的應用現狀進行了訪談。
51CTO編輯推薦:OSGi入門與實踐全攻略
在談到編寫第二篇開源文檔《OSGi 進階》的原因時,Bluedavy說道:
《OSGi 實戰》主要是為了向大家介紹OSGi的好處,以及OSGi到底是什么,具體怎么去用,目的是為了能吸引更多的人關注OSGi、了解認識OSGi; 《OSGi 進階》則是為了和大家分享基于OSGi設計實際的項目/產品、集成流行的Java框架去實現B/S、分布式系統、如何將傳統的系統重構為基于OSGi的系 統等方面的一些經驗,希望能讓更多的人將OSGi應用到實際的項目/產品中去。
***篇OSGi實戰Opendoc發布后,應該說還是起到了一定的效果的,無論是從javaeye上的OSGi圈子、我個人的blog以及我個人的MSN 上,都有不少的朋友開始討論OSGi,嘗試OSGi應用到實際的項目的可能性,從我MSN上一些好友我也了解到,國內已經有些公司開始在商業的產品中應用 OSGi了。
但是看到那么多的朋友對OSGi非常有興趣,但由于不知道基于OSGi怎么去設計實際的項目/產品,又或是因為OSGi與流行Java框架不好集成的原 因,最終放棄了在實際的項目/產品中使用OSGi,這也是促成我編寫第二篇Opendoc的原因之一,我希望能將大家對于OSGi的興趣轉化為真實的使 用;另一方面的原因則是整個業界發展的大趨勢,短短的一年間,各大公司、開源項目都公開支持OSGi,使得OSGi進入企業應用領域的步伐比想像中順利了 很多。
我們知道,模塊化的開發方式早已在企業開發中得到了廣泛應用,也一直是系統設計時的基本準則。而在OSGi中,每一個模塊都 對應于自己的單個bundle,以聲明的形式來表示對其他bundle中package的依賴,或是暴露某些接口以供其他bundle調用,從而實現了物 理上的模塊隔離。這種方式與傳統的模塊開發相比其優點在哪里呢?Bluedavy回答說:
由于Java一直以來在物理隔離式的模塊化開發/部署上都支持的不好,以至于基于Java構建的系統都沒有做到真正的模塊化。在模塊化不是物理隔離方式實現的情況下,非常容易出現的現象是模塊之間的界限在不知不覺中抹去了,***整個系統的依賴關系會逐步變的復雜。
一個比較典型的例子:假設在一個留言板系統中,留言列表和新增留言劃分為了兩個模塊,這兩個模塊是沒有強耦合的,但在非物理隔離的模塊化實現時,我們很容 易出現的做法就是在留言列表的頁面上直接編寫一個新增留言的功能鏈接,其實這也就隱藏式的將這兩個模塊強耦合在一起了。到了物理隔離的模塊化實現時,就會 開始考慮這個問題。
這點就像Bea microServices的人的一句話:"Until modularity is not enforced,it is not there"。
在《OSGi實戰》一書中,Bluedavy曾經描述過,像OSGi這樣一個為動態擴充、修改系統功能提供了支持的模塊系統可以帶來什么樣的好處:
基于OSGI的系統,可通過安裝新的Bundle、更新或停止現有的Bundle來實現系統功能的插拔。
OSGi有一整套完整的機制去實現動態改變系統行為。
基于OSGi的系統不會受到運行在其中的Bundle的影響,不會因為Bundle的崩潰而導致整個系統的崩潰。
只有在請求發生時OSGi才去完全加載、啟動相應的Bundle、Service,保證了系統的高效
規范的、可積累的模塊
但是,無論是技術框架的選型,還是架構方案的選擇,都不可能只看到其優勢所在就簡單的做出定論。每一種選擇,都需要考慮到是否與既有方案可以順利結合,應 用環境是否足夠成熟,有充分的外界條件支持等等。那么對于OSGi來說又是什么樣子的呢?Bluedavy給出了自己的答復:
從應用的架構層面選擇的話,OSGi足夠成熟,理由在于目前企業應用領域的關鍵問題,在OSGi中都逐步的有了對應的解決方案,這些解決方案中最有影響力 的當屬Spring和OSGi的結合,Spring-OSGi使得OSGi的應用很容易的獲得Spring提供的企業應用需求功能的實現的支持。
目前用OSGi來做企業應用,應該說技術上的瓶頸已經不多了,只是怎么去充分的發揮OSGi的優勢,是有一定的挑戰的。
記者又請Bluedavy就“企業應用的關鍵問題”和“OSGi中對應的解決方案”做出更詳盡的解釋,他說道:
OSGi EEG小組在總結OSGi進入企業應用領域需要解決的問題上列出了這么幾點:
分布式系統的支持; 在分布式系統上,目前SCA是個好的解決方案,SCA的實現有Newton和Tuscany,另外就是通過集成Axis來通過webservice實現分布式的通訊。
OSGi服務的擴展,以支持從外部發布/調用OSGi服務,同時需要考慮多種語言的支持,而非僅僅是Java; 這點呢,一方面就得依靠和Java流行框架的集成,像Spring-OSGi就實現了在Spring的bean中調用OSGi服務,另一方面就得依靠 SCA了。
至于我們這些程序員在實際的項目/產品中可能會碰到的企業應用開發的問題可能會有下面幾個:
怎么樣把OSGi和Webwork+Spring+Hibernate這樣的架構集成起來。類似Webwork+Spring+Hibernate這樣的 架構無疑是目前Java B/S應用領域最為流行的技術組合拳,而且這樣的三者的結合確實基本上解決了企業應用領域的關鍵需求,例如分布式的調用、事務機制等,如果OSGi能和這 樣的技術組合拳集成,自然也就使得OSGi應用能夠應對企業應用領域的需求了,在OSGi進階的Opendoc中詳細的介紹了OSGi與這個技術組合拳的 集成方法,并誕生了一個OSGi+Hibernate+Spring+Webwork的腳手架以及基于此腳手架的留言板系統。
傳統的系統能不能重構為OSGi系統。無論對于項目還是產品而言,如果需要將新的項目/產品改變為基于OSGi的項目/產品,那么就有一個問題就是如何將 在以前項目/產品中積累的東西重構為可部署至OSGi系統,這相信也是大部分關注的問題,這個問題在OSGi進階Opendoc中也以一個實際的例子來進 行了講解。
既然使用了OSGi,如果發揮不出它的優勢的話,就毫無意義了。OSGi系統的典型特征是:模塊化、動態化和可擴展。要做到這三點從設計/實現層面都要進 行把握,在OSGi進階Opendoc中也從實際項目/產品的角度去介紹了如何去設計、如何去實現,同時也總結了一些OSGi的設計模式和***實踐,使得 大家在應用OSGi實現實際的項目/產品時充分的發揮OSGi的優勢。
在自己的實際應用中,Bluedavy也碰到過一些比較棘手的問題,其中包括:某些Java框架依然需要開發人員自己來實現集成;目前OSGi HttpService尚不支持*.action這樣的通配方式的servlet mapping,對于filter也不支持等等。但是最主要的問題還是落在了如何去構建模塊化、動態化和可擴展的系統上面。正因為它的重要性,在 《OSGi 進階》一書中,Bluedavy用了整整兩章的篇幅來論述OSGi的設計模式和***實踐。也許隨著OSGi的廣泛應用,開發人員對于系統設計的認識,也會 提高到一個新的層次。
在訪談的***,Bluedavy對OSGi目前的應用現狀做了總結:
OSGi在過去的一年中得到了眾多企業應用軟件領域的商業公司的支持,例如IBM、BEA、Oracle、SAP、IONA,這些公司都在自己的商業產品 中開始采用OSGi;而開源領域的則有像Spring、Struts 2、Newton這些的加入。無疑OSGi將成為企業應用軟件領域的重要內容,在此希望國內的同仁們也能更多的來關注OSGi,并將OSGi應用到實際的 項目/產品中去。
此外,記者還了解到,OGSi的官方中文站點(osgi.org.cn)正在籌備建設中,不日即將上線;同時,OSGi 中國User Group也獲得了OSGi聯盟授權,成為繼日本User Group、韓國User Group、法國User Group以及西班牙User Group后的第五個官方認可的User Group,負責中國范圍內OSGi的宣傳和推廣。可以預見,在不久的將來,OSGi在國內一定會迎來更加廣闊的應用前景。
您正在閱讀:訪談實錄:開源文檔《OSGi進階》發布暨作者【編輯推薦】