從WebLogic Portal 8.1 SP3開始,有兩種新方法能使打包在WAR文檔中的portlets可以在門戶中被訪問。您可以將portlets集成為已有門戶web應用的一部分,或者選擇將portlets放在單獨的web應用中。我們將分別利用Portlet Preparer Tool和Web services for Remote Portlets(WSRP)來展示這兩種方法。您可以根據自己的需求選擇最適合的方式:
· 單一WAR文件——使用portlet preparer 工具將WAR內容集成到現有項目中。如果您正在使用一小部分第三方portlets和您自己的門戶項目,這種方式比較適用。
· 多個WAR文件——利用WSRP,可以將portlets保存在一個單獨的WAR中,并從目標門戶項目中引用它。如果您有大量項目擁有多個第三方portlets,最好考慮這種方式。
下面我們將詳細介紹這兩種方式。
單一WAR文件——使用Portlet Preparer工具
Portlet Preparer Tool作為一種工具可以從dev2dev網站獲得:
http://dev2dev.bea.com/codelibrary/code/portletpreparer.jsp
這個工具從包含在WAR文件中的JSR168 portlets中創建.portlet文件,因此允許WebLogic Workshop將此文件的內容導入到一個門戶Web項目中。運行preparer 工具的步驟是簡單而直觀的,有如下兩種可選方式:
· 將portlets添加到一個新的項目。
· 將portlets添加到一個現有門戶項目中。
以下是對于每種方式的步驟:
將portlets添加到一個新的項目
要導入一個包含JSR168 portlets 的WAR文檔,完成以下步驟:
1. 將portletConverter.jar解壓縮到硬盤的一個臨時目錄中(以下我們稱此目錄為<converter-root>)。
2. 將WAR文件移到<converter-root>中。
3. 將WEBLOGIC_HOME設置為env.sh 或者 env.bat(依平臺而定)。
4. 運行env.sh 或者 env.bat(依平臺而定)。
5. 運行ant -Dwar.file=(<war-file-name>是WAR文件的文件名)。
6. 在<converter-root>下生成一個叫做tempDir的目錄。
7. 打開WebLogic Workshop并將tempDir作為一個門戶Web項目導入。
將Portlets添加到一個現有門戶項目中
要在現有門戶Web應用中添加portlets,需要完成以下步驟:
1. 完成上述的第1-7步。
2. 復制所有必需的類文件到WEB-INF\classes目錄,同時復制所有必需的jar文件到WEB-INF\lib目錄。
3. 對web.xml作必要的修改(例如:servlet定義)。
4. 向每個加入的portlet的portlet.xml文件中添加元素(這些拷貝來自前面創建的tempDir 目錄中的portlet.xml)。
5. 從tempDir\portlets中拷貝.portlet文件到您的Web應用中。
6. 將portlets添加到您的門戶。
多個WAR文件:使用遠程 Portlets Web 服務(WSRP)
利用WSRP,您可以在單獨的Web應用中部署Java portlets,并從門戶項目中引用它們。要了解關于WSRP如何工作的更多信息,請訪問以下鏈接并下載WebLogic Portal 8.1 SP3:
· WSRP 概述: http://dev2dev.bea.com/products/wlportal81/articles/wsrp.jsp
· (下載WebLogic Portal 8.1 SP3) http://commerce.bea.com/index.jsp
以下場景中SamplePortal是一個主門戶,從這里您可以創建到其他WAR文件中portlets的引用。這樣就可以將不同WAR文件的portlets導入到SamplePortal中。
1. 創造一個不同的新門戶項目。并按“將portlets添加到一個新的項目”中所描述的七個步驟來操作。
2. 啟動門戶示例的域,并登錄到以下Administration Portal中:http://localhost:7001/portalAppAdmin .
3. 在Portals標簽下,點擊左邊的Library。
4. 當樹展開時,點擊Portlet Producers圖標。
5. 當producer資源面板出現在右側后,點擊“Browse/Add Producers”標簽。
6. 在“Enter Producer to Browse”框中輸入:http://localhost:7001/<new portlet war file>/producer?wsdl,點擊“ok”。
7. 此時您將看到一列producer的屬性,包括可用的portlet。點擊“Add Producer”并且填寫注冊區域。
8. 注冊之后,您將處于“ Available Producers ”窗口中。在“ Available Producers”框中,點擊“Register”按鈕,在對話框中,點擊“Save”。
9. 點擊您注冊的Producer,并從門戶中選出需要引用的portlet。
這時,點擊庫目錄中的“All Portlets”就可以看到剛剛添加的遠端portlet。在Available Portlets 框的Category下拉菜單中還有一個方便的portlet類別,“All Remote Portlets,”。現在您可以將遠端portlet加入一個頁面中供用戶使用。
在此場景中,SamplePortal將扮演一個消費者的角色,而您的其他web應用將成為producer角色。
使Pluto Test Suite Portlets在SamplePortal中可用
下面用一個例子來重點說明在多個WAR文件中使用portlets。基本思想是在一個web應用中為其他web應用的WebLogic Portal提供一組可用的portlets。
在下面的例子中,我們從Apache下載了Pluto test portlets(JSR 168 - test suite)。接下來,我們創建一個新的web應用,使用portlet工具來導入WAR文件,最終使用WSRP來使他們在門戶web應用中可用。
1. 從Apache上下載最新的Pluto test suite portlets(出于方便起見,本文中我們附帶了一份拷貝)。
2. 使用 Portlet工具使WAR 為WebLogic Workshop導入做好準備。

注意,圖中.portlet文件已經創建,同時WAR也已做好導入的準備。
3. 執行作為一個門戶項目(獲得168支持)的WAR文件的導入步驟。在Workshop中從您的應用點擊導入選項就可以實現。

編輯portlet.tld文件,指向JSR 168標準的BEA實現(出于方便考慮,本文中我們附帶了一個拷貝)
這時,您已經創建了一個新的web應用,并導入了168 portlets。現在讓他們可以在其他web應用中使用。這個例子使用了SamplePortal web應用。有兩種方式可以將這些portlet帶入SamplePortal。您可以在Workshop中使用portlet wizard為新建的web應用創建一個引用,另外,您也可以在管理門戶中創建一個引用。
下面的步驟將使用管理門戶。確保已有一個門戶和創建好的桌面。在這個例子中,可以使用SamplePortal模板生成一個門戶“P1”和一個桌面“D1”。
1. 登錄到管理門戶。
2. 在SamplePortal中添加一個新頁面,并且命名為Pluto Test。
3. 進入庫中,選擇portlet producers,并添加一個新的producers。
4. 輸入地址:http://localhost:7001/<new_web_app>/producer?wsdl
5. 執行添加producer并且注冊。
6. 返回并選擇需要添加的portlet。在這個例子中,我們選擇了“Test Portlet #1”,它是Pluto Test suite的一部分。
7. 切換到desktop“D1”,并選擇添加一個portlet,選擇“Test portlet #1”。
當啟動桌面時,您將看到一個新的名為“Pluto Test”的頁面,在頁面中您將看到來自位于另一個單獨web應用的Pluto test suite中的“Test Portlet #1”。
注意:SamplePortal位于sampleportal web應用中,而Pluto Test Suite Portlets位于我們創建的新Pluto web應用中。
其他需要考慮的事項
一個可能會降低部署時間的因素是使用了門戶項目的縮微版本。您可以創建自己的只支持JSR 168而不支持其他服務的項目。與門戶內容管理服務、Java頁面流和其他非168服務相關的標簽都將被刪除。