本系列包含两篇文章,第 1 部分 呈现了一个两层的分析静态业务流程的模型,并论述了如何用 IoC 和 Web 服务业务流程执行工作语言(Web Services Business Process Execution Language,WS-BPEL)来实现每个层。在这部分(第 2 部分)中,我将解释如何用 BPEL 来表达工作流程的业务逻辑,并展示部署 IoC 和 BPEL 的方式,以控制工作流程的行为。
首先,我将解释如何使用 BPEL 来表达工作流程的动态行为。然后,我将展示将 BPEL 文件托管在 Apache ODE(一个基于 Java™ 的开源 BPEL 工具)上的具体过程。接着,我将阐述将任务层的每个 Java bean 的服务公开为 Web 服务的具体步骤。最后,我将演示一个基于 BPEL 和 IoC 的样例应用程序。
回忆一下第 1 部分 清单 2 中的 <variables>
和 <sequence>
标记。这两个 BPEL 标记共同表达一个业务工作流程的逻辑。这一部分将阐述如何使用 <variables>
标记。
对于在执行工作流程过程中需要处理的业务数据来说,需要定义变量来保存它们。例如,您可以使用一个变量来保存一个生产指令中的产品清单。我使用如下的变量来实现合并的生产工作流程:
productionOrder
用于保存合并生产工作流程收到的生产指令。response
用于在执行任务层的所有任务之后,保存合并生产工作流程的最终响应。listOfItems
用于保存一个生产指令中所包含的产品清单。itemType
用于指定生产产品的类型。我用它来检查产品是大量生产 还是批量生产。processDetails
用于保存大量生产产品的流程细节。workOrder
用于保存工作指令。manufacturingSchedule
:用于保存批量生产的产品的制造日程表。- 还有其他一些用于保存临时处理数据的变量。
我将在解释在 BPEF 文件中定义的流程逻辑时讨论这些变量的用法。
清单 1 展示了如何在 BPEL 文件中定义这些变量:
清单 1. 为合并的生产工作流程定义变量
|
清单 1 展示了您在第 1 部分的 清单 2 中见到的 <variables>
标记的扩展形式。<variables>
标记中又包含了几个 <variable>
标记,它们分别对应您为生产工作流程定义的每个变量。
每一个 <variable>
标记定义了每个变量的名称和数据类型。name
属性定义变量的名称。例如,清单 1 中的第一个 <variable>
标记的名称为 productionOrder
。messageType
属性定义变量的数据类型。例如,productionOrder
变量的数据类型为 prod:ProductionOrderMessage
,它是由 prod
名称空间定义的。接下来,我将解释 BPEL 变量的类型如何映射到在 BPEL 应用程序和它的合作伙伴服务之间交换的消息。
回忆一下在第 1 部分中将 BPEL 文件链接到合作伙伴服务那一部分(参见 链接到您的服务合作伙伴 部分)。每个合作伙伴服务提供任务层的一个任务的功能,并用 Web 服务定义语言(Web Service Definition Language,WSDL)接口公开它的功能(每个合作伙伴服务的所有 WSDL 文件都包含在本文的源代码下载中;参见 下载)。
BPEL 文件中的变量保存的数据被传递给合作伙伴服务进行处理。例如,BPEL 引擎将 productionOrder
变量保存的生产指令的数据传递给一个名为 Items2BProducedPartnerService
的合作伙伴服务,然后合作伙伴服务从生产指令中提取产品清单。productionOrder
变量的数据类型一定要与定义为 Items2BProducedPartnerService
的输入的 WSDL 数据类型相匹配。
清单 2 展示了 Items2BProducedPartnerService
的 WSDL 文件,它帮助您了解 BPEL 变量的数据类型如何与 WSDL 消息匹配:
清单 2.
Items2BProducedPartnerService
的 WSDL 接口
本文转自IBM Developerworks中国