Open-Open

          皇家撒拉哥薩
          posts - 32, comments - 3, trackbacks - 0, articles - 1

          Jetspeed-2 心得隨筆(3)-Overview

          Posted on 2006-07-17 17:05 開源愛好者 閱讀(526) 評論(0)  編輯  收藏 所屬分類: Portal
          Jetspeed1是我接觸到第一個Portal Server。可惜其獨特的架構,我一直沒辦法接受。後來因為工作上的需要,弄了很久的WebSphere Portal Server,卻總是有一種被IBM欺負的感覺。最近和Jetspeed2相處一陣子後,覺得J2蠻不錯的;儘管release的比較慢,可是架構、功能和速度個人都覺得滿意。寫下一些個人心得,希望有更多能人加入J2,一起開發一些有用的元件和管理設定的portlet,讓J2完美。

          由衷希望J2能超越WPS...哈哈。

          J2的feature很多,請務必連至http://portals.apache.org/jetspeed-2/features.html瀏覽一下。另外對Spring、Velocity、JAAS,JSR168的了解是一定要的。

          OK,碎碎唸完畢。今天介紹一下J2的一些觀念,如果有錯誤,請大家不吝指正。
          (文章中提到的一些檔案路徑,是依照之前寫的範例。)

          先來一張官方的overview流程

          在這張圖中,J2算是位於Engine的部份,而Container是Pluto Portlet Container,Portlet就是自已寫的Portlet;所以這張圖正好對照JSR168中的Portal--Portlet Container--Portlet的概念。要特別注意的是,圖中在Engine和Container之間有很多個雙向的箭頭,這代表整個流程可能會在這裡來來回回地執行。
          至於這圖大概可以這樣說明:
          1 request送至server後由JetspeedServlet(org.apache.jetspeed.JetspeedServlet)接收

          2 JetspeedServlet透過Jetspeed(org.apache.jetspeed.Jetspeed)取得ComponentManager,然後透過ComponentManager取得RequestContextComponent(org.apache.jetspeed.request.JetspeedRequestContextComponent)

          3 RequestContextComponent會針對這個request建立一個RequestContext(org.apache.jetspeed.JetspeedRequestContext),並且讓這個request和新建的RequestContext能互相參照

          4 呼叫Engine(org.apache.jetspeed.JetspeedEngine)的service()方法,這個方法會把剛剛建立的RequestContext傳入,這樣後面的元件才能使用

          5 在service()方法中,Engine會依據request的目標URL來取得相對應的Pipeline(org.apache.jetspeed.pipelineJetspeedPipeline)來處理。Pipeline使用了chain of responsibility的pattern,是由一堆Valve(org.apache.jetspeed.pipeline.valve.Valve)串起來的

          6 各個Valve依序執行,其中某些Valve會和Container動作,某些Valve會負責產生要response的portal頁面。在這個過程中,Continer會執行相關的Portlet,並將結果返回至Pipeline,也就是Valve chain中。

          7 將產生的portal頁面傳回給user,流程結束


          由上面的介紹,應該可以體會到Pipeline在J2中是非常重要的元件。這裡附上Pipeline的官方UML簡圖做參考


          而J2本身是Spring-based的架構,主要的Spring設定檔都在"C:\tomcat\webapps\jetspeed\WEB-INF\assembly"下。JetspeedServlet在init時會建立Spring容器並載入這些設定檔,而之前提到的ComponentManager就可以透過name或class在Spring容器中尋找需要的component。有關J2的component,請務必參考http://portals.apache.org/jetspeed-2/guides/guide-components.html及原始碼。

          來看一下目錄中的pipelines.xml。這個XML是用來組合各個Pipeline和設定各Pipeline和其對應的URL。先看一下最後一段bean id="pipeline-map"的部份,在這邊可以看到URL和其相對應的Pipeline。另外找到bean id="jetspeed-pipeline"這一段,可以看到這個Pipeline中Valve的組合,而這個Pipeline也是default的Pipeline;有興趣的不妨參考這份XML把這個Pipeline中的Valve的原始碼找到翻一翻,大致了解一下每個Valve在做啥,還蠻有幫助的。

          如果依照之前所寫的echo portlet,其FORM的action URL起頭為/portal,而Engine會用此做為key由"pipeline-map"中找到"jetspeed-pipeline"這個Pipeline來處理。

          底下這個是J2附的Valve官方簡圖,大家參考一下
          ?

          主站蜘蛛池模板: 桃园县| 昌江| 盐城市| 马关县| 旺苍县| 伊春市| 民县| 汝州市| 永城市| 苍溪县| 昌宁县| 施甸县| 盐津县| 阳东县| 肥城市| 齐齐哈尔市| 光泽县| 忻州市| 石阡县| 丹阳市| 东乡族自治县| 新竹市| 赤壁市| 高邑县| 琼海市| 柳林县| 沅陵县| 布尔津县| 石台县| 开阳县| 太保市| 襄垣县| 苍南县| 垦利县| 四川省| 马尔康县| 理塘县| 会泽县| 平武县| 耒阳市| 长葛市|