使用 WebSphere Business Events REST 接口从应用程序发出简单业务事件
2010-08-12 00:00:00 来源:WEB开发网简介
了解业务处理、更具灵敏性、近乎实时地监测管理和遵从性情况是不断增长的企业业务线需求。基于事件的解决方案通过快速有效地利用机会和减少异常来支持业务和 IT 管理企业风险。当业务事件处理技术与业务线应用结合时,就创造了一个机会来构建解决方案,从而提供更多的灵活性并帮助检测关键遵从性和管理情况。事件支持即时发现机会和异常,也可以发起适当的响应。
IBM® WebSphere Business Events(以下称为 Business Events)是一个复杂的事件处理引擎,有助于业务基于可操作事件模式的发现检测、评估和响应业务事件。它能够将任何来源的业务事件在任何时间范围内关联起来。Business Events 支持各种接收事件和发起操作的传输。分布式应用程序可以使用的最简单的一个传输是基于 HTTP 的具象状态传输(Representational State Transfer,REST)接口,尽管新 REST API 是在 Business Events V7 中引入的,但本文涉及的基于 REST 的事件创建在 V6.2.1 和 V7 中都受支持。
REST 是一种架构风格,其中的每一个资源都是用一个统一资源标识符(Universal Resource Identifier,URI)惟一表示的。当用户在网络上使用 URI 访问多个资源时,将会有一个状态上的改变或者转换。这就是具象状态传输。在 Business Events 中,每个定义的事件是一个资源,都有一个 URI 可用来创建事件的特定实例。
尽管其他 IBM 产品,比如 CICS® Transaction Server 和 WebSphere Message Broker,都提供直接从应用程序或流中发出事件的机制。但仍然有很多应用程序没有这种功能。在本文中,您将学习如何使用 Business Events REST 接口从任何使用 Web 协议的应用程序发出业务事件。
先决条件
为了完成本文的步骤,您需要掌握以下几点:
WebSphere Business Events。
Java™ 编程语言
Web 协议
您必须安装以下软件:
WebSphere Business Events V6.2.1 或更高版本。
JDK 1.6 (用来编译和运行示例)。
业务事件和操作
业务事件就是在业务中发生(或者没有发生)的事情。事件源可以是从 RFID 传感器到业务应用程序的任何东西。事件被发送到一个诸如 Business Events 的复杂事件处理引擎。事件处理引擎可将这些事件关联起来,然后根据用户定义的规则发出操作。
让我们看一个出现在销售网点应用程序中的订单事件示例。您可以对其进行如下定义:
如果一个订单值超过 $1000,收集以下数据:
Name
Contact number
Item
Order value
该事件的操作是将该客户放入一个溢价名单,为后续订单提供较好的报价。在这个例子中,销售网点应用程序是事件来源,将会发送事件给 Business Event。Business Events 根据事件处理逻辑采取用户定义的适当行动。图 1 展示了这一场景。
图 1. 订单事件示例
从任何应用程序发出事件
继续以销售网点应用程序为例,我们假设应用程序本身没有发送业务事件功能。我们将看到,如何轻松地向应用程序添加事件发出功能。
第一步是确认事件出现的地点并为事件收集必要数据。所有数据收集完成之后,建立一个事件包(Business Event 格式)然后调用 Business Events 的 REST 接口。
理解 Business Events 事件格式
Business Events 支持多种传输协议,比如 JMS、文件和 HTTP,来发送事件。本文中我们使用 HTTP。
HTTP 可传输两种不同的事件格式:HTML Form 和 Connector Packet。顾名思义,在 HTML Form 格式中,事件是通过一个 HTML 表单直接发送。Connector Packet 是事件的标准 Business Events XML 格式。本文中我们将使用 Connector Packet 格式。
Connector Packet 格式
Connector Packet 格式如清单 1 所示,是一个事件和操作的常用模式。
清单 1. Business Events Connector Packet 格式
<connector xmlns="http://wbe.ibm.com/6.2/packet-type/packet-name" name="connector-name"
version="6.2">
<connector-bundle name="connector-bundle-name" type="Event">
<event-object-name>
<field-name [data-type="data-type"]>field-value</field-name>
<field-name [data-type="data-type"]>field-value</field-name>
</event-object-name>
</connector-bundle>
[<system>SENDING.SYSTEM.INSTITUTION.COM</system>]
[<timestamp>0000-00-00T00:00:00</timestamp>]
[ <loginfo>MESSAGE</loginfo>]
</connector>
表 1 对清单 1 中的元素进行了说明。* 是可选元素。
表 1. Connector Packet 字段描述
元素 | 说明 |
packet-type | 事件/操作包的类型 |
packet-name | 事件/操作名 |
connector-name | 连接器名或接触点 |
event-object-name | 对象事件名 |
system* | 发送有效载荷的系统名 |
time stamp* | ISO8601 格式的时间戳,表示事件时间 |
loginfo* | 包含在 WBERuntime 事件日志中的消息 |
在事件对象中,您可以将事件(也叫做事件有效载荷)的数据放置在名/值对中。
事件对象
让我们创建一个名为 WBEEvent 的对象,获取事件数据,构建一个事件连接器包,并将其发送给 Business Events。图 2 显示了 WBEEvent 对象的类图。该对象有四个属性和两个方法,详述如下。
图 2. WBEEvent 对象类图
其中:
EventName 是事件名。
HostName 是 Businesses Events 运行所在的主机名。
PortNumber 是 Application Server 端口号。
DataElements 是一个在名/值对中包含事件数据的向量。
AddData()是一个将事件数据作为名/值对的方法,并将其存储在 DataElements 向量中。
Send() 是一个使用事件名和数据组成事件连接器包的方法。此方法也可以使用 EventName、HostName 和 PortNumber 为事件构建一个 URI。它将使用 HTTP POST 方法调用 REST 接口。如果 POST 成功,Business Events 将发送一个 HTML 响应 “Form processed” 。
事件传输格式
事件传输格式有两部分:一个 HTTP 请求头和事件有效载荷(是事件连接器包)。图 3 显示了在线路上发送的最终事件消息。
图 3. 事件传输格式
使用 Java 示例发送事件
本文将提供一个用 Java 编写的 WBEEvent 对象的示例实现供您 下载。PointOfSale 类实例化 WBEEvent 对象并向 Business Events 发送事件。
在 Business Events 中定义事件
为了测试示例,您需要定义 OrderEvent 和 Business Events 操作。为此,完成以下步骤:
选择 Start => Programs => IBM WebSphere Business Events V7.0 => Design Data,打开 Design Data 工具。
选择 Insert => Touchpoint,创建一个名为 REST 的接触点。出现输入名称提示时,输入 REST 并单击 OK。
选择 Insert => Event => Blank,出现输入名称提示时,输入 OrderEvent 并单击 OK。
右键单击 OrderEvent 并选择 Event Properties,更改事件属性来配置 HTTP 连接。单击 Connection 选项卡并选择 HTTP Connection。
单击 Configure,然后选择 Connector Packet 作为格式、http 作为传输协议。
单击 OK,再次在 Event OrderEvent Properties 对话框单击 OK。所有属性设置完成后,您的对话框如图 4 所示。
图 4. 事件属性
选择 Insert => Event Object=> Blank 来插入一个事件对象。调用对象 OrderEvent_Data。该对象名是很重要的,因为在组成连接器包示例中,我们假设事件对象名是 <event name>_Data。
右键单击 OrderEvent_Data 对象并选择 Insert Event Object Field,然后插入表 2 所列字段:
表 2. 事件对象字段
字段名 | 数据类型 |
Name | 字符串 |
ContactNumber | 字符串 |
Item | 字符串 |
OrderValue | 整型 |
定义了所有的字段之后,您的屏幕看起来像图 5 这样。
图 5. 事件对象字段
查看原图(大图)
现在您需要创建一个 Intermediate 对象。Intermediate 对象是代表那些被用于构建事件处理逻辑的业务对象。选择 Insert =>Intermediate Object => Blank 并指定 OrderEvent_Obj。
选择所有事件对象字段(使用 Ctrl 键来选择多个字段),然后将其拖放到 Intermediate object 窗口。完成这些操作之后。您的窗口如图 6 所示。
图 6. Intermediate 对象
查看原图(大图)
现在您需要为该事件定义一个操作。您可以定义任何类型的操作,从发送一个 email 到更新一个仪表板。对于本例,我们将创建一个操作,该操作在文件系统中创建一个名为 Action_data 的文件。要插入操作,选择 Insert => Action> Blank,然后调用操作 OrderAction。
右键单击 OrderAction 并选择 Action properties,为操作设置连接属性。
在 Connection 选项卡上,选择 File System Connection。为格式选择一个 Connector Packet 并单击 Configure。
输入图 7 所示属性,并单击 OK,然后再次单击 OK 关闭操作属性。
图 7. 操作属性
查看原图(大图)
单击 File => Save As => Project To Server Store 保存项目。打开的对话框显示项目存储。项目存储是保存项目的区域,可以使用设计工具找到。选择一个文件夹或者创建一个新文件夹来保存项目,然后在对话框底部的输入框中指定项目名 simple_rest,并单击 Save。
接下来您需要为订单事件定义逻辑;也就是说,收到 OrderEvent 后, 如果 OrderValue 大于 1000 则调用 OrderAction。为此,可以使用 Business Space 中的设计工具。
选择 Start => Programs => IBM WebSphere Business Events V7.0 => Business Space。
输入您的 UserID 和 Password 登录 Business Space。
如果您是第一次登录,将会看到一个欢迎页面。单击 Start。
单击 Create Space 创建您自己的空间。指定 Simple Rest 作为页名。
单击 Edit Page。在顶部您将看到许多小部件。将 Business Events Design 小部件拖到页面上。操作完成后,您的屏幕如图 8 所示。
图 8. Business Events Design 小部件
查看原图(大图)
在 Design Data 中,您将数据模型保存在项目存储中,这意味着您可以轻松地打开 Business Space 中的项目来添加业务逻辑。为此,单击 Business Events Design 小部件,并选择 Project =>Open。
您可以看到您的文件夹和 simple_rest 项目。选择 simple_rest 并单击 Open。
在 Current Project 面板中,您可以看到迄今为止您已经创建的资产的树状结构以及交互集占位符和过滤器。
为订单值大于 1000 的订单创建一个过滤器。单击 New filter,然后单击 new filter 为过滤器命名。调用过滤器 Order more than 1000。
选择 operand => Select a field,然后单击 OrderEvent_Obj 展开列表,并选择 OrderValue。
选择 operator => Numeric operators,然后选择 Is Greater Than。
选择 click for operand 和 Enter value。输入 1000。
完成这些操作之后,过滤器如图 9 所示。
图 9.过滤器
查看原图(大图)
单击 New interaction set,创建一个交互集。
单击 new interaction set 区域并指定名称为 Order Interaction。单击 Click to select an event => REST 并选择 OrderEvent。单击靠近 Always 的三角形,然后选择 Add a Filter。单击文件夹名(默认是 New Folder)并选择 Order more than 1000 过滤器。单击靠近 Action 的三角形并选择 REST=> OrderAction。您刚刚为 OrderEvent 创建了业务逻辑:为了响应 OrderEvent,如果 OrderValue 大于 1000,OrderAction 立即被调用。您的交互集如图 10 所示。
图 10. 交互集
查看原图(大图)
既然您已经完成了数据模式和业务逻辑定义,那么就需要将项目发布到 Business Events 运行时。在 Business Events Design 小部件的工具栏上单击 Runtime,然后单击 Publish to runtime,项目资产发布到运行时。查看状态栏(在工具栏下面)。状态消息是:“Publishing project: published successfully。”
现在,配置完成了!启动连接器(位于 Design Data 工具中)。当连接器准备接收事件时,您将看到如图 11 所示的 Connectors 控制台。
图 11. Connectors 控制台
查看原图(大图)
您可以运行示例 Java 程序来测试订单事件。示例有两个命令行参数:运行 Business Events 的主机的名称和应用程序端口号。如果一切顺利,程序输出将如清单 2 所示。
清单 2. 示例程序输出
C:\>java -jar OrderEvent.jar leander.ibm.com 9080
Creating OrderEvent Object....
Adding Event data:
Name = John
ContactNumber = 847-111-1111
OrderValue = 5000
Item = Computer
Sending event to WBE........
Event sent successfully
如果您在 Connectors 控制台中查看消息,将会看到 OrderEvent 被接收且 OrderAction 被调用。Connectors 控制台如图 12 所示。
图 12.带有事件消息的 Connector 控制台
查看原图(大图)
结束语
在本文中,您学习了什么是业务事件以及如何使用它们获取业务洞察。现在您理解了 WebSphere Business Events 事件格式。我们建立了一个可以收集事件数据的对象,构建了 connector packet 格式的事件,并使用 REST 接口将其发送到 Business Events。现在您可以参考本文使用 Business Events 的 REST 接口从任何应用程序发出业务事件。
赞助商链接