跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

构建 CEI 应用程序用于测试事件选择器和事件群

Naveen Sachdeva, 咨询软件工程师, IBM
Naveen Sachdeva 是 IBM Application Integration Middleware 开发小组 WebSphere Competency Center 的一名咨询软件工程师。他在大规模系统集成以及分布式计算系统的设计和开发方面有超过 10 年的经验。目前他使用 IBM 产品帮助业务伙伴从事技术实现和提供概念验证。

简介: 学习如何构建基于公共事件基础架构(Common Event Infrastructure,CEI)的应用程序用于测试事件群和事件选择器。作者提出这种称为 EventTester 的应用程序,然后向您展示了将事件访问接口用于基于指定的事件选择器和事件群来查询历史事件。本文向您展示了如何为基于业务流程执行语言(Business Process Execution Language,BPEL)的标有“Business Relevant”的流程创建事件选择器。

发布日期: 2005 年 4 月 01 日
级别: 初级
访问情况 : 1174 次浏览
评论: 


引言

CEI 为您提供了可以用来查询历史事件的事件访问接口。为了查询事件,您需要指定一个事件群,并且随意指定一个事件选择器(请见侧栏的事件选择器和事件群来获取更多信息)。CEI 包括了应用程序——CBEViewer——您可以用于查询基于指定事件群的事件。但是在您创建事件群之前,需要测试相应的事件选择器。除此之外,您也可以在使用这样的组合代码之前与事件群一起测试事件选择器。本文提出了应用程序——EventTester——您可以利用它来测试事件选择器、事件群以及使用事件选择器的事件群。本文同时也向您展示了如何使用该应用程序与 CBEViewer 应用程序的组合来创建事件选择器。


事件访问(Event Access)接口

CEI 支持 XPath 语法的子集来进行事件查询。您可以使用事件访问接口来查询事件,该接口是由 EventAccess 会话 bean 实现。您可以使用相应的本机接口来创建 EventAccess bean 实例,如清单 1 所示。


清单 1.创建 EventAccess bean 的实例
				
// use home interface to create remote event access bean
InitialContext context = new InitialContext();
Object eventAccessHomeObj = 
context.lookup("ejb/com/ibm/events/access/EventAccess");
EventAccessHome eventAccessHome = (EventAccessHome)
  PortableRemoteObject.narrow(eventAccessHomeObj,
                              EventAccessHome.class);
eventAccess = (EventAccess) eventAccessHome.create();
			

事件选择器和事件群

事件选择器是一种常规表达式,它定义了一组基于这些事件的特性数据(属性或者子元素)的事件。例如,事件选择器可能指定了来自一个特殊主机的所有的事件,该主机带有超过 30 个(警告信息)的安全规定。由于该 CBE 规范是基于 XML 的,所以使用 XPath 语法子集(有关 XPath 限定的详细信息请参考参考资料部分中的 WebSphere Business Integration Server Foundation 信息中心——编写事件选择器)来编写事件选择器。

Event Access 接口支持以下的查询事件的方法:

  • 全局实例标识符——使用它的可以用作主关键字的 globalInstandId 事件特性来获取事件。

CommonBaseEvent event = eventAccess.queryEventByGlobalInstanceId(eventId);

  • 事件群——检索属于指定事件群的事件并且使用事件选择器来(随意地)匹配指定的标准。使用 ascendingOrder 参数按照事件创建的时间以升序或者降序的方式命令事件。maxEvent 参数用于指定从事件查询返回的事件的最大数目。

CommonBaseEvent[] events = eventAccess.queryEventsByEventGroup(eventGroup, eventSelector,

  • 关联类型——通过 associationType 检索相关的事件来获取给定的事件。事件可以有其它相关的或者关联的事件。关联类型属性定义了关系类型,例如:containsclearedcausedBymultiPart 或者 correlated

CommonBaseEvent[] events = eventAccess.queryEventsByAssocation(associationType, eventId);


EventTester 应用程序

EventTester 应用程序是一个基于事件访问接口的应用程序,您可以使用它来测试事件选择器和事件群。在下载(Download)部分中有可用的完整代码(单击本文顶部或者底部的 code 图标来下载代码)。图 1 展示了用于该应用程序的图形用户接口。给定事件群及事件选择器,此应用程序将返回相应的事件。您也可以通过使用事件群的缺省值或者 All events 来分别测试事件选择器。类似地,您可以通过使用事件选择器的缺省值或者 CommonBaseEvent[@globalInstanceId] 来分别测试事件群。 这些事件以表格的格式显示,每行代表了一个事件。


图 1. 事件测试器(Event Tester)应用程序
事件测试器(Event Tester)应用程序

该应用程序包括了一个 Java Server Page(JSP)和一个 servlet。清单 2清单 3(侧面的文件中显示了代码清单)分别显示了该应用程序的 JSP 和 servlet 代码。JSP 提供了该应用程序的前端部分。当您单击 Display Events 按钮时,它调用了 DisplayEvents servlet。该 servlet 使用事件访问接口来查询事件,并且将结果提交给 JSP。然后该 JSP 编排这些事件,并将它们显示给用户。为了编排这些事件,JSP 假定这些事件是 CBE 版本 1.0.1 的(有关 CBE 的详细信息,请参考参考资料部分中的使用通用基础事件(Common Base Event)模型来标准化消息)。


使用 EventTester 应用程序

您可以通过或者不通过 CBEViewer 应用程序来使用 EventTester 应用程序。因为 CBEViewer 有一个更好的用户接口和过滤机制,所以我建议通过利用 CBEViewer 应用程序来使用 EventTester 应用程序。您可以首先使用 CBEViewer 来查询所有的事件(使用 All Events 事件群)并了解您所感兴趣的事件的结构或者模式,然后创建相应的 XPath 查询,并使用 EventTester 应用程序对其进行测试。

例如,假设您有一个名为 MileStoneManager 的流程,标有“BusinessRelevant”;换句话说,无论在它启动或者停止的时候都会发出事件,并且您对查询所有的启动事件和相关的停止事件感兴趣。为了理解这些事件的结构,您使用 CBEViewer 应用程序。图 2 显示了 CBEViewer 中所需的事件,并且图 3图 4 显示了它们的详细信息。从启动事件的详细信息中,您可以看到该事件的 extensionName 是“WPC:ProcessInstanceEvent”。它有一个名为“processTemplateName”的 extendedDataElement,它显示了该事件是由 MileStoneManager 发出的,而且该情形下的 categoryName 是“StartSituation”,这表明了该事件是在流程启动时发出。与之类似,从停止事件的详细信息中,您可以查看到该事件的 extensionName 也是“WPC:ProcessInstanceEvent”。它没有任何字段表明该事件是由 MileStoneManager 发出的,但是它的 contextDataElement 与启动事件的 contextDataElement 相同,并且该情形的 categoryName 是“StopSituation”。


图 2. CBEViewer 应用程序
CBEViewer 应用程序

以下是有关 MileStoneManager 启动事件的详细信息:


表 1. MileStoneManager 启动事件的详细信息
名称
版本-1.0.1
globalInstanceIdCEC05DB5C52F6E90339824ECD0334F11D9
extensionNameWPC:ProcessInstanceEvent
localInstanceId
creationTime2004-11-10T19:34:53.213Z
严格性10
msg
优先权-
sequenceNumber1
repeatCount0
elapsedTime0
ContextDataElement: ECSCurrentID / contextValue_PI:10030100.23fb340d.ac3cd9f6.136200b8
ContextDataElement: ECSParentID / contextValue_PI:10030100.23fb33fe.ac3cd9f6.136200a6
ExtendedDataElement: UsernameUNAUTHENTICATED
ExtendedDataElement: processTemplateNameMileStoneManager
ExtendedDataElement: processTemplateId_PT:90010100.22fcafbd.ac3cd9f6.cfc80161
ExtendedDataElement: processInstanceId_PI:10030100.23fb340d.ac3cd9f6.136200b8
ExtendedDataElement: processInstanceExecutionState2 - STATE_RUNNING
ExtendedDataElement: processTemplateValidFromWed 2003-01-01 00:00:00.000
reporterComponentId
sourceComponentId / componentWBI-SF#Platform 5.1 [BASE 5.1.1 a0426.01] [JDK 1.4.1 ${build.level}] [PME 5.1.1 o0429.02]
sourceComponentId / subComponentWPC
sourceComponentId / componentIdTypeProductName
sourceComponentId / instanceIdlocalhost\localhost\server1
sourceComponentId / application
sourceComponentId / executionEnvironmentWindows 2000[x86]#5.0
sourceComponentId / locationnaveen.transarc.ibm.com
sourceComponentId / locationTypeHostname
sourceComponentId / processId1520
sourceComponentId / threadIdServlet.Engine.Transports : 0
sourceComponentId / componentTypehttp://www.ibm.com/namespaces/autonomic/Workflow_Engine
msgDataElement
situation / categoryNameStartSituation
situation / situationType / reasoningScopeEXTERNAL
situation / StartSituation / successDispositionSUCCESSFUL
situation / StartSituation / situationQualifierSTART_COMPLETED

以下表格概述了 MileStoneManager 停止事件的详细信息:


表 2. MileStoneManager 中止事件的详细信息
名称
版本1.0.1
globalInstanceIdCEC05DB5C52F6E9033D38E4690334F11D9
extensionNameWPC:ProcessInstanceEvent
localInstanceId
creationTime2004-11-10T19:36:32.889Z
安全10
msg
优先权-
sequenceNumber1
repeatCount0
elapsedTime0
ContextDataElement: ECSCurrentID / contextValue_PI:10030100.23fb340d.ac3cd9f6.136200b8
ContextDataElement: ECSParentID / contextValue_PI:10030100.23fb340d.ac3cd9f6.136200b8
ExtendedDataElement: WPCEventCode21004
ExtendedDataElement: processInstanceExecutionState3 - STATE_FINISHED
reporterComponentId
sourceComponentId / componentWBI-SF#Platform 5.1 [BASE 5.1.1 a0426.01] [JDK 1.4.1 ${build.level}] [PME 5.1.1 o0429.02]
sourceComponentId / subComponentWPC
sourceComponentId / componentIdTypeProductName
sourceComponentId / componentIdTypelocalhost\localhost\server1
sourceComponentId / application
sourceComponentId / executionEnvironmentWindows 2000[x86]#5.0
sourceComponentId / locationnaveen.transarc.ibm.com
sourceComponentId / locationTypeHostname
sourceComponentId / processId1520
sourceComponentId / threadIdServlet.Engine.Transports : 0
sourceComponentId / componentTypehttp://www.ibm.com/namespaces/autonomic/Workflow_Engine
msgDataElement
situation / categoryNameStopSituation
situation / situationType / reasoningScopeEXTERNAL
situation / StopSituation / successDispositionSUCCESSFUL
situation / StopSituation / situationQualifierSTOP_COMPLETED

基于这些启动事件的详细信息,您可以创建以下的事件选择器来查询所有的 MileStoneManager 启动事件:

CommonBaseEvent[extensionName='WPC:ProcessInstanceEvent'] 
and extendedDataElement[name='processTemplateName' 
and type='string' and values='MileStoneManager'] 
and situation[categoryName='StartSituation']

您可以使用 EventTester 应用程序测试这个事件选择器,如图 3 所示。此页面显示了基于上面的事件选择器的事件的详细信息。既然您已经验证了该事件选择器可以正常工作,那么就您可以创建相应的事件群——MileStoneManagerStartEventGroup(有关如何创建事件群的详细信息,请参考参考资料部分中的“随需应变的业务流程生命周期,第 8 部分:业务流程监督——创建关键性能指示器”),然后使用 EventTester 应用程序再对其进行测试。


图 3. 测试启动事件选择器
Testing the start event selector

为了查询给定的启动事件的停止事件,您可以使用以下的事件选择器:

CommonBaseEvent[extensionName='WPC:ProcessInstanceEvent' 
and situation[categoryName='StopSituation'] 
and contextDataElements[name='ECSCurrentID' 
and type='ECSID' and values='<start event values>']]

在运行时要指明 <start event values> 的地方(例如 PI:10030100.23fb340d.ac3cd9f6.136200b8)。

因为事件群只能创建成静态事件选择器,所以您不能创建该事件选择器相应的事件群。但是您可以将该事件选择器分为两个事件选择器,如下所示:

  1. CommonBaseEvent[extensionName='WPC:ProcessInstanceEvent' and situation[categoryName='StopSituation']]
  2. CommonBaseEvent[contextDataElements[name='ECSCurrentID' and type='ECSID' and values='<start event values>']]

既然您已经创建了第一个事件选择器相应的 ProcessStopEventGroup,并且利用第二个事件选择器来使用它进行查询合适的停止事件(有关如何创建事件群的详细信息,请参考参考资料部分中的“随需应变的业务流程生命周期,第 8 部分:业务流程监督——创建关键性能指示器”)。但是在您编写相应的代码之前,可以使用 EventTester 应用程序来测试该场景,如图 4 所示。


图 4. 测试停止事件选择器
测试停止事件选择器

结束语

本文中,您学会了如何构建基于 Common Event Infrastructure(CEI)的应用程序用于测试事件群和事件选择器。您也学会了该应用程序如何使用事件访问接口来查询基于指定事件选择器和事件群的历史事件,以及如何为标有“Business Relevant”的流程创建事件选择器。



下载

描述名字大小下载方法
Event tester WAR filews-ceicode.zip9 KBHTTP

关于下载方法的信息


参考资料

关于作者

Naveen Sachdeva 是 IBM Application Integration Middleware 开发小组 WebSphere Competency Center 的一名咨询软件工程师。他在大规模系统集成以及分布式计算系统的设计和开发方面有超过 10 年的经验。目前他使用 IBM 产品帮助业务伙伴从事技术实现和提供概念验证。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=63081
ArticleTitle=构建 CEI 应用程序用于测试事件选择器和事件群
publish-date=04012005
author1-email=sachdeva@us.ibm.com
author1-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。