JAVA流通橋

          JAVA啟發者

          統計

          留言簿(3)

          AJAX相關網址

          Eclipse相關網址

          Hibernate

          java相關網址

          LINUX相關網址

          webwork相關網址

          友好鏈接

          閱讀排行榜

          評論排行榜

          Pluto是一個滿足Portlet API規范的Portlet容器的實現

          Pluto是一個滿足Portlet API規范的Portlet容器的實現,它為開發者提供了一個運行 portlets的工作平臺。然而,如果沒有一個驅動器(driver),也就是Portal,的支持的話, 運行和測試Portlet容器將非常之麻煩。Pluto本身也提供了一個簡單的Portal模塊,該模塊僅 僅是為了滿足Portlet容器和JSR 168的需要而寫的。如果你需要一個成熟的Portal,請參考 Jetspeed項目。Jetspeed項目關注的是Portal本身,而不是Portlet容器。

          圖1是Portal的基本體系結構圖。Portal Web Application處理客戶的請求,從客戶的當前 頁中提取出portlets,然后調用portlet容器來獲得每一個portlet的內容。Portal通過 Portlet容器的Invoker API來訪問portlet容器。這些API是portlet容器的主要調用接口, 它們為Portal提供了一些基于請求的方法來調用portlet。容器的使用者(即Portal,譯者 注)必須實現portlet容器的Container Provider SPI(Service Provider Interface)回調接口,來為portlet容器提供與Portal相關的信息。最后,portlet容器通 過Portlet API調用所有的portlets。



          圖1:一個集成了Pluto的簡單Portal

          Portlet容器

          Portlet容器是portlets的運行時環境,也是每一個Portal的核心組件。Portlet容器需要獲 取有關Portal本身的一些信息,還必須重用Portal的一些基本代碼。因此,Portlet容器可以 保證自己與其它的Portal組件之間是完全分開的。也就是說,你可以把一個獨立的Portlet容器 插入到任何一個Portal中去,只要它可以滿足Portlet容器的要求,比如實現了所有的SPI。

          Portlet容器的Invoker API(也被稱為進入點)是Portlet容器的主要調用接口。這些API包 含Portlet容器的生命周期控制方法(init(),destroy())和基于請求的調用方法 (initPage(),performTitle(),portletService()等等)。由于Portlet容器最終是 去調用一個portlet,故這些方法的簽名和Portlet API的主要portlet接口很類似,除了一個 須額外傳入的portlet ID。Portlet容器可以通過這個額外傳入的portlet ID參數來決定調用 哪一個portlet。

          除了可以使用Invoker API來調用Portlet容器外,Portal還必須實現Portlet容器定義的SPI。 因此,參考實現引入了“容器服務”的概念:容器服務用來定義一些能夠在容器中注冊的可插的組件, 這些組件要么提供一些基本的功能,要么對容器進行擴展。Pluto參考實現定義了下面這些內建的 容器服務(前四個是運行Portlet容器所必須實現的,而第五個則是可選的):

          • Information Provider(信息提供者):為Portlet容器提供關于Portal及 其框架的信息。通過該接口只能夠獲得一些已知的或存在Portal中的信息。這些信息包括帶 導航狀態(navigational state)的URL生成、portlet上下文(portlet context)、 portlet模式(portlet mode)和窗口狀態(window state)控制。
          • Factory Manager(工廠管理者):定義了如何通過工廠獲得一個實現(一般的 Portal應該已經實現了這樣的接口)。
          • Log Service(日志服務):定義了輸出日志的方法(一般的Portal應該已經實 現了這樣的接口)。
          • Config Service(配置服務):定義了如何獲得配置值(一般的Portal應該已 經實現了這樣的接口)。
          • Property Manager(屬性管理者,可選):該服務讓Portal可以獲得JSR 168 規范中定義的屬性的值。

          嚴格的說,Portlet Object Model(Portlet對象模型)也是一個SPI,但與其它的SPI相比, 它處在一個特殊的位置上。因此我們不把它看成是容器服務的一部分,因為它處理所有的portlet 對象,并包含了一些混雜的接口。



          圖2:Portlet容器的體系結構

          Portlet的部署

          Portlet容器是構建在Servlet容器之上的,所以它可以重用Servlet容器的許多功能。為了達到 這一點,portlet容器必須把一些servlet的屬性注入到每一個portlet應用的war文件中,如 圖3所示。Portlet組件的部署器將在原先的war文件中注入一個新的或者修改過的web.xml,再 為每個portlet注入一個servlet包裹器,以此作為調用點。然后,portlet部署器將把這個修 改過的war文件傳給應用服務器的部署器,以此來把它部署到應用服務器的系統中。當一個 portlet被調用時,portlet容器將調用注入的servlet包裹器,把這作為被部署的portlet的 war文件的進入點。



          圖3:參考實現中portlet的部署

          Pluto和WSRP標準

          JSR 168規范和Web Service for Remote Portlets(WSRP)標準有高度的一致性。這兩 個同時出現的標準都發布了開放源碼的實現,它們的實現都完成了在相應的規范中定義的所有必要 功能。這兩個標準都把能很好的互相協作作為它們共同的目標。因此,WSRP portlets在 portlet容器中既可以作為消費者運行,也可以作為生產者運行。

          Pluto項目必須支持在一個Portal中運行多個portlet容器。因此,Pluto Portlet容器可以 被多次初始化。更重要的是,它可以以不同的方式運行,每個portlet容器都使用一個不同的SPI 實現。

          posted on 2007-03-23 10:37 朱巖 閱讀(374) 評論(0)  編輯  收藏 所屬分類: Portal文章

          主站蜘蛛池模板: 礼泉县| 武义县| 平远县| 大厂| 宕昌县| 南郑县| 合川市| 汝州市| 万全县| 珲春市| 云浮市| 兰州市| 张家川| 辽阳县| 邓州市| 郧西县| 遂平县| 衡山县| 抚州市| 萝北县| 赤峰市| 广宗县| 正安县| 龙海市| 镇巴县| 泸溪县| 龙江县| 九龙坡区| 三明市| 麻栗坡县| 张家港市| 宣威市| 长治县| 三门峡市| 综艺| 淮安市| 巩义市| 福泉市| 合江县| 从江县| 广安市|