OpenCore:基于OSGi開發(fā)純插件體系結(jié)構(gòu)的WEB應(yīng)用程序關(guān)鍵字: osgi
隨著OSGi/Equinox逐漸成為Java EE服務(wù)端的基礎(chǔ)軟件架構(gòu),OSGi上部署WEB應(yīng)用程序的解決方案日漸成熟。這里介紹三種目前我們所知的解決方案,,前兩種是Equinox組織提出的方案,后一種是OpenCore平臺(tái)采取的解決方案,。
解決方案一: 部署OSGi/Equinox在Servlet容器中具體實(shí)現(xiàn): 把OSGi/equinox打包在WAR中,,當(dāng)Servlet容器加載WAR時(shí),啟動(dòng)OSGi框架,。WEB-INF的目錄結(jié)構(gòu)大致如下(大致如此):
部署結(jié)構(gòu)如下圖(轉(zhuǎn)載): 個(gè)人感覺這個(gè)解決方案使用價(jià)值不大,。 解決方案二: Web服務(wù)器與Servlet容器嵌入在OSGi/Equinox具體實(shí)現(xiàn): 把Jetty當(dāng)作一個(gè)插件嵌入到OSGi/Equinox中,并基于Jetty實(shí)現(xiàn)OSGi標(biāo)準(zhǔn)中的HTTP服務(wù),,其他插件可以通過該服務(wù)注冊Servlet和靜態(tài)頁面,。OSGi標(biāo)準(zhǔn)中的HTTP服務(wù)接口如下:
部署結(jié)構(gòu)圖(轉(zhuǎn)載): 因?yàn)镺SGi是最早為嵌入式系統(tǒng)設(shè)計(jì),所以O(shè)SGi標(biāo)準(zhǔn)中的HTTP服務(wù)只提供了有限的Servlet與靜態(tài)資源的發(fā)布功能,,沒有一個(gè)完整的WEB容器概念,,這種模式更適合通過WEB方式暴露(Export)服務(wù),不太適合開發(fā)展現(xiàn)層的WEB應(yīng)用,。 通過Equinox提供的擴(kuò)展/擴(kuò)展點(diǎn)功能可以簡化這種方式WEB應(yīng)用的開發(fā),,就是通過plugin.xml來配置Servlet和靜態(tài)頁面的注冊。 解決方案三: 設(shè)計(jì)適合OSGi環(huán)境的Servlet容器,,構(gòu)建純插件體系結(jié)構(gòu)的WEB層具體實(shí)現(xiàn):"插件"與我們通常所說軟件"模塊"的一個(gè)區(qū)別是:插件能自我描述,,加載運(yùn)行在插件容器中。那么,,我們可以分層擴(kuò)展一個(gè)插件的自我描述,,用類似Decorator的模式為插件增加“特征”描述。 所以,,我們在OpenCore中定義了三種特征的插件,,如下圖:這三種插件類型間關(guān)系類似Decorator模式,從內(nèi)到外增加"特征"描述:
這樣我們可以把一個(gè)應(yīng)用的WEB層像業(yè)務(wù)層一樣,,分割為多個(gè)插件,,部署在OSGi/Equinox的框架中. 部署結(jié)構(gòu)圖: 我 們覺得這種方式以合適的力度將WEB層分割為插件部署在OSGi框架上,充分的發(fā)揮了OSGi體系結(jié)構(gòu)的強(qiáng)大之處,,也提高了WEB層開發(fā)部署的靈活性,。目 前,,業(yè)界好像也有很多項(xiàng)目是采用這中方式部署。這種部署方式的缺點(diǎn)是,,不得不修改Jetty容器的實(shí)現(xiàn),,以使其適應(yīng)OSGi的環(huán)境,我們希望Jetty以 后能支持這個(gè)功能:) Google Code上發(fā)布了一個(gè)基于OpenCore的示例項(xiàng)目linktalk,,一個(gè)基于GWT,、Equinox、OpenCore的Ajax聊天室,。 項(xiàng)目地址: http://code.google.com/p/lintkalk 源碼下載: svn checkout https://linktalk./svn/trunk/project 程序下載: svn checkout https://linktalk./svn/trunk/release 相關(guān)資源:http://www./equinox/server/http_quickstart.php |
|