zhaobin

          增強信息技術;感悟商業(yè)管理;探索商業(yè)與技術融合;豐富自我修養(yǎng);享受時尚生活;記錄心路歷程;使Blog作為自我改變之記錄與監(jiān)督的平臺。
          posts - 25, comments - 59, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

           

          OpenCore:基于OSGi開發(fā)純插件體系結構的WEB應用程序

          轉(zhuǎn)載,原文地址:http://erylee.javaeye.com/blog/50624

          關鍵字:
          企業(yè)應用   OSGi

          隨著OSGi/Equinox逐漸成為Java EE服務端的基礎軟件架構,OSGi上部署WEB應用程序的解決方案日漸成熟。這里介紹三種目前我們所知的解決方案,前兩種是Equinox組織提出的方案,后一種是OpenCore平臺采取的解決方案。

          解決方案一: 部署OSGi/Equinox在Servlet容器中
          具體實現(xiàn): 把OSGi/equinox打包在WAR中,當Servlet容器加載WAR時,啟動OSGi框架。
          WEB-INF的目錄結構大致如下(大致如此):
          1. * /WEB-INF  
          2.       o /web.xml (with one servlet entry assigning all incoming requests to the BridgeServlet)  
          3.       o /lib/servletbridge.jar (the classes associated with the equinox.servletbridge)  
          4.       o /eclipse (the eclipse platform directory)  
          5.             + launch.ini (contains framework properties that will allow override of any eclipse specific System Properties)  
          6.             + /configuration (contains config.ini which lists the bundles you want to have available)  
          7.             + /features  
          8.             + /plugins  

          部署結構如下圖(轉(zhuǎn)載):

          個人感覺這個解決方案使用價值不大。

          解決方案二: Web服務器與Servlet容器嵌入在OSGi/Equinox
          具體實現(xiàn): 把Jetty當作一個插件嵌入到OSGi/Equinox中,并基于Jetty實現(xiàn)OSGi標準中的HTTP服務,其他插件可以通過該服務注冊Servlet和靜態(tài)頁面。
          OSGi標準中的HTTP服務接口如下:
          1. package org.osgi.service.http;  
          2. import javax.servlet.Servlet;  
          3. import javax.servlet.ServletException;  
          4. import java.util.Dictionary;  
          5. public interface HttpService {  
          6. public void registerServlet(String alias, Servlet servlet,  
          7.             Dictionary initparams, HttpContext context)  
          8. throws ServletException, NamespaceException;  
          9. public void registerResources(String alias, String name,  
          10.             HttpContext context) throws NamespaceException;  
          11. public void unregister(String alias);  
          12. public HttpContext createDefaultHttpContext();  
          13. }  

          部署結構圖(轉(zhuǎn)載):

          因為OSGi是最早為嵌入式系統(tǒng)設計,所以OSGi標準中的HTTP服務只提供了有限的Servlet與靜態(tài)資源的發(fā)布功能,沒有一個完整的WEB容器概念,這種模式更適合通過WEB方式暴露(Export)服務,不太適合開發(fā)展現(xiàn)層的WEB應用。
          通過Equinox提供的擴展/擴展點功能可以簡化這種方式WEB應用的開發(fā),就是通過plugin.xml來配置Servlet和靜態(tài)頁面的注冊。

          解決方案三: 設計適合OSGi環(huán)境的Servlet容器,構建純插件體系結構的WEB層
          具體實現(xiàn):"插件"與我們通常所說軟件"模塊"的一個區(qū)別是:插件能自我描述,加載運行在插件容器中。那么,我們可以分層擴展一個插件的自我描述,用類似Decorator的模式為插件增加“特征”描述。 所以,我們在OpenCore中定義了三種特征的插件,如下圖:

          這三種插件類型間關系類似Decorator模式,從內(nèi)到外增加"特征"描述:
          1. OSGi標準插件,自描述文件"META-INF/MANIFEST.MF"
          2. OpenCore插件,增加自描述文件"META-INF/opencore.xml",實現(xiàn)符合OSGi環(huán)境的依賴注冊(IoC)與動態(tài)擴展點
          3. OpenCore Web插件,增加自描述文件"WEB-INF/web.xml"(符合Servlet規(guī)范),WEB特性的插件,可以部署在Servlet容器內(nèi)

          這樣我們可以把一個應用的WEB層像業(yè)務層一樣,分割為多個插件,部署在OSGi/Equinox的框架中.
          部署結構圖:


          我們覺得這種方式以合適的力度將WEB層分割為插件部署在OSGi框架上,充分的發(fā)揮了OSGi體系結構的強大之處,也提高了WEB層開發(fā)部署的靈活性。目前,業(yè)界好像也有很多項目是采用這中方式部署。這種部署方式的缺點是,不得不修改Jetty容器的實現(xiàn),以使其適應OSGi的環(huán)境,我們希望Jetty以后能支持這個功能:)
          Google Code上發(fā)布了一個基于OpenCore的示例項目linktalk,一個基于GWT、Equinox、OpenCore的Ajax聊天室。
          項目地址: http://code.google.com/p/linktalk/
          源碼下載: svn checkout https://linktalk.googlecode.com/svn/trunk/project
          程序下載: svn checkout https://linktalk.googlecode.com/svn/trunk/release
          相關資源:
          http://www.eclipse.org/equinox/server/http_quickstart.php



          趙斌原創(chuàng),保留一切權利,轉(zhuǎn)載請保留引用:www.aygfsteel.com/zhaobin,注明轉(zhuǎn)載除外,謝謝!】
          主站蜘蛛池模板: 招远市| 灵丘县| 克什克腾旗| 余江县| 昌乐县| 亚东县| 靖宇县| 方城县| 岳池县| 雷山县| 大埔区| 克拉玛依市| 普兰县| 阿克陶县| 宣化县| 泰来县| 鹰潭市| 凉城县| 棋牌| 麻江县| 滨州市| 清苑县| 剑阁县| 龙川县| 景德镇市| 方山县| 堆龙德庆县| 湄潭县| 荥阳市| 中宁县| 吉安市| 福泉市| 井陉县| 田阳县| 元朗区| 彩票| 铁岭市| 砀山县| 萍乡市| 垦利县| 南安市|