引言
這是一個系列文章的第 1 部分,這一系列文章將討論與使用 WebSphere® Personalization(以下稱 Personalization)和 WebSphere Portal(以下稱 Portal)相關的各種主題。在第 1 部分中,我們描述如何建立個性化的 portlet 和 Web 應用程式。在這一系列文章的其餘文章中,我們將在您在第 1 部分中將要建立的個性化的 portlet 的基礎上進行建置。在這篇文章中,我們還將描述 WebSphere 的 個人化 基本規則 ,您將需要理解它以便閱讀將來的文章。我們正在撰寫這一系列文章以幫助您開始學習;這一系列文章並不旨在提供對個人化或 portal 的深入理解。如需有關個人化和 portal 的更多詳細內容,請參閱本文末尾的參考資料。我們還提供了建置這個範例中使用的資料庫表所必需的文件(請參閱下面的 下載這一部分)。在下載的 ZIP 文件中,我們包括了最後的 portlet,這是為那些願意先瀏覽原始碼,且實驗已開發的 portlet 的人們提供的。
先決條件
要建置本文中的範例,您必須在系統上安裝了下列軟體。您在機器上擁有完全一樣的軟體是很重要的︰- DB2® 通用資料庫版本 7.2 及修訂套件 5
- IBM HTTP Server,版本 1.3.19
- WebSphere Application Server,進階版,版本 4.02
- WebSphere Studio Application Developer 版本 4.03
- WebSphere Studio Application Developer 4.0 的 WebSphere Personalization 精靈
- WebSphere Portal 4.11 或 4.12
- WebSphere Personalization 4.1
- WebSphere Studio Application Developer 的 WebSphere Portal Toolkit
- 作業系統︰Windows 2000
WebSphere Personalization 概觀
WebSphere Personalization 讓開發者能夠建置以站台瀏覽者的興趣為目標的 Web 頁面。它讓開發者能夠選擇適合站台瀏覽者獨特需要和興趣的內容。Personalization 提供易於使用的、以 Web 為基礎的工具來幫助企業使用者建立個人化規則,從而對顯示給每個獨特的站台瀏覽者的內容進行個人化。任何個性化解決方案的三個基本元件
- 使用者概況表(user profile)︰由關於站台瀏覽者的資訊組成,包括您可以用來決定向站台瀏覽者展示何種類型的內容的使用者屬性。開發一個優秀的 使用者概況表對於您的個人化解決方案的成功是至關重要的。
- 內容模型(content model)︰定義您想交付給您的站台瀏覽者的內容的屬性(例如,產品描述、件數等)。
在 WebSphere個人化中,使用者概況表和內容模型都被稱作個性化資源。這些資源被當作 Java 類別實作, 使用者資料或內容的參考資料被 存儲在外部資 料裡。要定義個性化資源,您需要建立 Java 類別,這些 Java 類別符合 WebSphere個人化API 並且映射到您的資料存放區。這個 API 是由幾個函式組成的, 個人化資源引擎(Personalization Resource Engine)在一規則下執行時呼叫這些函式來檢索選擇的內容。您可以使用 WebSphere Studio Application Developer(以下稱 Application Developer)提供的 User Wizard 和 Content Wizard 產生這些類別。在資料存放區既不是關聯式資料庫也不是 LDAP 目錄的情況下,您將不得不實作所需的 API。您可以為您用 Java 程式碼存取的任何內容建立一個資源,這樣對於您可以 個 人化 的內容就沒有限制了。任何個 人化 解決方案至少應該有一個使用者資源以及一個或多個內容資源。這些資源一旦被建立,就需要被 發佈到個 人化 執行時,這樣各種規則就可以參照和使用它們。透過從 Application Developer 發佈資源,或者透過將這些資源匯入到個性化資源控制台(Personalization Resource Console)中,您就可以完成上述工作。
- 匹配技術︰為了將每個使用者與正確的內容匹配,您可以使用過濾、商業規則、推薦引擎或這三者的組合。WebSphere個人化支援所有這三種將使用者與內容相匹配的方法。就本文的目的而言,我們將使用商業規則。
請使用個人化Workspace Rule Composer 建立各種規則。規則是定義當使用者的函式存取 Web 站台時在站台上提供什麼內容的商業邏輯。 規則編輯器讓您能夠建立易於閱讀的邏輯陳述句,這些陳述句利用訊息(包括使用者資源和內容資源定義、日期和時間、請求和 Session 物件以及應用程式物件)來確定要執行什麼作業。這些作業經常涉及確定選擇什麼內容,但也可以用於更新屬性。為了幫助您對 Web 站台進行個人化,WebSphere個人化提供了三種規則類型︰分類器(Classifier)規則、作業(Action)規則和繫結(Binding)規則。下面對這三種規則類型進行了描述︰
- 分類器用於根據使用者概況表中包括的屬性把站台瀏覽者劃分成若干部分(例如,金牌、銀牌或銅牌)。您還可以使用分類器根據其它條件(如目前日期和時間、或透過隱式或顯式的概況分析收集到的資料)來分類。在將來的一篇文章中,我們將進一步解釋概 況分析。下面的表說明了分類器規則的一個範例。在這個範例中,如果使用者的角色屬性為 Manager 或 Executive,則分類器 UserClearance 被設定為 Confidential;否則它就被設定為 Regular。
UserClearance is Confidential when current Personnel.ROLE is equal to Manager or current Personnel.ROLE is equal to Executive Otherwise Regular
- 作業確定了什麼內容可以被用來對值進行更新。您還可以對作業規則結果排序。下面的表說明了作業規則的一個範例。這個規則選擇標示為 confidential 的內容。
Select Content whose News.CONFIDENTIAL is equal to Y
- 繫結將作業和分類器組合在一起。在一條繫結規則中,一個或多個分類器與若干個作業規則組合在一起形成一條穩固的規則。在下面的表中,GetNewsByClearance 繫結規則說明︰如果使用者的分類是 confidential(例如,使用者被這樣分類,因為他或她是一名 executive 或 manager),則執行 getConfidentialNews 作業。這條規則還說明總是執行 GetSiteNews 規則。在這個範例中,如果 UserClearance 被分類為 confidential,那麼結果將是 GetConfidentialNews 規則和 GetSiteNews 規則返回的內容。
When UserClearance is Confidential do GetConfidentialNews Always GetSiteNews order as is show all items
- 分類器用於根據使用者概況表中包括的屬性把站台瀏覽者劃分成若干部分(例如,金牌、銀牌或銅牌)。您還可以使用分類器根據其它條件(如目前日期和時間、或透過隱式或顯式的概況分析收集到的資料)來分類。在將來的一篇文章中,我們將進一步解釋概 況分析。下面的表說明了分類器規則的一個範例。在這個範例中,如果使用者的角色屬性為 Manager 或 Executive,則分類器 UserClearance 被設定為 Confidential;否則它就被設定為 Regular。
WebSphere個人化開發環境
Personalization 開發環境由下列部分群組成︰
- WebSphere Studio Application Developer 透過 Application Developer 4.0 外掛程式的 WebSphere個人化精靈提供精靈。如果使用者資料或內容資料在關係資料庫中或 LDAP 目錄下,Application Developer 產生您的資源。如果該資料位於任何其它位置中,那麼您將不得不實作那個資源所必需的個人化API。在這種情況下,Application Developer 為開發用於實作 API 的類提供一個完整的、整合的開發環境。Application Developer 還提供了一個用於建立內容點(content spot)的精靈,這些內容點是 JSP 頁面上供規則用來填入內容的預留位置。
- 個人化工作區是一個針對企業使用者的、基於瀏覽器的工具,用來幫助企業使用者輕鬆地建立規則和競銷、將規則指派給內容點以及在 Web 站台上預覽規則和競銷的效果。規則編輯器讓您能夠建立易於閱讀的邏輯陳述句,這些邏輯陳述句利用來自使用者資源定義和內容資源定義的訊息來確定要執行什麼作業(或者透過選擇來自資料來源的內容以傳送給 Web 站台瀏覽者,或者透過更新存儲的資料)。
WebSphere Personalization 執行時環境
個人化執行時環境是由 Personalization Server(它是執行在 WebSphere Application Server 上的一個應用程式伺服器)組成的。執行時的主要元件包括︰
- 資源引擎(resource engine)
- 規則引擎(rules engine)
- 推薦引擎(recommendation engine)
- 當 Web 客戶端請求一個個性化的 Web 頁面(它是一個帶有內容點的 JSP 頁面)時,處理開始。
- WebSphere Application Server JSP 編譯器在內容點上呼叫一個方法,這個方法又接著呼叫規則引擎的 API 來執行規則。
- 規則處理包括存取那些被定義到資源引擎的資源,還從客戶資料存儲中檢索使用者資料和內容資料。Personalization API 的使用者提供的實作處理對客戶 資料存放區的查詢,從而對資源進行存取。
個性化的 portlet 概觀
在這一部分中,我們描述您將要建立的個性化的 portlet。這個範例模擬了一個簡單的銀行業新聞應用程式。這個模型由兩個簡單的表組成︰Customer 和 Customernews。所有的使用者資料均由 Customer 表定義並存儲在其中。內容模型存儲是 Customernews 表。這站台的瀏覽者會被根據他們的銀行賬戶中的餘額來分類。分類如下所示︰要建立這個樣本,請完成下列步驟︰Basic
- 賬戶餘額 <= 100
Advantage- 賬戶餘額 > 100 且 <= 1000
Preferred- 賬戶餘額 > 1000 且 <= 10,000
Premium- 賬戶餘額 > 10,000
我們為這些分類中的每一類都定義了作業規則。將要被作為這個範例的一部分來建立的作業規則有︰
GetCurrentUser
- 這作業規則返回有關目前使用者的訊息。
GetBasicNews
- 這作業規則選擇被歸為 basic 的新聞。該新聞針對那些被歸為 basic 的客戶(即餘額小於或等於 100 的客戶)。
GetAdvantageNews
- 這作業規則選擇層級(level)屬性為 adavantage 的新聞。該新聞適用於那些被歸為 advantage 的瀏覽者(即餘額在 100 到 1000 之間的客戶)。
GetPreferredNews
- 這作業規則選擇層級屬性為 preferred 的內容。該新聞適用於那些被歸為 preferred 的瀏覽者(即餘額在 1000 到 10,000 之間的客戶)。
GetPremiumNews
- 這作業規則選擇層級屬性為 premium 的內容。該新聞適用於那些被歸為 premium 的瀏覽者(即餘額超過 10,000 的客戶)。
- 在 Application Developer 中建立一個 portlet 應用程式專案。
- 建立與 Customer 表和 Custmomernews 表相對應的使用者資源和內容資源。
- 為規則建立內容點。
- 建立一個 JSP,然後把內容點和對應的程式碼新增到該 JSP。
- 將資源類發佈到 WebSphere Personalization。
- 建立 WebSphere個人化工作區專案。
- 建立規則並將它們與內容點相關聯。
- 從個人化工作區發佈專案。
- 建立 WAR 文件並部署來自 Application Developer 的 portlet。
- 登記樣本使用者並檢視個人化的 portlet。
在 Application Developer 中建立 portlet 應用程式
首先,使用 Portal Toolkit 提供的精靈在 Application Developer 中建立一個專案。Portal Toolkit 提供了一個可以為任何一種常見的 portlet 類型建立專案的精靈。這極為有用,因為它產生所有必需的文件(如 portlet.xml 和 web.xml)、加入所需的 JAR 文件,並且在正確的目錄結構中為您建立建置類路徑(build classpaths)和環境。這就讓您能夠將重點放在編寫實際的 portlet 程式碼上,而不用擔心基礎結構。這個工具箱還提供了除錯 portlet 的能力;我們將在以後的一篇文章中介紹這一主題。啟動 WebSphere Studio Application Developer
- 選擇 Start => Programs => IBM Studio Application Developer => IBM Studio Application Developer。
- 選擇 Perspective => Open => Other 以啟動 Select Perspective 視窗。
- 在這個視窗中選擇 Portlet,然後按一下 OK。現在,您已經為建立 portlet 專案做好了準備。
建立 portlet 應用程式專案
- 選擇 File => New => Portlet Application Project 以啟動 Create a Portlet project Wizard。在 Project name 欄位中輸入
PersSamplePortletHome
。請確保選擇了 Use default location。在 Enterprise Application project name 欄位中輸入PersSamplePortletEAR
。在 Context root 欄位中輸入PersSamplePortletHome
。請參見圖 1。按一下 Next。
圖 1. Create a Portlet project 對話方塊的初始畫面
- 在下一個螢幕上選擇 Basic Portlet 單選按鈕,然後按一下 Next。Create a Portlet project - Basic portlet parameters 對話方塊開啟了。
- 在 Portlet application name 欄位中輸入
PersSamplePortletHome application
。在 Portlet name 欄位中輸入PersSamplePortletHome portlet
。在 Concrete portlet application name 欄位中輸入PersSamplePortletHome application
。在 Concrete portlet name 欄位中輸入PersSamplePortletHome application
。在 Concrete portlet title 欄位中輸入PersSamplePortlet
。在 Portlet class name 欄位中輸入MyPersSamplePortlet
。請參見圖 2。按一下 Finish。
圖 2. Create a Portlet project - Basic portlet parameters 對話方塊
- 在 Navigator 視景中,檢查您剛建立的專案。您應該看到兩個名為
PersSamplePortleEar
和PersSamplePortletHome
的文件夾,其目錄結構與圖 3 類似。
圖 3. portlet 專案目錄結構
建立使用者資源和內容資源
接下來,使用 Application Developer Personalization Wizards 建立個性化資源。每一個個性化的 portlet 必須擁有一個使用者資源以及一個或多個內容資源。使用者資源描述目前登入到 Portal 中的使用者的屬性。內容資源描述您想要對其進行 個人化的內容的屬性。個性化規則使用該訊息將正確的內容與正確的使用者相匹配。確保個人化Wizards 出現在 Portlet Application Developer 視景中
如果您在 Application Developer 工具列中沒有看到 Content Spot Wizard、Content Wizard 以及 User Wizard,您可以透過完成下列步驟來加入它們。請參見下面的圖 5 來看看這些圖示是什麼樣子。
- 選擇 Perspective => Customize。
- 展開 Other 文件夾,如圖 4 所示,然後選擇個人化Wizards 核取方塊。
圖 4. 將個人化Wizards 新增到您的透視景
建立使用者資源
- 在 source 文件夾下建立一個名為
PersSamplePortlet
的文件夾。 - 突顯 PersSamplePortlet 文件夾,然後選擇 User Wizard 圖示,如圖 5 所示。
圖 5. 啟動 User Resource Wizard
- Personalization User Wizard 的第一個螢幕開啟了。在 Protocol 欄位中選擇 Database (SQL)。在 Database URL 中輸入
jdbc:db2:sample
。在 User ID 欄位中輸入wsdemo
,然後在 Password 欄位中輸入wsdemo1
。請確保選擇了 IBM DB2 UDB local 作為 Driver identifier 並接受所有其它的 預設值。接著,按一下 Connect。請參見圖 6。
圖 6. User Wizard Logon 頁面
- 當連線成功完成時,出現了一組新的筆記本頁籤。
- 按一下 Tables 頁籤。從左側列出的 Availabel tables 中選擇 CUSTOMER 表,然後按 > 按鈕將它新增到 Selected tables 清單中。這是用於使用者資源的主表(primary table)。
圖 7. User Wizard Tables 頁籤視景
- 按一下 Next 轉向 Columns 頁面。
- 按一下 Columns 頁面上的 >> 按鈕,選擇這個表中的所有列。如果這個表有許多列,您將可以選擇您要選擇哪 幾列。只有當您需要編寫規則來使用特定的一列的值來決定哪幾行應該是結果設定的一部分時,或者只有當您需要將一列作為結果設定中的若干行的一部分顯示時,才進行選擇。
- 按一下 Finish 頁籤。請注意精靈產生的資源文件的名稱。
- 按一下 Finish 按鈕。
圖 8 突顯了 User Wizard 產生的所有文件。請注意,這些資源文件被編譯且被放在專案中適當的目錄下。
圖 8. User Wizard 輸出
建立內容資源
要使用 Conetent Wizard 建立內容資源,請完成與您用來建立使用者資源相同的步驟。在工具列中選擇 Content Wizard 來啟動精靈(要找到正確的圖示,請將您的游標停在圖示上看看懸浮的註解文字)。請確保您選擇了 Customernews 表作為您的內容資源。圖 9 顯示了 Content Wizard 產生的文件。
圖 9. Content Wizard 輸出
獲取 LDAP 使用者識別資料的簡短形式
一旦 Application Developer Wizards 已經為資源產生了 Java 文件,您必須作一些小小的修改。當和 Portal 一起使用個人化並且啟用安全性時,這個步驟是必要的。當您在 Portal 之外使用個人化時,您要負責透過在個人化上下文中設定 pzn.userName
來告訴個人化執行時誰是目前使用者。然而,當啟用了安全性時,
個人化
執行時不使用 pzn.UserName
。相反,使用者名稱是從 LDAP 獲得的。遺憾的是,這個值是遵循 LDAP 的識別名(Distinguished Name,DN)語法的完整使用者識別資料。例如,該名稱的格式將為 user:foosball.raleigh.ibm.com:389/uid=user1,cn=users,dc=raleigh,dc=ibm,dc=com
。要識別資料目前使用者,
個人化
執行時只需要使用者識別資料,在這個例子中使用者識別資料為 user1
。因此,您需要刪除所有額外的訊息,否則個人化執行時將永遠不能為這個使用者識別資料獲得匹配。為此,您可以編寫一個轉換程式類並透過資源控制台註冊它;就這個樣本的目的而言,我們將採取一種捷徑並以一種不同的方式實作︰
-
將下面的方法新增到
CustomerManager.java
文件︰/* translateAuthID removes all the extra stuff that gets attached as part of the dn */ public String translateAuthID (String name) { /**** if ldap, set to uid ****/ /***** find uid= *******/ System.out.println("The name that has been passed is : " + name); String delim = new String("uid="); int x = name.indexOf(delim); /****** find comma **********/ String comma = new String(","); int y = name.indexOf(comma, x); /******* get uid *********/ if ((x >= 0) && (y>=0) ) name = name.substring(x+4,y); System.out.println("*** new name = " + name); return name; }
您可以看到,上面的方法完全刪除了使用者識別資料中包括的額外字元,然後以個人化執行時所需的格式返回名稱。
- 接下來,在
CustomerManager.java
中更新 public Resource findById(String name, ResourceContext context) 方法以呼叫上面的方法。
在try block
前面加入下列程式碼︰// Changes needed to strip out the extra ldap stuff System.out.println( "NAME needed to convert : " + name); String translatedName = translateAuthID(name); System.out.println("Translated Name: " + translatedName); name = translatedName; // End of changes
System.out.println 不是必需的,但是加入它們將幫助您透過看日誌文件中所顯示的內容來理解您的程式碼是否正在工作。
建立內容點
既然您已經定義了一些資源,那麼您就可以使用 Application Developer Personalization Content Spot Wizard 建立內容點。請注意︰要建立內容點,首先您必須建立資源(您已經做過了),因為您必須定義將用什麼類型的內容 填入內容點。- 選擇 PersSamplePortlet 文件夾,然後選擇 Content Spot Wizard 圖示。
圖 10. 啟動 Content Spot Wizard
- 在 Content Spot Wizard 中按一下 Rule Type 頁籤。輸入
getCurrentUserSpot
作為 Content Spot Java Bean 的名稱。在下拉選單中選擇 PersSamplePortlet.Customer。請參見圖 11。
圖 11. 完成 Content Spot Wizard
- 按一下 Next,然後按一下 Finish 按鈕。精靈為內容點產生 Java bean 封裝函式。
- 完成相同的步驟以建立另一個內容點。將這個內容點命名為
getCustomernews
,然後選擇 PersSamplePortlet.Customernews 作為返回類型。
getCurrentUserSpot
和
getCustomernewsSpot
。
將內容點新增到 JSP 文件
現在,將您在前面的步驟中建立的內容點新增到 View JSP 文件,然後加入 程式碼來參照您想顯示的內容點中的欄位。- 巡覽到
View.jsp
文件(請參見圖 12),然後按二下文件,在 JSP Editor 中開啟它。
圖 12. 巡覽到 View.jsp 文件
- 按一下 Design 頁籤,然後刪除所有現有內容。
- 在 Navigator 視窗中選擇 getCurrentUser.class,按住滑鼠左鍵,將文件拖移到
View.jsp
編輯視窗的頂部,然後將文件放在此處。一個 Attributes 的視窗開啟。按一下 OK,接受預設值。 - 完成同樣的步驟,拖動
getCustomernews.class
並將其放在 JSP 上。 - 按一下編輯視窗中的 Source 頁籤,檢視當您把內容點類文件放在 JSP 中時產生的
useBean
標 籤。 - 如下所示修改
useBean
宣告(請注意,將 "結束的/
"從useBean
標籤中移除,且用</useBean>
標籤代替,對每一個 bean 宣告都如此)︰
您的 JSP 頁面中原來的宣告看上去如下所示︰<jsp:useBean class="PersSamplePortlet.getCurrentUserSpot" id="getCurrentUserSpot"/> <jsp:useBean class="PersSamplePortlet.getCustomernewsSpot" id="getCustomernewsSpot"/>
將上面幾行的內容變更為如下所示︰<jsp:useBean class="PersSamplePortlet.getCurrentUserSpot" id="getCurrentUserSpot"> <% getCurrentUserSpot.setRequest(request); %>
</jsp:useBean>
<jsp:useBean class="PersSamplePortlet.getCustomernewsSpot" id="getCustomernewsSpot">
<% getCustomernewsSpot.setRequest(request); %> </jsp:useBean>
上面的變更是您新增到頁面以連結到 WebSphere Personalization 執行時的每個內容點所必需的。
向 JSP 加入程式碼以植入內容點
現在,使用 JSP Editor 將兩個表新增到 JSP。這兩個表最終將按照一條規則填入內容。就現在來說,您將把每個表與一個內容點相關聯。實質上來說,這是將一個資源和每個表聯繫在一起。建立一個表以顯示使用者訊息
- 按一下 JSP Editor 中的 Design 頁籤。
- 選擇 Insert => Table 來建立一個新表。指定 2 行和 1 列,然後按一下 OK 關閉對話方塊。
- 接下來,按二下表以啟動它的 Attributes 對話方塊。
- 按一下 Dynamic 頁籤。當您完成這一步后,請參見圖 13。
- 選擇 Loop 核取方塊。
- 為 Start 行指定
1
,為 End 行指定2
。 - 選擇 Browse 按鈕以啟動 Bean Property Selection 對話方塊。
- 選擇 getCurrentUserSpot.ruleContent[],然後按一下 OK。
- 按一下 Attributes 對話方塊上的 OK 關閉該對話方塊。
圖 13. Bean Attributes 對話方塊和 Bean Property Selection 對話方塊
- 在前一步中,資源已經與表相關聯。現在,指定要用資源的哪些屬性或哪些列植入表中。選擇表的第一行,輸入
"You are logged in as:"
。 - 將游標停在純文字的右側,選擇 Insert => Dynamic Elements => Property Display。
- 在 Attributes 對話方塊中選擇 Browse 以啟動 Bean Property Selection 對話方塊。
- 這次,選擇 USERID 屬性,然後按一下每個對話方塊上的 OK,關閉這些對話方塊。
- 選擇這個表上的第二行,輸入
"Your account balance is:"
。 - 完成和上面相同的步驟,但是這次選擇 Balance 屬性。
建立一個表以顯示個性化的新聞
- 透過將第二個表新增到該頁面來完成
View.jsp
。完成前面一部分中的第 2 步到第 4 步,但是這次將 start 行和 end 行都指定為2
,並將 loop property 設定為getCustomernewsSpot.ruleContent[]
。請參見圖 14。
圖 14. 第二個表的 Bean Property Selection 對話方塊
- 當您完成了 Bean Property 對話方塊之後,突顯表的第一行,然後輸入「
Here is your personalized news...
」。 - 第二行將包括被返回的新聞項目。在第一步中,您在這一行上建立了一個循環,所以將為執行時返回的每個新聞項目產生一行。突顯第二行,然後選擇 Insert => Dynamic Elements => Property Display。
- 在 Bean Property Selection 對話方塊中選擇 CONTENT 屬性,然後按一下 OK。請參見圖 15。
圖 15. 選擇要在表中顯示的內容
- 按 CTRL-S 儲存
view.jsp
。
發佈個人化資源類別
既然我們已經建立了我們的資源和內容點,那麼我們就需要建立一些規則來 填入內容點。在做這項工作之前,您必須使個人化執行時知道這些資源。請使用個性化資源控制台(Personalization Resource Console)來完成這項工作。請注意,您還可以透過在 Application Developer 中定義 Publish Server 來達到相同的目的,然後用它 發佈這些資源。首先,從 Application Developer 中匯出資源和內容點︰-
選擇 File => Export => File System。
- 選擇匯出下列內容(請參見下面的圖 16 和圖 17)︰
-
整個
PersSamplePortletHome/webApplication/WEB-INF/classes/PersSamplePortlet
文件夾。 -
整個
PersSamplePortletHome/webApplication/resources/PersSamplePortlet
文件夾。
-
-
對於匯入目的地目錄,請輸入
D:/WebSphere/AppServer/installedApps/Personalization_Runtime.ear/PersAdmin.war/WEB-INF/classes
,其中的D:/
是安裝了 WebSphere Application Server 的磁碟機。 -
按一下 Finish,如果提示建立類別目錄,則選擇 Yes。
圖 16. 匯出資源
圖 17. 指定匯出目錄 -
接下來,請確保 WebSphere Portal 正在執行。如果 WebSphere Portal 沒在執行,那麼請從 Services 視窗啟動 WebSphere,啟動 WebSphere 管理控制台(WebSphere Administrative Console),並且要確保在進行到下一個步驟前 Portal Application Server 一直執行。
-
在瀏覽器視窗的位址欄位中輸入
http://localhost/wps/PersAdmin/adminframe.jsp
以開啟個性化資源控制台。請用 完整主機名稱代替本地主機。如果提示需要使用者識別資料和密碼,請分別輸入wpsadmin
和wpsadmin
。 -
在 Resource Hierarchies 頁籤視景上按一下 Import。
-
輸入文件名稱
D:/WebSphere/AppServer/installedApps/Personalization_Runtime.ear/PersAdmin.war/WEB-INF/classes/resources/PersSamplePortlet/Customer.hrf
,然後按一下 Import。同樣,D:/
表示安裝了 WebSphereApplication Server 的磁碟機。 -
這次透過指向
Customernews.hrf
文件重複前面的步驟以匯入Customernews
。透過轉向 Resource Collections 頁籤視景來驗證資源是否已被匯入。現在,資源出現在 Collections 下拉清單中。
圖 18.個人化資源控制台
建立 News個人化工作區專案
現在,在個人化工作區中建立一個專案,您可以使用規則編輯器在 個人化 工作區中定義您的規則。首先,加入一個定義了要將您的規則 發佈到何處的發佈伺服器,然後您將建立您的專案。-
要啟動 個人化 工作區,請在瀏覽器中輸入
http://localhost/wps/PersWorkspace/index.jsp
。請記住用 完整主機名稱代替本地主機。 -
以使用者識別資料
wpsadmin
和密碼wpsadmin
或使用者識別資料wpsbind
和密碼wpsbind
登入到工作區。 -
按一下 Global Settings。這就啟動了個人化Global Settings 視窗。
圖 19. 個人化 工作區 -
選擇 Manage Publish Servers,然後按住右側的 + 按鈕以加入一個新的發佈伺服器。
圖 20.個人化工作區 global settings -
輸入發佈伺服器的值,如圖 21 所示,然後按一下 Save。請不要選擇 Requires authentication 核取方塊,如果 portal 中沒有啟用安全性,請不要輸入使用者識別資料和密碼。
圖 21. Add Publish Server 對話方塊 -
接下來,建立專案。選擇 Manage Projects,然後按住 + 開始建立專案的過程。在 Add Project 對話方塊中選擇 Create new,在 Project Path 欄位中輸入
D:/PersSamplePortlet
,然後在 Project Name 欄位中輸入PersSamplePortlet
(請參見圖 22)。然後,按 OK。
圖 22. Add Project 對話方塊 - Edit Project 對話方塊現在開啟了(請參見圖 23)。
圖 23. Edit Project 對話方塊
完成如下所示的步驟(確保 軟體中的 磁碟機代號反映在您系統上的實際位置)︰- 在 Campaign Path 欄位中輸入
D:/PersSamplePortlet
。 - 在 Rule Paths 欄位中輸入
D:/PersSamplePortlet/Rules
。 - 在 Resource Paths 欄位中輸入
D:/WebSphere/AppServer/installedApps/Personalization_Runtime.ear/PersAdmin.war/WEB-INF/classes/resources/PersSamplePortlet
。請注意,資源的.hrf
文件駐留在此處。 - 在 Resource and Content Spot Class Path 欄位中輸入
D:/WebSphere/AppServer/installedApps/Personalization_Runtime.ear/PersAdmin.war/WEB-INF/classes
。請注意,資源介面類 別的套件文件夾駐留在此處。 - 至此,您不需要預覽 JSP 頁面,所以不要填寫與 Preview 有關的欄位。我們將在將來的一篇文章中介紹預覽這個主題。
- 按一下 Save 離開對話方塊。
- 在 Campaign Path 欄位中輸入
- 最後,按下 Make Current,為這個使用者活化該專案。
圖 24. 完成個人化Global Settings
建立個人化規則
現在,我們將建立三種規則類型︰-
分類器規則︰我們將建立
UserLevel
分類器規則,它根據使用者賬戶上的餘額對使用者進行分類。 -
作業規則︰我們將建立六條作業規則,第一筆是
GetCurrentUser
,它獲取有關目前使用者的訊息。其餘五條作業規則根據它們適合的使用者等級別獲取新聞項目。 -
繫結規則︰我們將建立
GetCustomerNews
繫結規則,它將分類器規則和作業規則聯繫在一起。
建立 UserLevel 分類器規則
-
按一下 Rule Composer 頁籤。請確保在下拉選單中選擇了 Classifiers,然後按住 +,在 rule composer 中建立一條新規則(請參見圖 25)。
圖 25. 呼叫 Rule Composer 來建立規則 -
將分類器命名為
UserLevel
。請注意,規則主要部分中可編輯的欄位都是超連結。您只需要一次選擇一個超連結,然後填寫結果對話方塊就可以了。 -
按一下規則 主要部分 中的 Classification,然後將這個分類命名為
Basic
。 -
按一下 Resource.Attribute,並選擇 current Customer 資源單選按鈕和 BALANCE 屬性單選按鈕,如下圖 26 所示。
圖 26. 選擇一個資源及其屬性 -
選擇 is equal to,然後將它變更為 is less than or equal to。
-
選擇 value,然後輸入
100
。 -
繼續加入分類,直到規則看上去像下面的圖 27 為止。當您需要為一個分類加入不止一個條件時,請選擇 add Condition。當您做完這一切的時候,按一下 Save。
圖 27. 最終的 UserLevel 分類器規則
建立 GetCurrentUser 作業規則
-
確保在下拉選單中選擇了 Actions,然後按住 + 建立第一筆作業規則。將其命名為
GetCurrentUser
。 -
請注意,在圖 28 中,您需要選擇 Specify another attribute 單選按鈕,然後在設定 value 欄位時按 Browse。當您儲存了這個值的時候,它將從
Customer.USERID
變更為current Customer.USERID
。
圖 28. 建立 GetCurrentUser
圖 29 顯示了完成時的規則
圖 29. 最終的 GetCurrentUserRule
建立 GetBasicNews 作業規則
-
按 + 建立下一筆規則。將其命名為
GetBasicNews
。 - 建立
GetBasicNews
作業規則,這樣它 類似於 圖 30 所示。對於這條規則以及其餘的作業規則,您需要在設定 value 欄位時選擇 Specify a value of type Text 單選按鈕。
圖 30. 最終的 GetBasicNews
建立餘下的四條作業規則
建立餘下的四條作業規則︰GetAdvantageNews
、GetAllNews
、GetPreferredNews
和 GetPremiumNews
。完成與您用來建立 GetBasicNews
相同的步驟。例如,對於 GetPreferredNews
規則,選擇層級被設定為 preferred
的內容。
圖 31. 作業規則
建立 GetCustomerNews 繫結規則
在這規則中,您將使分類器規則和您在前面的步驟中建立的作業相關聯︰
-
確保在規則類型的下拉選單中選擇了 Bindings,按 + 啟動規則編輯器。將規則命名為
GetCustomerNews
。 -
當您按一下 Classifier 時,將出現可用的分類器清單。在我們的例子中,我們只定義了一個分類器。選擇 UserLevel
分類器。
圖 32. 在一繫結規則中選擇一個分類器 -
當您按一下 Classification 時,出現在您面前的是為您在前面的步驟中已經選擇的分類器定義的分類清單。
圖 33. 選擇一個分類 -
同樣地,按一下 do Action 以看到您已經定義的所有作業規則的清單。選擇最適用您正在處理的分類的作業規則。
-
完成
GetCustomerNews
繫結規則,如下所示︰
圖 34. GetCustomerNews 繫結規則
將規則與內容點相關聯
現在,將您剛剛建立的規則與您在前面早些時候建立的內容點相關聯︰-
按一下工作區中的 Campaign Manager 頁籤。
-
選擇左側的 Normal View。它顯示了這個專案中的內容點清單。請注意,Rule 列中所有的項目均為空。
-
按一下 Rule 列中的 empty 連結,並且從可應用的規則清單中選擇一條規則,為每個內容點指派一條規則。使用圖 35 和圖 36 作為指導。
圖 35. 選擇了 GetCurrentUser 規則的 Fill Content Spot 對話方塊
圖 36. 將規則指派給內容點之後的視景
發佈個人化專案
既然您已經定義了所有的規則並且將它們指派給了內容點,那麼您就可以 發佈專案了。這使規則對於個人化執行時來說是可 利用的。-
選擇 Global Settings。
-
選擇 Publish Files。
-
請確保選擇了 PersPortletServer,然後按 Publish。
從 Application Developer 中匯出 WAR 文件
至此,您已經完成了所有個人化元件的建立,並且為匯出您的 portlet 做好了準備。返回 Application Developer 匯出 portlet。-
在 Application Developer 中右鍵按一下 PersSamplePortletHome,然後選擇 Export WAR。
圖 37. 匯出 WAR 文件 -
選擇您想要將 WAR 匯出到的位置,然後按一下 Finish。
圖 38. 匯出 WAR 文件的詳細情況
在 WebSphere Portal 中部署並測試 portlet
-
要在 WebSphere Portal 上部署 portlet,請在瀏覽器視窗中輸入
http://<YourFullyQualifiedHostName>/wps/myportal
。 -
以使用者識別資料
wpsadmin
和密碼wpsadmin
登入。 -
接著,安裝您的 portlet。在 Portal Administration 群組中按一下 Install Portlets 頁籤,然後按提示進行。
-
將 portlet 新增到您選擇的頁面。
-
在 Work with Pages 組中按一下 Edit Layout and Content 頁籤。
-
按一下 Get Portlets。
-
在 Name Contains 欄位中輸入
Pers
,然後按一下 Go。 -
接著 按一下 您的 portlet 的 plus 圖示,以便將這個 portlet 新增到 Portlet 清單,然後按一下 OK。
-
選擇 portlet,然後按一下 Add portlet to container 圖示。
-
按一下 Activate 活化頁面。
-
-
在 Portal Administration 群組中按一下 Security 頁籤 。在這個頁面上,授予 portlet 對所有已驗證的使用者的視景存取權。
-
現在,您為測試您的個性化的 portlet 做好了準備。在您對其進行測試前,請確保您分別註冊了三個使用者識別資料
user1
、user2
和user3
以及密碼user1
、user2
和user3
。 -
接下來,用使用者識別資料
user1
登入到 portal 。 -
選擇您加入了 portlet 的頁面組和頁面。下面的頁面將開啟,這個頁面顯示了
PersSamplePortlet
的詳細資訊︰
圖 39. user1 的 portlet 輸出 -
接下來,以
user2
登入。請注意,user2
的餘額為1002
,所以被歸為preferred
。因此,user2
會看到與 preferred 客戶有關的新聞。
圖 40. user2 的 portlet 輸出
結論
在本文中,我們演示了如何開發一個簡單個性化的 portlet。具體來說就是,我們向您展示了如何使用 WebSphere Portal Toolkit 以及如何從 LDAP 中取 得使用者識別資料的簡短形式;這些主題對於使用 WebSphere Portal 和 WebSphere Personalization來說是唯一的。我們在將來的文章中將探討更進階的主題。
相關參考資料
- WebSphere個人化訊 息中心。為 Personalization 資訊提供快速、集中的資訊。
- WebSphere Portal 訊 息中心。為 Portal 資訊提供快速、集中的資訊。
- Portlet Catalog。數以百計的 portlet 供您下載和評 鑑。
- WebSphere Studio Application Developer Portal Toolkit Help 文件(請從 Application Developer Help Perspective 中選擇 Portlet developer documentation)。
- 對一些訊息中心的更新。
- Pike 和 Melissa。WebSphere Personalization 4.0︰使用 WebSphere Studio Application Developer Wizards。IBM WebSphere 開發者技術期刊。2002 年 5 月。