WebSphere® Integration Developer 和 WebSphere Process Server 将公共事件基础设施(Common Event Infrastructure,CEI)作为提供基本事件管理服务的方法引入。CEI 按照 CBE 规范的定义处理公共基础事件(Common Base Event,CBE)。CEI 提供基于标准 XML 的事件格式,从而支持采用通用机制来记录和查询事件。在 WebSphere Integration Developer 内置 CEI 支持,可生成 CBE 事件。例如,可以选择业务流程执行语言(Business Process Execution Language,BPEL)活动,并随后选择一个活动开始或活动停止事件,而这将自动生成 CBE。不过,您可能需要生成与 WebSphere Integration Developer 事件不对应的业务级别事件。可以使用业务流程引擎(Business Process Engine,BPE)API 进行此工作。不过,由于此 API 公开 CBE 格式以及其他 CEI 特定的属性,API 相关的部分包含在一个很方便使用的构件集中,此构件集支持对事件进行日志记录、查询和查看。本文将对这些构件进行说明,并将介绍如何在组合应用程序中使用它们。
为了对组合应用程序进行测量,您需要捕获业务级别事件。业务级别事件是捕获与业务相关的信息的事件。例如,当银行资金从一个账户转帐到另一个账户时,会记录一个事件。业务级别事件可帮助我们理解和改进企业开展业务的方式。记录了业务事件后,可以对其进行聚合,以确定业务趋势,从而反过来提供所需的测量结果来提高业务。不过,业务级别事件并不一定与任何具体 WebSphere Integration Developer 活动相关。WebSphere Integration 活动可以与一系列 WebSphere Integration Developer 步骤相对应。图 2 显示了一些典型的 WebSphere Integration Developer 活动。业务级别的事件可以与一系列 WebSphere Integration Developer 活动相对应。
完全可测量的另一个要求是,能够在事件中保存任意数据。此任意数据在业务级别具有意义。CBE 规范支持使用 CBE 的 ExtendedDataElement 部分来保存任意数据。此部分将应用程序特定的数据格式化为一组名称-值对。
每种可监视组件类型(如业务流程、业务规则等等)都具有一组在 WebSphere Integration Developer 中预先定义的业务事件(请参见表 1)。不过,有时候这些预定义的事件并不提供生成业务级别事件所需的灵活性。因此,为了给组合应用程序提供完全可测量的能力,需要随时生成业务级别事件。
编辑器 | 可监视元素 |
---|---|
Assembly editor(仅 CEI) | Operation |
Business process editor(CEI 和 Audit Log) | Assign、 Compensate、Empty、Flow(并行活动)、Invoke、Pick(接收选择)、Process、Receive、Reply、 Rethrow、Scope、Script、Sequence、Staff、Switch(选择)、Template(未显示)、Terminate、 Throw、Variable、Wait、While(While 循环) |
Business object-mapping editor(仅 CEI) | Map、Transformation(所有类型) |
Business rule-group editor(仅 CEI) | Operation |
Business state machine editor(仅 CEI) | Action、Entry、Exit、Guard、State、State Machine Definition(状态机)、Timer、Transition |
Human task editor(CEI 和审核日志) | Escalation、Task、Task Template(未显示) |
Interface-mapping editor(仅 CEI) | Operation Binding、Parameter mediation(所有类型) |
Selector editor(仅 CEI) | Operation |
注意:在表 1 中,标识为审核日志 事件是在流程编排器数据库中作为审核事件生成的。标识为 CEI 的事件是在 CEI 数据存储库中生成的。
活动 | 缺省事件名 |
---|---|
Invoke | Completion forced、Entry、Exit、Expired、Failed、Retry forced、Skipped、Stopped、Terminated |
Process | Compensated、 Compensating、Compensation failed、Correlation、Deleted、Entry、Event handler escalated、Event received、Exit、Failed、Failing、Restarted、Resumed、Suspended、Terminated、 Terminating、Work item created、Work item deleted、Work item transferred |
Receive | Entry、Exit、Terminated |
Reply | Exit、Failed、Skipped |
Scope | Compensated、Compensating、Compensation failed、Entry、Event handler escalated、Event received、Exit、Failed、Failing、Skipped、Terminated |
Staff | Assigned、 Completion forced、Created、Deassigned、Escalated、Exit、Expired、Failed、Fault set、Output set、Retry forced、Skipped、Stopped、Terminated、Work item created、Work item deleted、Work item refreshed、Work item transferred |
Template(未显示) | Deleted、Entry |
有两个选项可用于检索和分析 CBE。
- WebSphere Process Server 提供的 CBE Event Browser 提供了 CBE 的简单视图,可在 WebSphere Integration Developer 中从服务器视图启动,或在浏览器中使用以下地址启动:http://localhost:9060/ibm/console/cbebrowser。此选项可供希望查看生成的事件的开发人员使用(请参见图 1)。
- 可以使用程序检索事件,并执行自定义分析和表示。本文提供的构件就是采用此选项。
为了处理业务级别事件,请参见下载部分,其中提供了三个通用构件。业务级别事件可以使用 CEIEventEmitter 发出,使用 CEIQueryService 进行查询或使用 CEIMeteringViewPortlet 进行查看。
CEIEventEmitter(请参见图 2)允许我们从 Java™ 代码片段或从业务流程调用的服务组件体系结构(Service Component Architecture,SCA)组件生成业务级别事件。此事件可以与业务级别事件相关,可以包含任意名称-值对集。
清单 1 显示了从 Java 代码发出业务级别事件的示例。可以使用工厂模式来创建事件发射器,并随后使用恰当的数据来调用它。可以生成日志事件 (emitLogMessage) 或标准事件 (emitEvent),前者中包含一个简单消息,而后者包含 eventName、eventTrackingId 和一组名称-值对(其中包含事件的数据)。
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
eventTrackingId 对所有相关数据进行关联。例如,可以为一个业务流程使用相同的 eventTrackingId。事件是字符串,表示已发生的业务级别事件。可以使用冒号来创建具有语义含义的事件名称,如 WPS:BusinessLevelEvent:FundTransferEvent
。
清单 2 是在银行应用程序中使用的示例代码片段,用于记录转帐期间的业务级别事件。
清单 2. 使用 CEIEventEmitter 的银行应用程序示例
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
CEIEventEmitterRouter (在可下载构件中)将 CEIEventEmitter 包装为 Web 服务。可以随后将此 Web 服务导入到 WebSphere Integration Developer 中,并将调用 SCA 组件与其连接(请参见图 3),从而支持将 CEIEventEmitter 作为服务调用。如果性能是要加以考虑的问题,则可以将构件包含在 SCA 模块中,并将其作为标准 Java Bean 进行调用。
CEIQueryService(请参见图 4)允许您查询 CEI 持久状态,并返回指定相关范围内的 CBE 的数据。相关范围将所有相关 CBE 分组到一起。
当 CEIEventEmitter 保存事件时,trackingId 将形成相关范围,以用于对相关事件进行关联。可以检索所有相关 CBE 事件。此构件的该接口是一个 Web 服务,事件以传统 Java 对象(Plain Old Java Object,POJO)的形式返回(而不是 CBE),以方便访问。
此构件包含两个部分。第一部分是实际的 Web 服务及其相关构件,包含在 EAR 文件 CEIQueryServiceEAR 中。这些构件部署在 WebSphere Process Server 实例上。CEIQueryService 构件的第二部分是 Web 服务的客户机接口及其相关的代理类。此部分包含在 EAR 文件 CEIQueryServiceClientEAR 中。客户机接口是一个 EAR 文件,以方便访问 WAR 来进行测试。客户机项目提供 WebService 代理和所需的类,以对 CEIQueryService 调用操作。通常是通过实例化 CEIQueryServiceProxy 并随后对 Web 服务调用所需的操作来启动 Web 服务的。将在 CEIQueryEvent 对象中返回数据,其中包含一个 CEIQueryEventData 对象数组。
CEIQueryServiceClientWeb/WebContent/sampleCEIQueryServiceProxy 中提供了一些示例,可说明如何调用 CEIQueryWebService。通过了解这些示例,可以使用生成的代理来测试 Web 服务。选择 TestClient.jsp
,然后选择 Run
> Run on Server
。将随即打开 Web 浏览器,可以在其中选择要运行的操作。请记住,如果服务部署在远程主机上,则要更改端点。
注意:为了成功编译所有项目,请确保 WPS_RUNTIME/CEI/client/events-client.jar 文件位于项目构建路径中。WPS_RUNTIME 是 WebSphere Process Server 的安装目录,如 C:/Program Files/IBM/Rational/SDP/6.0/runtimes/bi_v6。
CEIMeteringViewPortlet(请参见图 5)是一个 Portlet,可通过其查看使用 CEIEventEmitter 创建的测定事件。CEIMeteringPortlet 使用 CEIQueryService 检索事件,并随后在 Porlet 页面将其列出(请参见图 6)。此 Portlet 允许用户根据日期、代理或订阅者筛选事件。
标准名称 | 用途 |
---|---|
Start date | 不显示此日期前生成的事件。 |
End date | 不显示此日期后生成的事件。 |
Agent | 显示此代理生成的事件。代理是标识事件源的字符串。可以为应用程序选择用于发送事件的任意字符串。它与 CBE 的 sourceComponentId/@application 属性对应。 |
Subscriber | 将显示此订阅者订阅的事件。订阅者是标识事件源选择的字符串。它标识此事件的相关方。它与带名称 SubscriberID 的 CBE 的 ExtendedDataElement 相对应。 |
筛选标准字段是可选的。此 Portlet 仅使用可用标准来筛选事件。此功能对于有很多事件的情况尤为有用。
此 Portlet 的功能之一是能够使用 XPATH 查询字符串进行筛选。CEIMeteringPortlet 从用户指定的标准构造 XPATH 查询字符串,并将此查询字符串发送到 CEIQueryService。CEIQueryService 随后接受 XPATH 查询字符串,并检索事件(筛选出不符合标准的事件)。
图 5. CEIMeteringViewPortlet 的类关系图
图 6. CEIMeteringViewPortlet 摘要视图
可以选择事件以查看其详细属性(请参见图 7)。
本文说明了为什么实现组合应用程序可测量性非常重要。其中对业务级别事件的角色进行了说明,并提供了三个构件,可将其用于在组合应用程序的上下文中生成、查询和查看业务级别事件。在这些可重用构件的帮助下,可使您的组合应用程序具有可测量性,从而为改进整个业务流程打下基础。
描述 | 名字 | 大小 | 下载方法 |
---|---|---|---|
Assets projects in server side for this article1 | assetsserviceside.zip | 117KB | HTTP |
Assets projects in client side for this article | assetsportlet.zip | 2832KB | HTTP |
List of all projects in above downloadable files | projectlist.zip | 6KB | HTTP |
![]() | ||||
![]() | 关于下载方法的信息 | ![]() |
Note
- 构件以项目交换格式提供。为了导入构件,只需选择 File>Import,然后选择 Project Interchange 即可。
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
- 使用 RSS feed 获取有关本系列即将推出的文章的通知。(查找有关 developerWorks 内容的 RSS feed 的更多信息)。
- 获取 用于 Web 服务的业务流程执行语言(1.1 版) 规范和相关资料。
- 参考 Common Base Event 规范。
- 从 Best Practices for the Common Base Event and Common Event Infrastructure 了解更多相关信息。
- 请参阅 Event Management Best Practice,其中提供了有关事件管理的更多信息。
- 参考 Common Base Event best practices: Getting it right the first time。
- 从 Common Base Event best practices: Properties and elements at a glance 了解更多相关信息。
- 了解关于 developerWorks 技术事件和网络广播的最新消息。
- IBM SOA 网站提供了 SOA 的概述,并说明 IBM 可以如何帮助您实现此目标。
- 有关 SOA 的更多信息,请访问 developerWorks SOA and Web services 专区。