http://dev2dev.bea.com.cn/techdoc/wlportal/20030121.html
Event Framework是WebLogic Portal中的運行引擎和框架,它具備使Web站點可以智能的和用戶進行交互的能力,提供了獲取業務相關的交互信息的能力,而且還提供了增加個性化定制業務事件代理的能力。在這個框架中集合進了EventHandlers, EvenetListeners, EventService, Events和自定義JSP標記。
業務方案
使用Event Framework最主要的目的是通過獲得的用戶交互信息智能地來獲取商業價值。用戶交互信息的內容包括用戶瀏覽Web站點時的初始化業務事件的信息,分析用戶交互活動的信息。這每一點都能在商務上幫助了解它們的用戶以及增加潛在的在線收益。
Event Framework
Event Framework是一個可配置的框架,它實現J2EE的設計模式,并且通過XML配置文件允許自定義組件的簡單合并。Event Framework框架中的主要部分是EventService EJB, EventHandler 類型,EvenetListener 類型,異步傳送機制,Event 類型, 以及JSP 標記庫(參看圖1)。
事件JSP標記或servlet生命周期事件將使用Event通知調用EventService;然后EventService分派Event 到EventHandler;EventHandler會請求已經注冊的EventListener來處理Event;EventListener將執行一些業務處理,或是可以通過請求EventProcessor一塊完成這些處理;最后,EventProcessor可以用于完成一些附加處理,包括調用WebLogic Portal的服務和WebLogic Portal的Framework(參看圖 2)。
EVENTSERVICE
EventService是一個無狀態會話EJB,它實現了“Session Facade” J2EE設計模式。EventService的最主要責任是封裝業務處理過程,這些業務處理過程用于實現為事件JSP標記調用或是為一個servlet生命周期事件所必須的行為。如同圖2中所顯示的,EventService從事件JSP標記接收到事件,并請求同步和異步的EventHandler來分派事件到已經注冊了的同步和異步的Event Listener。在每種事件類型的分派期間和分派后期都沒有返回值,因此為了能夠處理所有業務過程中的錯誤我們需要拋出并捕捉例外。
圖 1 高級Event Framework結構
圖 2 高級Event Framework順序圖
標準EVENTS
Events是實現了“State” J2EE設計模式的Java類。Events對象的主要責任是封裝事件信息,它特定于每種事件類型。WebLogic Portal的不同類型的Events包括Session,User Registration,Product,Content,Cart,Buy,Rules和Campaign Events (參看圖3)。至少,所提供的每種事件包含了以下信息,生成事件的應用名稱,事件的時間,事件的類型,Session ID,用戶ID以及任何其他的Event類型――特殊的信息。
標準EVENTHANDLERS
EventHandlers是Java類,它實現了“Observer” J2EE設計模式的 “Subject” 參與者。EventHandlers(同步和異步的)主要任務是管理所有EventListeners的注冊以及分派事件到每一個已經注冊了的EventListeners上。EventHandlers類將事件同步地傳送到一個已經注冊了的EventListeners上,而AsynchronousEventHandlers則將事件異步地傳送到一個已經注冊了的異步EventListeners上。
標準EVENTLISTENERS
EventListeners是Java類,它實現了“Observer” J2EE設計模式的 “Observer” 參與者。EventListeners的主要任務是對所負責處理的事件執行適當的業務處理過程。EventListeners既可以是同步的也可以是異步的。同步的EventListeners向同步EventHandlers注冊,異步EventListeners向異步EventHandlers注冊。伴隨著產品的不同擁有不同的事件監聽器比如:BehaviorTrackingListener,DebugEventListener,CampaignEventListener,Asynchronous -CampaignEventListener和SessionEventListener(參看圖4)。
自定義EVENTS和EVENTLISTENERS
因為Event Framework被設計成可擴展的,所以為提希望添加他們自定義的Event和EventListener類的用戶供了一些接口。例如,可以創建一個自定義事件來限制一個商務門戶網站上某一引用標記被選擇的頻次。當通過組合經常使用的功能到一個頁面或者將經常使用功能特性組合在一起來的方法可提高Web站點的“膠合性”的時候,捕獲這些信息將能夠獲得更多的價值。
編寫一個自定義Event,開發者必須擴展Event類(參看圖3);增加一個事件類型屬性;添加一個可被單獨傳送到事件監聽器的事件屬性;提供一個將事件屬性作為參數,將事件類型傳送到事件類中,并添加屬性到屬性列表中的構造器。被擴展的事件類提供幫助方法來重新獲得事件的時間戳和類型,并為事件的自定義屬性提供setter和getter方法。
編寫一個自定義EventListener,開發者必須實現EventListener 接口(參看圖4),提供一個默認的構造器,實現getTypes和handleEvent方法,并提供一個需要實現的事件列表。Event Framework在部署和運行階段也提供動態決定一個事件監聽器所相應的事件的能力。這種在許多不同類型的事件和EventListener之間的動態聯接提供了可通過更改配置信息來適應應用變化的能力,因而可以滿足業務變化的需要。
在編譯完自定義Event和EventListener類之后,開發者應該確定將這些文件放置到企業應用的路徑中去。這樣這些自定義Event和EventListener在企業應用系統可為Web應用系統所使用。關于創建和注冊自定義Event和EventListener的更多信息可以在BEA WebLogic Portal在線文檔站點找到(http://edocs.bea.com/wlp/docs70/%20dev/evnttrak.htm#998994 )。
圖3 Event 類圖
圖4 Event Listener 類圖
JSP標記
Event Framework和被終端客戶在瀏覽web站點時所初始化的事件一起工作。為了幫助使用Event Framework的JSP頁面的開發,BEA包括了用于實例化Event并調用Event Framework的自定義JSP標記。這些JSP標記可以用來跟蹤用戶的行為,并用于升級和活動的觸發。
<tr:clickCONTENTEVENT>
當用戶觸發一個ad點擊時,<tr:clickCONTENTEVENT> JSP 標記將產生一個ClickContentEvent事件。這個標記將返回一個包含能夠用于形成一個完整URL的事件參數的URL查詢字符串。這將意味著當添加一個ad點擊事件JSP標記到JSP頁面時,要執行兩步操作。
如下面所顯示的,第一步是添加一個ad點擊事件,為了創建URL查詢字符串,它會執行JSP標記。
<%@ taglibs URI="tracking.tld" prefix="tr" %>
.
.
.
<tr:clickContentEvent
id="urlQuery"
documentId="<%=documentId %>"
documentType="<%=documentType %>"
userId="<%=request.getRemoteUser() %>"
/>
第二步將會把URL查詢字符串添加到將會執行這個事件的超鏈接中。
<% finalURL = "www.bea.com/specials" + "&" + urlQuery; %>
<A HREF="<%= finalURL %>">
這個“id”標記屬性包含由自定義JSP標記返回并用于構造最終URL字符串的URL查詢字符串。
<tr:displayCONTENTEVENT>
當一個ad impression 被顯示給最終用戶時,<tr:DisplayContentEvent>JSP標記將產生一個DisplayContentEvent事件。像下面所顯示的,當給終端用戶顯示的時候,開發者將只包括自定義JSP標記。
<%@ taglibs URI=" tracking.tld" prefix="tr" %>
<%@ taglibs URI=" es.tld" prefix="es" %>
.
.
.
<es:forEachInArray
id="nextRow"
array="<%=ads %>"
type="com.bea.p13n.content.Content">
.
.
.
<tr:displayContentEvent
documentId="<%=documentId %>"
documentType="<%=documentType %>"
/>
.
.
.
</es:forEachInArray>
<tr:clickPRODUCTEVENT>
當用戶點擊一個product標記時,<tr:ClickProductEvent>JSP標記將產生一個ClickProductEvent事件。這個標記將返回一個URL查詢字符串,它包含能夠用于形成一個完整URL的事件參數。像<tr:ClickContentEvent>自定義JSP標記那樣,當添加一個product點擊事件JSP標記到JSP頁面時,<tr:ClickProductEvent>標記也使用一個兩步處理過程。
如下面所顯示的,第一步是添加一個product點擊事件,為了創建URL查詢字符串它會執行JSP標記。
<%@ taglibs URI=" productTracking.tld" prefix="trp" %>
.
.
.
<trp:clickProductEvent
id="urlQuery"
documentId="<%=productId %>"
sku="<%=productSKU %>"
userId="<%=request.getRemoteUser()%>"
/>
第二步會把URL查詢字符串添加到將會執行這個事件的超鏈接中。下面的例子就是做這步的:
<% finalURL = "www.bea.com/productDetails/" + "&" + urlQuery; %>
<A HREF="<%= finalURL %>">
這個“id”標記屬性包含由自定義JSP標記返回并用于構造最終URL字符串的URL查詢字符串。
<tr:displayPRODUCTEVENT>
當一個product標記被顯示給終端用戶時,<tr:DisplayProductEvent>JSP標記將產生一個DisplayProductEvent事件。像下面所顯示的,當將內容顯示給終端用戶時,開發者將只包括自定義JSP標記。
<%@ taglibs URI=" productTracking.tld" prefix="trp" %>
<%@ taglibs URI=" es.tld" prefix="es" %>
.
.
.
<es:forEachInArray
id="nextRow"
array="<%=ads %>"
type="com.bea.p13n.content.Content">
.
.
.
<trp:displayProductEvent
documentId="<%=productId %>"
documentType="<%=documentType %>"
sku="<%=productSKU %>" />
.
.
.
</es:forEachInArray>
結論
Event Framework可以產生追蹤客戶行為并動態執行業務的應用系統。其它的Event Framework 組件包括事件JSP標記,runtime引擎,和一個允許簡單包含Event和EventListener組件的可擴展接口。
從捕獲用戶交互信息而獲得的商業價值其函蓋的范圍包括:從為了增加銷售潛能使系統能夠智能的與客戶交互到能夠提供被用于確定如何增加一個門戶站點的可用性和用戶的滿意度的有價值的信息。包含在BEA WebLogic Portal中的Event Framework還具有通過實現WebLogic portal而獲得更大的業務價值的能力。