使用 WebSphere Business Events 进行业务事件处理,第 2 部分: 构建业务事件应用程序

本系列的第一部分向您介绍了主要的 WebSphere® Business Events 概念和工具。在第 2 部分中,您将了解如何构建和测试一个简单的 Business Events 应用程序,您将在本系列的后续文章中使用此应用程序与其他 IBM 产品进行集成。

Xiaoming Zhang, 软件工程师, IBM

Xiaoming Zhang 的照片Xiaoming Zhang 是 IBM Hursley Software Lab 的一名软件工程师。他一直从事 WebSphere MQ、WebSphere Message Broker 和 WebSphere Business Events 的测试、开发和 Level 3 服务。在 1998 年加入 IBM 之前,Xiaoming 是英国布鲁内尔大学的计算机科学讲师。Xiaoming 毕业于中国复旦大学,并从英国的威尔士斯旺西大学获得了博士学位。



Mark Hiscock, 软件工程师, IBM

Mark Hiscock 的照片Mark Hiscock 在 IBM Hursley Software Lab 工作,并一直在那里从事 WebSphere MQ 和 WebSphere Message Broker 的测试、Level 3 支持、场景测试和实验室服务工作。他现在是 WebSphere Business Events 的开发人员。Mark 在业余时间喜欢功夫、脚踏车和精致的小玩意!



Doina Klinger, 顾问软件工程师, IBM

Doina Klinger 是 IBM Hursley Software Laboratory 的一名顾问软件工程师。她是 WebSphere Business Events 的开发人员。她以前曾作为开发人员和开发负责人从事过许多 WebSphere 产品和组件方面的工作,并在最近从事 WebSphere Enterprise Service Bus 和 WebSphere Integration Developer 方面的工作。她对 Eclipse 以及消息和事件处理技术拥有浓厚的兴趣。Doina 于 2000 年加入 IBM,并从普渡大学获得了计算机科学硕士学位。



2009 年 5 月 18 日

场景概述

在本系列中,我们将使用一个示例场景来说明 Business Events 是如何工作的。该场景需要确定并相应地响应随时间推移而形成的事件模式。我们将使用金融行业中的规章遵从性用例的简化版本,在该用例中,我们需要检测交易系统中的投机行为。有关该场景的更多信息,请参阅第 1 部分

为了演示 Business Events 与其他 IBM 产品的集成(将在本系列的后续文章中介绍),该示例实现将生成三类操作。该场景只需要报告 SpeculativeCustomer 操作。但是,我们也会生成中间操作,以便说明问题和帮助进行该集成。

注意:

  • 本系列的第 2 部分假设您已经阅读了第 1 部分,并且熟悉其中描述的核心 Business Events 概念。
  • 本文中的步骤在 Windows® 环境中执行。

过程概述

为了构建应用程序以实现此场景,您将使用 WebSphere Business Events Design Data 工具完成下面的步骤。这些步骤通常由 IT 专家完成。

  1. 定义业务系统,也就是将要进行集成的所谓的接触点。接触点是一组相关事件和操作定义。
  2. 在接触点中,定义发起跨系统流程的活动(事件)以及在确定事件模式时执行的活动(操作)。例如,一天内针对相同客户和股票的三次 Buy 事件之后的 Sell 事件将产生 SpeculativeCustomer 操作。
  3. 创建业务对象层,即所谓的中间对象,它们将用作事件评估中使用的数据的占位符。进出运行时系统的所有数据都通过中间对象。例如,Customer 中间对象可以包含从事件中获得其值的字段(Name、Address、State 等等),还可以包含从数据库表获得其值的联系人信息(Last Order Date、Email Address)。

下一步,您将使用 Business Events Design 工具检索在前面的步骤中创建的定义,并将其用于定义业务逻辑。这些步骤通常由业务分析人员完成。

  1. 定义 Business Events 运行时服务器在运行时用于检测、关联和响应简单和复杂事件模式的交互集(包含业务逻辑的交互块的集合)。
  2. 定义用于指定某个交互块在什么条件下为 True 的筛选器。

注意:所有 Business Events 组件的定义都存储在同一个存储库中,从而提供一个完全集成的环境。当 Business Events 运行时服务器启动时,它从存储库检索最新的定义集,并编译交互集,后者评估传入事件并生成关联的操作。


构建应用程序

本部分描述使用 Design Data 工具构建 Business Events 应用程序所需完成的步骤。您将描述事件和所产生的操作,以及定义中间对象。

您将完成以下步骤:

  1. 定义接触点。
  2. 定义事件和一个事件对象。
  3. 创建操作和一个操作对象。
  4. 创建作为操作结果而生成的事件。
  5. 定义一个中间对象。
  6. 定义中间对象字段与事件字段之间的映射。
  7. 定义操作字段与中间对象之间的映射。

步骤 1:定义接触点

要定义接触点,请执行以下操作步骤:

  1. 通过选择“开始”=>“所有程序”=>“IBM WebSphere Business Events 6.1”=>“Design Data”启动 Design Data 工具。
  2. 展开左侧的 Touchpoints 窗格。(您可以折叠其他窗格以节省空间。)在左侧窗格中单击鼠标右键并选择 Insert Touchpoint
  3. 指定 Trade System 作为名称。

步骤 2:定义事件

要定义事件,请执行以下操作步骤:

  1. 右键单击新的接触点并选择 Insert Event => Normal
  2. 指定 Buy 作为名称。
  3. 右键单击该事件并选择 Insert Event Object => Blank
  4. 指定 TradeObject 作为名称。
  5. 右键单击该事件对象并选择 Insert Event Object Field。Insert Field 对话框随即打开。您将使用此对话框在事件对象、操作对象和中间对象中插入字段。
  6. 指定 CustomerID 作为名称,并选择 String 作为数据类型,如图 1 所示。
    图 1. 在事件对象中插入字段
    在事件对象中插入字段
  7. 重复步骤 6 以添加以下字段:
    • StockID,类型为 String
    • Date,类型为 DateTime
    • Quantity,类型为 Real
    • Price,类型为 Real
  8. 创建另一个新字段,这一次将其命名为 Sell
  9. 右键单击 Sell 并选择 Insert Event Object => Shared,然后选择TradeObject

Buy 和 Sell 事件共享同一个事件对象。

步骤 3:创建操作

要创建操作,请完成以下步骤:

  1. 右键单击 Trade System 接触点并选择 Insert Action => Normal
  2. 指定 Buy Ack 作为名称。
  3. 右键单击新的操作并选择 Insert Action Object => Blank
  4. 指定 TradeOut 作为名称。
  5. 右键单击 TradeOut 操作对象并选择 Insert Action Object Field
  6. 在如图 1 所示的 Insert Field 对话框中,指定 CustomerID 作为名称,并选择 String 作为数据类型。对以下字段名称和类型重复此步骤:
    • StockID,类型为 String
    • Key,类型为 String
    • Date,类型为 DateTime
    • Quantity,类型为 Real
    • Price,类型为 Real

    注意:Business Events 要求所定义的每个事件必须通过某个交互集触发某个操作。您刚才创建的 Buy Ack 操作满足 Buy 事件的这个要求。稍后,您将定义一个交互集,该交互集将演示在不使用筛选器或无延迟的情况下生成操作的最简单事件策略。

    在图 2 中,您看到了 Design Data 工具,右侧显示了已创建的操作 Buy Ack 的一些详细信息,包括其操作对象 TradeOut 和该操作对象的成员字段,例如 CustomerID。

    图 2. 操作和操作对象
    操作和操作对象
  7. 通过重复上述过程创建一个名为 SellAfterBuy 的新操作。
  8. 右键单击新的 SellAfterBuy 操作,并选择 Insert Action Object => Shared,然后选择 TradeOut
  9. 重复步骤 1 至 8 创建操作 Speculative Customer,此操作也使用操作对象 TradeOut

步骤 4:创建事件

下一步,我们将创建一个人工事件,它将使得 Business Events 能够注意到重复的 SellAfterBuy 情况并发送 SpeculativeCustomer 操作。为此,请完成以下操作步骤:

  1. 创建一个名为 SellAfterBuySynEvent 的普通事件。
  2. 右键单击该事件并选择 Insert Action => To Fire This Event Synthetically。接受所显示的警告消息。该事件现已重命名为 SellAfterBuySynEvent <- SellAfterBuySynEvent,并自动创建了一个新的 SellAfterBuySynEvent 操作。
  3. 右键单击 SellAfterBuySynEvent 并选择 Rename。将该事件重命名为 SellAfterBuySynAction。最好避免在操作名称中使用后缀 Event。重命名该操作会导致将该事件重命名为 SellAfterBuySynEvent <- SellAfterBuySynAction。

步骤 5:定义中间对象

下一步是定义中间对象。该示例应用程序使用单个中间对象。要定义中间对象,请完成以下操作步骤:

  1. 展开 Design Data 工具的 Intermediate Objects 窗格,然后在该窗格中单击鼠标右键,并选择 Insert Intermediate Object => Blank
  2. 指定 TradeObject 作为名称。
  3. 右键单击新对象并选择 Insert Intermediate Object Field。在 Insert Field 对话框中,指定 CustomerID 作为名称并选择 String 作为类型。对以下字段名称和类型重复此步骤:
    • StockID,类型为 String
    • Date,类型为 DateTime
    • Quantity,类型为 Real
    • Price,类型为 Real
    • Key,类型为 String
  4. 将中间对象 TradeObject 从 Intermediate Objects 部分拖放到 SellAfterBuySynEvent <- SellAfterBuySynAction 事件上。
  5. TradeObject 从 Intermediate Objects 部分拖放到 SellAfterBuySynAction 操作上。图 3 显示了所创建的人工事件和人工操作的详细信息。
    图 3. 人工事件
    人工事件

步骤 6:定义从事件对象到中间对象的映射

下一步,您需要指定如何将每个事件对象字段映射到中间对象字段。所有事件都需要此映射,包括派生的事件。大多数字段直接通过 Buy 和 Sell 事件的属性进行填充。中间对象的 Key 字段是使用 JavaScript™ 计算而来的。

您可以使用从源到目标的拖放操作完成映射。但是,我们这里将描述如何使用显式的选择来完成该映射:

  1. 展开 Buy 事件树节点,右键单击 TradeObject 并选择 Insert Field Constructor From Object => Trade Object => Customer ID,如图 4 所示。
    图 4. 为中间对象添加字段构造器
    为中间对象添加字段构造器
  2. 重复前一步骤为 StockID、DatePriceQuantity 插入字段构造器。不要映射 Key 字段。这将指定在事件字段的基础上构建中间对象的字段。

    注意:该工具在方括号中显示了为每个事件创建的中间对象,如图 5 所示。

    图 5. 在事件的基础上创建的中间对象和字段
    在事件的基础上创建的中间对象和字段
  3. 在 Touchpoints 视图的右侧,展开 Buy => TradeObject => CustomerID 并选择编辑器的 Definition 部分中的 Field
  4. 单击 Insert object field 并从事件字段列表中选择 CustomerID,如图 6 所示。
    图 6. 在事件字段的基础上设置中间对象
    在事件字段的基础上设置中间对象
  5. 重复最后两个步骤以在 DatePriceQuantityStockID 中插入对应的字段。这将指定在事件字段的基础上构造中间对象的所有字段。

    注意:在此示例中,事件对象和中间对象的字段名称相同,但是它们不是必须相同。

    由于 Buy 和 Sell 事件共享一个事件对象,Buy 和 Sell 事件都会导致创建 TradeObject 中间对象,如图 7 所示:

    图 7. 多个事件创建相同的中间对象
    多个事件创建相同的中间对象
  6. 使用 JavaScript 表达式按如下方式定义 Key 字段:
    1. 在 Intermediate Objects 窗格中展开 Key 字段。
    2. Definition 部分,选择 JavaScript 作为 Type ,并输入表达式 CustomerID +""+StockID,如图 8 所示:
      图 8. 在 JavaScript 中定义 Key 字段
      在 JavaScript 中定义 Key 字段

      注意:Design Data 工具不对 JavaScript 表达式进行验证。因此,您需要确保您输入的表达式是有效的 JavaScript 表达式。网址 http://localhost:9080/wbe/tools/test_javascript.html 处提供了一个 JavaScript 测试工具,您可以使用此工具帮助验证您的 JavaScript。

步骤 7:定义从中间对象到操作的映射

下一步,您需要定义如何在中间对象的基础上构造操作,以及定义从中间对象字段到操作字段的映射。

  1. 在 Touchpoints 面板中,选择 Buy Ack => TradeOut
  2. 在右侧,展开 StockID,如图 9 所示。
    图 9. 映射操作对象字段
    映射操作对象字段
  3. 在操作的 Definition 部分,选择 Field 作为 Type,选择 Insert object field ,并为字段列表选择 TradeObject.StockID
  4. CustomerIDKeyDateQuantityPrice 重复前一步骤。对于这其中每个字段,添加前缀为 TradeObject 的关联中间对象字段。
  5. 通过选择 File => Save Project 保存项目。将项目命名为 Trading.xml 并退出 Design Data 工具。

    注意:在打开 Design 工具定义业务逻辑之前,确保保存 Design Data 定义并关闭 Design Data。


定义业务逻辑

本部分描述使用 Design 工具构建业务逻辑所需要完成的步骤。这些步骤通常由业务分析人员完成。

  1. 打开 Trading.xml 文件。
  2. 创建两个筛选器。
  3. 定义三个交互集。

注意:由于 Design Data 工具和 Design 工具使用同一个文件,因此最好在关闭一个工具之后再打开另一个工具。

步骤 1:启动 Design 工具并打开 Trading.xml

要开始入手,请执行以下操作:

  1. 选择“开始”=>“所有程序”=>“WebSphere Business Events v6.1”=>“Design”启动 Design 工具。
  2. 通过选择 File => Open 并指定 Trading.xml 打开项目。您在 Design Data 工具中定义的对象将显示出来,但是您不能修改它们。

步骤 2:创建 After Buy 筛选器

您需要创建的第一个筛选器是 After Buy 筛选器,此筛选器检查其应用到的事件是否在 Buy 事件后的一小时内发生。您将把此筛选器应用于 Sell 事件。要创建 After Buy 筛选器,请执行以下步骤:

  1. 单击工具栏上的 Filter 按钮(或者从菜单上选择 Create => Filter)。这将在编辑器中创建一个筛选器模板。
  2. 指定 After Buy Filter 作为名称,然后选择 operator?。可用的运算符列表随即显示出来。从 ContextOperator 文件夹中选择 Follows Within,如图 10 所示。
    图 10. 创建第一个筛选器
    创建第一个筛选器

    筛选器模板将更新以显示所选的运算符及其参数。

  3. 下一步,单击第一个 operand?,然后选择 Select an event
  4. 项目中定义的事件列表随即显示出来,如图 11 所示。选择 Buy
    图 11. 为流函数选择事件参数
    选择事件参数
  5. 单击第二个 operand?(在 Within 之后,请参见图 11),并选择 Enter text
  6. 在随后出现的对话框中,指定 1 作为天数,并单击 OK

    在此阶段,该筛选器应该与图 12 所示类似。

    图 12. After Buy 筛选器
    After Buy 筛选器

您刚才创建的筛选器将由 Sell After Buy 交互集(您很快就将对其进行定义)使用,该交互集将确定 Buy 事件之后何时发生了针对相同股票和客户的 Sell 事件。

这个简单和可读的筛选器将工作得足够好。其唯一的问题是事件配对。例如,假设一个 Buy 事件之后发生了三个 Sell 事件,全都在同一天针对相同的客户和股票。根据该筛选器到目前为止的定义,所有三个 Sell 事件将通过 After Buy 筛选器,从而导致生成三个 SellAfterBuy 操作。但是,您真正希望的是对于每一对买入和卖出事件,您仅检查到一个这样的情形。

为了实现此目的,您需要进一步改进该筛选器。您将添加一个条件,规定仅当某个事件在某个 Buy 事件之后的一天内发生,并且在上一个 SellAfterBuy 操作之后有一个 Buy 事件发生时,该事件才通过筛选器。这样,上述序列中的第二和第三个 Sell 事件将无法通过筛选器,这就是您希望的结果。要将此条件添加到筛选器,可以执行以下步骤:

  1. 单击第二行上的筛选器图标,并选择 Add a filter condition,如图 13 所示。
    图 13. 添加筛选器条件
    添加筛选器条件
    这样就添加了一个新的模板条件,两个条件之间用 AND 运算符连接。
  2. 现在您需要填入第二个筛选器条件的参数。单击第一个 operand? 旁边的图标,并选择 Select a Predefined Function,然后选择 ContextFunction => Event or Action Occurs,如图 14 所示。
    图 14. 选择 Event or Action Occurs
    选择 Event or Action Occurs
  3. 筛选器将更改以显示 Occurrences of 函数。单击 Occurrences Ofoperand?,然后选择 Select an event ,再选择 SellAfterBuy
  4. 单击 operator? 并从 NumericOperators 列表中选择 Is,如图 15 所示。
    图 15. 选择数值运算符
    选择数值运算符
  5. 单击剩余的 operand?,选择 Enter Text 并输入 0。现在该筛选器应该与图 16 所示类似。
    图 16. 带第一个分支条件的 After Buy 筛选器
    带第一个分支条件的 After Buy 筛选器

请注意事件 事件符号 和操作 操作符号 的筛选器定义中的不同符号。

该筛选器已经几乎完成了。当满足以下条件时,它将变为 True:

  • 事件在 Buy 事件之后的一天内发生。
  • 还不存在 SellAfterBuy 操作。

要将 Buy 和 Sell 事件进行配对,您需要向该筛选器添加另一个条件,此条件检查上一个 SellAfterBuy 操作之后已经发生了上一个 Buy 事件。这确保不会将一个 Buy 事件与多个 Sell 事件配对,从而避免导致重复的 SellAfterBuy 操作。要添加此条件,请完成以下操作步骤:

  1. 单击该筛选器的第二个条件(第一个括号右侧的图标,如图 17 所示),并选择 Branch this filter condition
    图 17. 分支筛选器条件
    分支筛选器条件
  2. 在结果分支中,选择 And 并将其替换为 Or,如图 18 所示。
    图 18. 修改链接筛选器条件的布尔运算符
    修改布尔运算符
  3. 单击第一个 operand? 后面的符号,选择 Select a predefined function,再选择 DateTimeFunction,然后选择 Last Occurrence Of,如图 19 所示。
    图 19. 选择 DateTime 函数
    选择 DateTime 函数
  4. 单击 operand? 并选择 Select an Event,然后选择 Buy
  5. 单击其余两个 operator? 字段中的第一个,并从随后显示的列表中选择 is After DateTime
  6. 单击最后一个 operand?,选择 Select a Predefined Function,然后选择 Last Occurrence Of
  7. 选择 Select an action 并选择 SellAfterBuy。图 20 显示了最终的筛选器:
    图 20. After Buy 筛选器——完成后的定义
    After Buy 筛选器——完成后的定义

步骤 3:创建 Speculative Customer 筛选器

下面需要创建 Speculative Customer 筛选器。此筛选器将在一天内每当发生第三个 SellAfterBuySynEvent 事件时求值为 True。

完成后的筛选器使用了 Occurrences of This Event Within 函数。此函数不对事件的当前实例计数。因此,对于该事件的第三个实例,先前的实例数量为 2。您需要加一以补偿此行为。

要使该筛选器在每当发生第三个事件时求值为 True,我们将利用该函数的结果为整数的事实,并且我们可以使用 Business Events 整除函数 divmod。例如,对于某个数字 n:当且仅当 n 为 3 的倍数时,(n div 3 ) X 3 = n 才成立。

当且仅当事件的总发生次数(包括当前发生的事件)为 3 的倍数时,该筛选器才求值为 True。图 21 显示了完成后的筛选器的大致情况:

图 21. Speculative Customer 筛选器
Speculative Customer 筛选器

要创建 peculative Customer 筛选器,请执行以下操作步骤:

  1. 单击工具箱中的 Filter 按钮,并在模板中输入 Speculative Customer 作为名称。
  2. 首先我们将构建该筛选器的右侧部分,从运算符 Is 开始。
    1. 单击 operator? 并选择 NumericOperator =>Is。然后单击第二个 operand? 右侧的图标,并选择 Select a Predefined Function => NumericFunction => Plus
    2. 单击最后一个 operand? 右侧的图标,选择 Enter text,然后输入 1
    3. 单击 Plus 之前的 operand? 右侧的图标,并选择 Select a Predefined Function => ContextFunction => This Event Occurs Within
    4. 通过单击 operand? 旁边的图标并选择 Enter text 完成操作数,然后输入 1 作为天数。现在该筛选器应该与图 22 所示类似。
      图 22. Speculative Customer 筛选器——部分完成
      Speculative Customer 筛选器——部分完成
  3. 对于该筛选器的左侧,我们将使用类似的方法。我们将从右至左地构建此部分:从操作数的菜单中选择一个预定义的函数,通过输入文本填写右侧操作数,并重复针对左侧操作数的过程,直到该筛选器完成,如下所示:
    1. 单击 operand? 右侧的图标,并选择 Select a Predefined Function => NumericFunction => multiplied By
    2. 单击右侧的 operand?,选择 Enter Text 并输入 3
    3. 单击左侧 operand? 旁边的图标,并选择 Select a Predefined Function => NumericFunction => Divided by
    4. 单击左侧的 operand?,选择 Enter Text 并输入 3
    5. 单击左侧 operand? 旁边的图标,然后选择 Select a Predefined Function => NumericFunction => Plus
    6. 单击操作数并选择 Enter text,然后输入 1
    7. 最后,选择 Occurrences of this Event

Speculative Customer 筛选器现在就完成了。

步骤 4:创建交互集

现在您需要创建以下交互集,这些交互集将使用您刚才创建的筛选器做出业务决策:

  • Buy Acknowledgment 规则规定在接收到 Buy 事件时始终生成 Buy Acknowledgment 操作。
  • Sell After Buy 规则规定当某个 Sell 事件发生并满足 After Buy 筛选器(即该 Sell 事件在某个 Buy 事件之后的一小时内发生,并针对相同的股票和客户)时,将生成一个 SellAfterBuy 操作。此策略按 TradeObject.key 分组,后者是 Customer ID 和 Stock ID 的拼接。
  • Speculative Customer 规则规定,当某个满足 Speculative Customer 筛选器(即 24 小时内针对相同客户的事件发生次数超过两次)的 Sell After Buy 事件发生时,将生成对应的操作。此策略通过 Customer ID 进行关联。

您将创建如图 23 所示的交互集:

图 23. 交互集
交互集

要构建第一个交互集,请执行以下操作步骤:

  1. 在 Design 工具中单击 Interaction Set(或者从菜单中选择 Create => Interaction Set)。
  2. 这样会创建一个交互块模板。输入 Buy Acknowledgment 作为名称。
  3. 单击 In response toevent?,并选择 Buy。这将填充该策略的 Always 部分。
  4. 单击 action? 并选择 Buy Ack
  5. 单击交互集名称 (Buy Acknowledgment) 后面的区域中的任何地方,并从菜单中选择 Define context relationship
  6. 选择 TradeObject.Key 作为上下文 ID,如图 24 所示。
    图 24. 定义上下文关系
    定义上下文关系

虽然 Buy acknowledgement 交互集不需要上下文关系,但是买入和卖出事件的计数是按客户和股票进行统计的,因此该规则需要具有上下文 ID。

要构建第二个交互集,请执行以下操作步骤:

  1. 与前面一样,创建一个新的交互集并将其命名为 Sell After Buy
  2. 对于响应事件,请选择 Sell
  3. 单击策略名称后面的区域中的任何地方,并从菜单中选择 Define context relationship
  4. 选择 TradeObject.Key 作为流 ID。
  5. 下一步,向该策略添加一个筛选器条件。单击第二行开头的筛选器图标,并选择 Add a filter,如图25 所示。
    图 25. 向策略添加筛选器
    向策略添加筛选器
  6. 对于 Where 运算符,从可用筛选器的列表中选择 After Buy
  7. 对于 Always,请从操作列表中选择 Sell After Buy
  8. 右键单击操作空间(从 Always 开始的框)并选择 Add an action,然后选择人工事件 SellAfterBuySynEvent

现在您已经为构建最终的交互集做好准备了。定义交互集的步骤与定义 Sell After Buy 策略的步骤完全相同:

  1. 创建一个新的交互集并将其命名为 Speculative Customer
  2. 选择 SellAfterBuySynEvent 作为该策略的执行所响应的事件。
  3. 通过在交互集名称旁边单击鼠标右键并选择所需的上下文关系,从而定义一个将 TradeObject.CustomerID 作为其键的上下文关系。
  4. 右键单击该交互集并选择 Add a filter => Speculative Customer
  5. 选择要在该筛选器求值为 True 时执行的操作,在此例中为 Speculative Customer

该 WebSphere Business Events 应用程序现在就完成了!保存项目并退出 Design 工具。


部署并运行应用程序

为了部署和运行您刚才构建的 Business Events 应用程序,您将执行以下步骤:

  1. 为事件和操作指定连接器信息。将此信息包括在部署步骤中的原因在于,在本系列的后续部分中与其他 IBM 产品进行集成时,需要更改的正是此信息。
  2. 如果还没有启动的话,在 WebSphere Application Server 中启动 Business Events 运行时。
  3. 将该 Business Events 应用程序部署到运行时。
  4. 启用历史记录。
  5. 重新启动 Business Events 运行时。
  6. 启动连接器进程。

步骤 1:指定连接器信息

在测试 Business Events 应用程序之前,您需要为所有的事件和操作指定连接器信息。为简单起见,您可以使用文件系统连接器 (File System Connector) 实现此目的。

  1. 启动 Design Data 工具并打开项目。
  2. 展开 Touchpoints 并选择 Buy
  3. 单击鼠标右键并选择 Event Properties
  4. Connection 选项卡上,单击 File System Connection,如图 26 所示。
  5. File Event Connection 对话框上,选择 Connector Packet 作为 Format,如图 26 所示。
  6. Contact frequency (in minutes) 选择 1,然后单击 Configure,如图 26 所示。
  7. Server 对话框中,指定您将放置事件文件的目录位置,例如 C:\Business Events\test\Buy,以及用于 File Pattern*.xml,如图 26 所示。确保您指定的文件夹在文件系统上存在。
  8. 对 Sell 事件重复这些步骤,并指定 Connector Packet 作为格式,将联系频率指定为 1 分钟,指定 C:\WBE\test\Sell 作为目录。

    注意:您不需要对 SellAfterBuySynEvent <- SellAfterBuySynAction 事件执行这些步骤,因为该事件是由 Business Events 本身在内部生成的。

    图 26. 为 Buy 和 Sell 事件配置连接器信息
    配置文件连接器信息

现在您需要对操作执行类似的配置步骤:

  1. 右键单击 Buy Ack 并选择 Action properties
  2. Action Properties 对话框的 Connection 选项卡上,选择 File System Connector
  3. 使用某个目录配置服务器部分,该目录不同于与 Buy 和 Sell 事件关联的目录。例如 c:\WBE\testactions。这是 Business Events 输出所生成的操作的地方。确保您指定的文件夹在文件系统上存在。
  4. 指定此操作的唯一文件模式。例如 Buy*.xml。为每种类型指定不同的命名模式可以使得快速查看 Business Events 输出的内容更加容易。
  5. SellAfterBuySpeculativeCustomer 重复这些步骤,并使用相同的文件路径(例如 c:\WBE\testactions),但是使用不同的模式,例如 sell*.xmlspec*.xml
  6. 保存项目。

步骤 2:启动 Business Events 运行时

要启动 Business Events 运行时,请执行以下操作步骤:

  1. 选择“开始”=>“IBM WebSphere”=>“Application Server Network Deployment”=>“Profiles”=>“AppSrvr01”=>“Start Server”
  2. 在 Web 浏览器中打开 WebSphere Application Server 管理控制台并登录。例如,打开 http://localhost:9060/ibm/console并使用用户名 admin 登录。
  3. 在控制台中,确保 WBERuntime 应用程序已启动,如图 27 所示。
    图 27. 确保 Business Events 在控制台中运行
    确保 Business Events 在运行
  4. 确保数据库管理器已启动。如果您在使用 Derby,可以从 <WBE Install>\WAS\derby\bin\networkServer目录中调用 startNetworkServer.bat

步骤 3:将 Business Events 应用程序部署到运行时

要将 Business Events 应用程序部署到运行时,请执行以下操作步骤:

  1. 在 Design Data 工具中,选择 Tools => Repositories,然后单击 Login
  2. 指定用户名和密码。
  3. 如果您正在使用的 WebSphere Application Server 版本未使用缺省端口号,您可能需要指定不同的端口号(除 9080 以外的端口号)。
  4. 按 Ctrl+A 选择 Repository 对话框的 Project 选项卡上的构件列表中的所有元素,然后单击 Add in,如图 29 所示。这将把所有元素添加到存储库。请注意,您可能需要再次输入用户名和密码。
    图 28. Repository 视图
    Repository 视图
  5. 单击 Close 并退出 Design Data 工具。确保保存项目。

步骤 4:启用历史记录

现在已经部署了该项目,您可以启用 Business Events 历史记录功能。这使得 Business Events 运行时能够跟踪事件、操作、筛选器和交互集,以便您可以在发送事件时检查 Business Events 中发生的情况。

  1. 选择“开始”=>“IBM WebSphere Business Events v6.1”=>“Events”=>“Properties”
  2. 同时指定 wbe 作为用户 ID 和密码,单击 Next,然后再次单击 Next
  3. 在 Server Settings 对话框中,将 Enable historyfalse 更改为 true
  4. 单击 Save and exit

步骤 5:重新启动 Business Events 运行时

重复步骤 2 中的步骤重新启动 Business Events 运行时。

步骤 6:启动连接器进程

要启动连接器进程,可以从 <WBE_install> \director\bin 目录运行 connector.bat(或 .sh)。


测试应用程序

现在让我们看看 Business Events Buy 和 Sell 事件,并测试能否生成操作。

  1. 将下面所示的示例 Buy 事件复制并粘贴到某个文件中,并将其保存为 Buy_event.xml。确保文件名与文件连接器模式 Buy*.xml 匹配。
    <connector name="Trade System" version="2.2">
      <connector-bundle name="Buy" type="event">
        <connector-object name="TradeObject">
          <field name="CustomerID" type="String">Jamie Danny</field>
          <field name="StockID" type="String">IBM</field>
          <field name="Date" type="DateTime">2008-06-04T10:04:41Z</field>
          <field name="Quantity" type="Real">10</field>
          <field name="Price" type="Real">150</field>
        </connector-object>
      </connector-bundle>
      <system>TISMANA</system>
      <timestamp>2008-06-04T10:04:41Z</timestamp>
      <loginfo>Test values from WebSphere Business Events:Design Data</loginfo>
    </connector>
  2. 将下面的示例 Sell 事件复制并粘贴到某个文件中,并将其保存为 sell_event.xml。同样,确保文件名与文件连接器模式 Sell*.xml 匹配。
    <connector name="Trade System" version="2.2">
      <connector-bundle name="Sell" type="event">
        <connector-object name="TradeObject">
          <field name="CustomerID" type="String">Jamie Danny</field>
          <field name="StockID" type="String">IBM</field>
          <field name="Date" type="DateTime">2008-06-04T10:07:15Z</field>
          <field name="Quantity" type="Real">9</field>
          <field name="Price" type="Real">150</field>
        </connector-object>
      </connector-bundle>
      <system>TISMANA</system>
      <timestamp>2008-06-04T10:07:15Z</timestamp>
      <loginfo>Test values from WebSphere Business Events:Design Data</loginfo>
    </connector>
  3. 将 Buy 事件文件复制到文件连接器中指定的位置,例如 c:\WBE\test\Buy。
  4. 等待 1 分钟(连接器属性中指定的轮询间隔)。在此阶段,该事件文件应该消失,并且应该在操作连接器中指定的目录(例如,c:\WBE\testactions)中生成一个 Buy Ack 操作。
  5. 下一步,发送一个针对相同客户和股票的 Sell 事件。这应该生成一个 Sell After Buy 操作。
  6. 向 Business Events 发送附加的 Buy 和 Sell 事件,以导致生成 Speculative Customer 操作。

图 29 显示了 c:\WBE\testactions 中的示例输出,其中具有测试中生成的操作文件。

图 29. 使用文件连接器的示例 Business Events 输出
使用文件连接器的示例 Business Events 输出

注意:您还可以使用位于 <WBE_install>\director\bin 中的 cmdline 工具直接向 Business Events 发送事件。要使用该工具,可以运行命令 cmdline <Event file>.xml。例如,您可以发出以下命令以将一个 Buy 事件发送到 Business Events: cmdline c:\temp\Buy_event.xml.

注意:如果您看到以下消息在连接器窗口中重复多次:

FS Sending event: Sell
FS Sending event: Sell
.…

并且没有看到预期的输出操作,请确保您正确完成了指定连接器信息部分中的步骤 5。必须将连接器格式设置为 Connector Packet,才能正确地触发事件。

使用 Business Events 监视器查看报告

您还可以使用 Business Events 监视器查看在处理事件时 Business Events 中所发生的情况。这是通过启用历史记录来实现的。要使用 Business Events 监视器查看报告,请执行以下操作步骤:

  1. 在浏览器中输入以下 URL:http://localhost:9080 /wbe/common/login.jsp。确保对 Application Server 使用正确的端口号。
  2. 输入用户名和密码并从 Tool 列表中选择Administrator,然后单击 Login
  3. 单击控制面板顶部的 Reports 图标。
  4. 选择 Actions by Touchpoint by time 作为 Report Type
  5. 单击 Generate Report 图标运行报告。报告显示在单独的窗口中,如图 30 所示。查看操作列表以后,关闭该窗口。
    图 30. Business Events 监视器的示例输出
    Business Events 监视器中的示例输出

通过从 Reports 视图中选择不同的报告类型,您可以查看 WebSphere Business Events 在其执行过程中使用的事件、筛选器、策略、流和中间对象。


总结

您现在已经了解了如何构建和运行 Business Events 应用程序。在本系列的后续文章中,我们将使用该示例场景和这个应用程序来演示其他 IBM 产品如何为 Business Events 提供事件并使用其操作。


致谢

作者要感谢 Eric Erpenbach 和 James Taylor 对本文提供了建议和反馈。


下载

描述名字大小
XML 文件TradingSystem.zip3KB

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


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


忘记密码?
更改您的密码

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

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

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

选择您的昵称



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

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

标有星(*)号的字段是必填字段。

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

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

 


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


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=389188
ArticleTitle=使用 WebSphere Business Events 进行业务事件处理,第 2 部分: 构建业务事件应用程序
publish-date=05182009