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