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

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

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