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而获得更大的业务价值的能力。