使用 WS-BPEL 和 IoC 构建可配置工作流程,第 2 部分_开发并托管 BPEL 工作流程

本系列包含两篇文章,第 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 的样例应用程序。

使用 BPEL 变量

回忆一下第 1 部分 清单 2 中的 <variables><sequence> 标记。这两个 BPEL 标记共同表达一个业务工作流程的逻辑。这一部分将阐述如何使用 <variables> 标记。

为合并的生产工作流程定义变量

对于在执行工作流程过程中需要处理的业务数据来说,需要定义变量来保存它们。例如,您可以使用一个变量来保存一个生产指令中的产品清单。我使用如下的变量来实现合并的生产工作流程:

  • productionOrder 用于保存合并生产工作流程收到的生产指令。
  • response 用于在执行任务层的所有任务之后,保存合并生产工作流程的最终响应。
  • listOfItems 用于保存一个生产指令中所包含的产品清单。
  • itemType 用于指定生产产品的类型。我用它来检查产品是大量生产 还是批量生产
  • processDetails 用于保存大量生产产品的流程细节。
  • workOrder 用于保存工作指令。
  • manufacturingSchedule:用于保存批量生产的产品的制造日程表。
  • 还有其他一些用于保存临时处理数据的变量。

我将在解释在 BPEF 文件中定义的流程逻辑时讨论这些变量的用法。

清单 1 展示了如何在 BPEL 文件中定义这些变量:


清单 1. 为合并的生产工作流程定义变量
				
<?xml version="1.0" encoding="UTF-8"?>
<process name="MergedProductionWorkflow">
<import />
<!-- other import tags -->
<partnerLinks />
<variables>
<variable name="productionOrder"
messageType="prod:ProductionOrderMessage"/>
<variable name="response"
messageType="prod:ProductionResponseMessage"/>
<variable name="productionItems"
messageType="prod:ProductionItemsMessage"/>
<variable name="itemType" type="xsd:string"/>
<variable name="processDetails"
messageType="prod:ProcessDetailsMessage"/>
<variable name="workOrder"
messageType="prod:WorkOrderMessage"/>
<variable name="manufacturingSchedule"
messageType="prod:ManufacturingScheduleMessage"/>
<variable name="productionItem"
messageType="prod:ProductionItemMessage"/>
<!-- A few other variables to hold temporary data -->
</variables>
<sequence />
</process>

清单 1 展示了您在第 1 部分的 清单 2 中见到的 <variables> 标记的扩展形式。<variables> 标记中又包含了几个 <variable> 标记,它们分别对应您为生产工作流程定义的每个变量。

每一个 <variable> 标记定义了每个变量的名称和数据类型。name 属性定义变量的名称。例如,清单 1 中的第一个 <variable> 标记的名称为 productionOrdermessageType 属性定义变量的数据类型。例如,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中国

      请点击此处查看全文


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值