<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhaobin

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

     

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

    轉載,原文地址:http://erylee.javaeye.com/blog/50624

    關鍵字:
    企業應用   OSGi

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

    解決方案一: 部署OSGi/Equinox在Servlet容器中
    具體實現: 把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  

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

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

    解決方案二: Web服務器與Servlet容器嵌入在OSGi/Equinox
    具體實現: 把Jetty當作一個插件嵌入到OSGi/Equinox中,并基于Jetty實現OSGi標準中的HTTP服務,其他插件可以通過該服務注冊Servlet和靜態頁面。
    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. }  

    部署結構圖(轉載):

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

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

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

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


    我們覺得這種方式以合適的力度將WEB層分割為插件部署在OSGi框架上,充分的發揮了OSGi體系結構的強大之處,也提高了WEB層開發部署的靈活性。目前,業界好像也有很多項目是采用這中方式部署。這種部署方式的缺點是,不得不修改Jetty容器的實現,以使其適應OSGi的環境,我們希望Jetty以后能支持這個功能:)
    Google Code上發布了一個基于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



    趙斌原創,保留一切權利,轉載請保留引用:m.tkk7.com/zhaobin,注明轉載除外,謝謝!】
    主站蜘蛛池模板: 天天摸夜夜摸成人免费视频 | 四虎免费大片aⅴ入口| 亚洲国产综合专区在线电影| 中文字幕免费在线看电影大全| 国产成人一区二区三区免费视频| 亚洲依依成人亚洲社区| 无码高潮少妇毛多水多水免费| 亚洲中文无码线在线观看| 亚洲天堂免费在线| 午夜在线a亚洲v天堂网2019| 妞干网在线免费视频| 久久久久久亚洲av无码蜜芽| 国产男女性潮高清免费网站| 国产av无码专区亚洲av毛片搜 | 激情内射亚洲一区二区三区爱妻| 成人免费的性色视频| 伊人久久五月丁香综合中文亚洲| 好吊妞在线新免费视频| 青青免费在线视频| 久久精品国产精品亚洲人人| 99免费精品视频| 亚洲综合激情六月婷婷在线观看| 动漫黄网站免费永久在线观看| 亚洲中文字幕无码中文| 亚洲av高清在线观看一区二区| 本道天堂成在人线av无码免费| 亚洲av综合av一区| 在线观看免费人成视频色| 丰满亚洲大尺度无码无码专线| 久久精品国产精品亚洲人人| 日本一卡精品视频免费| 亚洲欧美精品午睡沙发| 亚洲午夜无码片在线观看影院猛 | 国产精品高清全国免费观看| 国产精品免费久久| 78成人精品电影在线播放日韩精品电影一区亚洲 | 成人a免费α片在线视频网站 | 在线免费播放一级毛片| 亚洲六月丁香六月婷婷色伊人| 国产成人精品123区免费视频| a级毛片免费播放|