Jetspeed-2 心得隨筆(3)

<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

转自:http://www.javaworld.com.tw/jute/post/view?bid=11&id=137914&sty=3

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流程
Jetspeed-2 心得隨筆(3)
在這張圖中,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簡圖做參考
Jetspeed-2 心得隨筆(3)

而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官方簡圖,大家參考一下
Jetspeed-2 心得隨筆(3)

你可能感兴趣的:(apache,spring,bean,velocity,UML)