您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
建模业务流程,第 3 部分: 高级建模
 
作者 Xi Ning Wang、Lei (Joyce) He、Liu Yu,火龙果软件    发布于 2014-09-30
  3376  次浏览      16
 

本系列的第 3 部分将介绍如何使用 WebSphere Lombardi Edition V7.1 的高级功能来完善业务流程,从而满足更复杂的需求,这些需求中包括嵌套的流程、里程碑、事件机制、异常处理和 Lombardi Web 服务公开。

概述

本系列的 第 1 部分 概述了 WebSphere Lombardi V7.1(以下简称 Lombardi)的功能和架构。在 第 2 部分 中,学习了如何使用最常用的 Lombardi 功能(包括业务流程定义以及 Integration、Human 和 Rule 服务)来建模示例流程。

在本文中,您将学习如何使用 Lombardi 的高级功能来完善业务流程,从而满足更复杂的需求,这些需求中包括嵌套的流程、里程碑、事件机制、异常处理和 Lombardi Web 服务公开。我们将使用第 1 和 2 部分中介绍的购买订单场景演示这些功能。

完善流程功能

在本节中,我们将介绍能够完善示例流程功能的一些方法。

向流程添加里程碑

您可以向流程图添加里程碑来演示流程执行的各个阶段。为此,可以将 Milestone 元素拖入流程图中,并为该里程碑输入一个名称。例如,您可以添加一个 Order Submission 里程碑来捕获某个流程的初始订单提交阶段中发生的跨通道活动,如图 1 所示。

图 1. 某个流程中的里程碑

您也可以导入和解压 下载 部分的 Lombardi .twx 导出文件,以查看已完成的业务流程定义。

除了 Order Submission 里程碑,还为我们场景中的重要阶段定义了其他两个里程碑,如图 1 所示:

Order Validation 里程碑 - 用于验证订单,包括订单是否需要购买者重新确认,以及提供商的响应等。

Order Fulfillment 里程碑 – 用于演示最终订单生成、送货和支付活动。

创建嵌套流程

您可以使用嵌套流程来封装与某个父流程中的其他每个流程相关的活动。使用嵌套流程,可以管理业务流程的复杂性,同时保留在父流程定义中表示的总体流程的高级视图。业务流程定义 (BPD) 中的每个活动都可以有一个附加的嵌套流程,嵌套流程中的每个活动也可有一个附加的嵌套流程,等等。

当在运行时触发某个嵌套流程所实现的一个活动时,会执行附加的嵌套流程。嵌套流程运行完成后,父流程就会恢复执行。

在示例购买订单流程中,ERP 通道中的 GenerateOrder 活动是使用一个名为 Generate Order 的嵌套流程来实现的,该流程包含 3 个活动:Calculate Price、Select Shipper 和 Schedule Shipper。该嵌套流程的实现类似于一般的 BPD 开发。

您可以将该嵌套流程链接到父流程中的 GenerateOrder 活动。为此,在 Purchase Order Process BPD 中,请单击 GenerateOrder 活动并选择属性中的 Implementation 选项卡。在 Implementation 下,从下拉菜单中选择 Lombardi Nested Process。单击 Select 从现有业务流程定义列表中选择 BPD,然后从列表中选择 Generate Order BPD,如图 2 所示。

图 2. 使用嵌套流程实现一个活动

在 Order Validation 里程碑中,所有活动组合为一个嵌套的 Order Confirmation 流程,如图 3 所示。除了附加到 Buyer Confirms Order 活动的计时器事件(我们稍后进行讨论),其他所有活动和网关都与您在本系列前几部分中实现的相同。

图 3. 嵌套的 Order Confirmation 流程

自定义事件处理

在本节中,您将学习一些自定义示例流程中的事件处理方式。

什么是 Undercover Agent

在了解事件处理实现之前,您应该理解 Lombardi 概念 Undercover Agent (UCA)。UCA 由一个事件启动,该事件可通过一条消息或按照特定的时间表触发。当 UCA 启动时,它会调用一个附加的服务来响应该事件。

从本系列的第 1 部分,您已知道 Event Manager 是 Process Server 的一部分,负责处理事件调度和排队。Event Manager 需要一个 UCA 来查找它应该运行的服务。因此,如果您希望在收到一条传入消息事件时调用一个服务,或者如果您希望在一个事件定期发生后调用一个服务,那么您应该创建一个 UCA 代理。本节后面会更详细地介绍这个概念。

传入的消息可能源自您创建的一个 Web 服务,或者源自您向 JMS Listener 发布的一条消息。在示例中,我们将使用 Web 服务来从外部系统发起入站请求。

Lombardi 提供了哪些事件类型?

Lombardi 提供了一种灵活且强健的事件机制,可在一个运行时流程开始、运行或结束时启用事件。Lombardi 提供了 10 种不同的事件类型,包括我们将在示例场景中使用的以下 4 种事件:

开始事件 - 每次创建 BPD 时会自动包含一个开始事件。可以使用该事件来建模一个流程或嵌套流程的开始。每个 BPD 中只有一个开始事件。
结束事件 - 每次创建 BPD 时会自动包含一个结束事件。在嵌套流程运行完成后,父流程就会恢复执行。

中间消息事件 - 一个 BPD 可包含多于一个中间消息事件。可以使用该事件来建模在流程运行时收到的消息事件。该事件由您选择的 UCA 触发。

计时器事件 - 使用计时器事件来建模您 BPD 中的升级路径或延迟。使用计时器事件,您可以指定一个时间间隔,让某个活动在此时间间隔之后或之前执行。

创建中间消息事件

在示例场景的 Generate Order 嵌套流程中,要求购买者先支付订单费用,然后才会执行 Select Shipper 活动。这意味着,该流程需要一个中间消息事件来等待支付通知,然后才执行 Select Shipper 活动。

让我们选择一个中间消息事件来演示 Lombardi 中的事件处理机制:

通过将一个 Intermediate Message Event 元素从面板拖入 Generate Order BPD 图中,创建一个事件并指定 Wait for Buyer's Payment 作为名称。将此消息事件连接在 Calculate Price 活动与 Select Shipper 活动之间,如图 4 所示。

图 4. 创建一个中间消息事件

创建一个名为 Payment Integration Service 的 Integration 服务,或使用在 下载 中提供的已创建的 payment.jar。

在 Designer 视图中,单击库中 Files 旁边的加号 (+),选择一个服务器文件以添加 JAR 文件。在 New File 对话框中,单击 Browse 选择 JAR 文件。

现在您可以在 Java 集成中使用这个外部 Java? 类。

将一个 Java Integration 组件从面板拖到服务图中,然后使用序列线 (sequence line) 将该组件连接到开始和结束事件。单击图中的 Java Integration 组件,然后选择属性中的 Definition 选项。单击 Java Class 字段旁边的 Select,选择 JAR 文件和 JAR 文件的类,如图 5 所示。这个 Java 类中的操作的输入数据类型为 String,输出数据类型十进制。

图 5. Java 集成

创建一个名为 Payment Service 的一般系统服务,将 Payment Integration Service 拖入此图中,如图 6 所示。单击 Input Mapping 和 Output Mapping 部分中的自动映射图标,自动创建服务的变量,以便关联一些通用系统服务。

图 6. Payment Service

创建一个名为 Settle Payment UCA 的基于事件的 UCA,以包装新创建的 Payment Service。指定 On Event 作为计划类型,如图 7 所示。

图 7. 创建 Settle Payment UCA

将 Undercover Agent 附加到消息事件。

选择 Generate Order BPD 中的 Wait for Buyer's Payment 中间消息事件,单击属性中的 Implementation 选项。在 Message Trigger 部分中,单击 Attached UCA 字段旁边的 Select,以便从 Undercover Agent 列表中选择 Settle Payment UCA。

Consume Message 默认情况下已选定。如果您不希望在消息事件收到传入消息后使用它,那么请取消选择它。

如果选择了 Durable Subscription,则意味着消息事件可接受一个传入消息,甚至在消息事件未处于活动状态时便可接受传入消息。

在 UCA Output Correlation 部分中,您需要将合适的 UCA 输出变量映射到 BPD 中的一个局部变量,以便将消息事件与 BPD 实例相关联。以下是用作 UCA 输出关联的订单 ID,如图 8 所示。

图 8. 将 UCA 附加到中间消息事件

创建计时器事件

有两种类型的计时器事件:一个是附加的计时器事件,它直接附加到 BPD 中的某个活动,另一个是一个中间件计时器事件,它使用序列线连接到其他流程状态。如果将某个计时器事件为附加到某个活动,则会导致延迟。在继续到下一个活动之前,流程会等待计时器触发。您可以使用计时器事件指定一个时间间隔,让某个活动会在该时间间隔之前或之后执行,或者在该时间间隔之前或之后进入您流程中的另一个路径。

让我们看看如何在示例场景中使用计时器事件机制。在嵌套 Order Confirmation 流程中,如果提供商更改商品的数量或价格,Rule 服务会依据业务规则验证订单更改。此时,购买者可能需要重新确认订单。在此情况下,如果购买者在 1 周(7 天)内没有确认该订单,这意味着购买者已默认接受此订单。

图 9 显示了一个示例附加计时器事件。在示例中,计时器确保如果流程到达 Buyer Confirms Order 活动特定时间量(在本例中为 1 分钟),则会传递该活动,该流程将前进到下一步(结束事件)。

图 9. 附加计时器事件示例

添加异常处理

当您开发的流程需要集成外部系统、服务器脚本和其他复杂实现时,您需要预测潜在异常,创建在发生这些异常时处理它们所需的组件。

有两种针对 BPD 的异常事件:中间异常事件,它用于捕获流程执行异常,并使用错误处理器活动或更多流程流来处理异常,还有最终异常事件,它用于向父流程抛出一个异常。

在示例购买订单场景中,Shipper Selection 由系统自动完成,它公开为一个 Web 服务。在 Generate Order 嵌套流程中,如果在调用此服务时抛出了一个异常,则假设系统需要通知提供商。

要满足此需求,请将 Intermediate Exception Event 元素从面板拖入 Select Shipper 活动,然后向流程添加一个名为 Send Exception to Supplier 的新活动。随后请将 Intermediate Exception Event 组件连接到该新活动,如图 10 所示。

图 10. 添加中间异常事件

Select Shipper 活动的异常处理到此就结束了。当 Select Shipper 活动中出现错误时,该流程会自动转到 Send Exception to Supplier 活动。

公开 Lombardi Web 服务

Web 服务定义将一个 Lombardi 服务(或一组 Lombardi 服务)公开为可进行 SOAP 调用的 Web 服务。这允许企业应用程序访问在 Lombardi 中开发的业务流程管理应用程序。您可以创建和发布 Web 服务,使外部应用程序能够发起一个特定的 Lombardi 服务或一组服务。

在示例场景中,我们将创建一个 Web 服务,使用合适的输入调用 Settle Payment UCA 来发送事件(调用方服务)。为此,请执行以下步骤:

创建一个名为 Call Payment UCA Service 的一般系统服务。

将一个 Invoke UCA 元素拖入图中,指定 Kickoff Settle Payment UCA 作为名称。在 Implementation 选项卡上,请选择 Settle Payment UCA 作为附加 UCA,如图 11 所示。

图 11. Call Payment UCA Service

接下来,您需要将 Call Payment UCA Service 公开为一个 Web 服务供外部调用。在 Designer 视图中,选择 Implementation 类别旁边的加号 (+),然后从列表中选择 Web Service 来创建一个名为 PaymentWS 的 Web 服务。

在 Operations 部分中,单击 Add 以选择一个要添加的现有服务(Call Payment UCA Service)。指定 callPaymentUCA 作为操作名称,如图 12 所示。

要查看结果 Web 服务的 XML 描述及它的元素和操作,请单击 Behavior 部分中的 WSDL URI。

图 12. 创建一个 Web 服务

结束语

在本系列的第 3 部分中,您学习了如何使用 WebSphere Lombardi Edition V7.1 的一些高级功能来完善示例流程,从而满足更复杂的需求,这些需求中包括添加嵌套流程、里程碑、事件机制、异常处理和公开 Lombardi Web 服务。在本系列未来的文章中,您将学习如何使用 coach 构建 Human 服务。

   
3376 次浏览       16
相关文章

多维方法来开发有机的业务流程架构
SCA 应用程序开发
BPM 和 SOA 性能最佳实践
实现企业服务总线模式
相关文档

SCA介绍及应用实例
基于SOA架构的ESB平台:Infomagic
SCA架构
SOA的基本概念
相关课程

面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

基于SOA的工作流(WF)整合
SOA 100问 - 问与答
SOAP 应用模式:处理与性能
ESB架构之企业实施案例
基于SOA架构的企业集成系统
基于SOA的体系架构设计
更多...   


面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践


某第三方电子支付企业 SOA架构设计
某电子企业 SOA应用
中国移动 SOA培训
北京大学 SOA架构设计实践
友邦保险 SOA架构设计
上海 SOA架构实践
山东移动通信 SOA体系结构实践
更多...