BPEL 简明开发手册(2)

2018-12-21 13:54

? 使用 指示故障和异常 ? 使用 等待一段时间 ? 使用 终止整个流程。

然后,我们可以组合这些基元活动以及其它基元活动,以定义准确指定业务流程步骤的复杂算法。为组合基元活动,BPEL 支持几个结构活动。其中最重要的是:

? 顺序 (),它允许定义一组将按顺序调用的活动。 ? 流 (),用于定义一组将并行调用的活动 ? Case-switch 构造 (),用于实现分支 ? While (),用于定义循环

? 使用 能够选择多个替换路径之一。

每个 BPEL 业务还将使用 定义合作伙伴链接,使用 声明变量。

为了理解 BPEL 是如何描述业务流程的,我们将定义雇员的出差安排简化业务流程:客户端调用此业务流程,指定雇员姓名、目的地、出发日期以及返回日期。此BPEL业务流程首先检查雇员出差状态。我们将假设存在一个可用于进行此类检查的Web服务。然后,此BPEL流程首先检查雇员出差状态。我们假设存在一个可用于进行此类检查的Web服务。然后,此BPEL流程将检查以下两家航空公司的机票价格:美国航空公司和达美航空公司。我们将再次假设这两家航空公司均提供了可用于进行此类检查的Web服务。最后,此BPEL流程将选择较低的价格并将出差计划返回给客户端。

然后,我们将构建一个异步BPEL流程。我们将假设用于检查雇员出差状态的Web服务是同步的。由于可以立即获取此数据并将其返回给调用方,因此这是一个合理的方法。为了获取机票价格,我们使用异步调用。由于确认飞机航班时刻表可能需要稍长的时间,因此这也是一个合理的方法。为了简化示例,我们假设以上两家航空公司均提供了Web服务,且这两个Web服务完全相同(即提供相同的端口类型和操作)。

在实际情形下,您通常无法选择 Web 服务,而是必须使用您的合作伙伴提供的服务。如果您有幸能够同时设计 Web 服务和 BPEL 流程,则应考虑用哪个接口更好。通常,您将对持续时间较长的操作使用异步服务,而对在相对较短的时间内返回结果的操作使用同步服务。如果使用异步Web服务,则BPEL流程也通常是异步的。 当您用BPEL定义业务流程时,您实际上定义了一个由现有服务组成的新Web服务。该新BPEL复合Web服务的接口使用一组端口类型提供了类似任何其它Web服务的操作。要调用BPEL描述的业务流程,则必须调用生成的复合Web服务。图3是我们流程的示意图。 项目名称: 版本:<0.1> 文档名称:BPEL 简明开发手册 日期:<2006/11/25> 文档创建者:Sika Team 公司机密文件,请勿外漏

在开发此示例 BPEL 流程的过程中,您将经历下列步骤:

? 熟悉相关的 Web 服务 ? 为此 BPEL 流程定义 WSDL ? 定义合作伙伴链接类型 ? 开发此 BPEL 流程:

o 定义合作伙伴链接 o 声明变量

o 编写流程逻辑定义。

第 1 步:列出相关 Web 服务的清单 ―――――――定义每一个接口,即所谓的web服务清单的PortType 在您开始编写BPEL流程定义之前,必须先熟悉从业务流程中调用Web服务。这些服务称作合作伙伴Web服务。 在您开始编写BPEL流程定义之前,必须先熟悉coong业务流程中调用Web服务。这些服务称作为合作伙伴Web服务。本示例使用雇员出差状态Web服务以及美国航空公司和达美航空公司Web服务(这两个 Web 服务具有相同的 WSDL 描述)。(同样,本示例中使用的 Web 服务是虚构的。)

雇员出差状态 Web 服务雇员出差状态 Web 服务提供 EmployeeTravelStatusPT 端口类型,通过它可以使用 EmployeeTravelStatus 操作检查雇员出差状态。此操作将返回雇员可以使用的乘机标准(可能为经济舱、商务舱或头等舱)。(见图 4。)

Page 7 项目名称: 版本:<0.1> 文档名称:BPEL 简明开发手册 日期:<2006/11/25> 文档创建者:Sika Team 公司机密文件,请勿外漏

航空公司 Web 服务航空公司 Web 服务是异步的;因此它指定了两个端口类型:第一个端口类型

FlightAvailabilityPT 用于使用 FlightAvailability 操作检查航班可用性。为返回结果,该 Web 服务指定了第二个端口类型 FlightCallbackPT。此端口类型指定 FlightTicketCallback 操作。

尽管航空公司 Web 服务定义了两个端口类型,但它只实现 FlightAvailabilityPT。FlightCallbackPT 则由作为 Web 服务客户端的 BPEL 流程实现。图 5 是此 Web 服务体系结构的示意图: 第 2 步:为 BPEL 流程定义 WSDL

接下来,我们必须将此业务出差 BPEL 公开为 Web 服务。因此,第二步是为它定义 WSDL。此流程将必须从它的客户端接收消息并返回结果。它必须公开 TravelApprovalPT 端口类型,后者将指定一个输入消息。它还必须声明 ClientCallbackPT 端口类型(用于使用回调将结果异步返回给客户端)。图 6 说明了此流程。

Page 8 项目名称: 版本:<0.1> 文档名称:BPEL 简明开发手册 日期:<2006/11/25> 文档创建者:Sika Team 公司机密文件,请勿外漏 Page 9

第 3 步:定义合作伙伴链接类型(partnerLinkType) ―――――――定义了由哪些PortType组成了一个交互调用过程。需要为每一个交互调用定义一个partnerLinkType

第三步是定义合作伙伴链接类型。合作伙伴链接类型表示BPEL流程与相关方(包括BPEL流程调用的Web服务以及调用BPEL流程的客户端)之间的交互。

本示例包含三个不同的合作伙伴:客户端、雇员出差状态服务和航空公司服务。理想情况下,每个Web服务都应在WSDL包装合作伙伴链接。(实际情形可能不是这样的。)然后,我们可以用WSDL包装合作伙伴Web服务(倒入Web服务的WSDL兵定义合作伙伴链接类型)。或者,我们可以在BPEL流程的WSDL中定义所有合作伙伴链接。但由于此方法违反了封装原则,因此不建议使用。

对于本示例,我们定义了三个合作伙伴链接类型(每个类型位于 Web 服务的相应 WSDL 中):

? travelLT:用于描述此 BPEL 流程客户端与此 BPEL 流程本身之间的交互。此交互是异步交互。此合作伙

伴链接类型在此 BPEL 流程的 WSDL 中定义。 ? employeeLT:用于描述此 BPEL 流程与雇员出差状态 Web 服务之间的交互。此交互是同步交互。此合作伙

伴链接类型在雇员 Web 服务的 WSDL 中定义。 ? flightLT:描述此 BPEL 流程与航空公司 Web 服务之间的交互。此交互是异步交互,且航空公司 Web 服

务对此 BPEL 流程调用一个回调。此合作伙伴链接类型在航空公司 Web 服务的 WSDL 中定义。

每个合作伙伴链接可以拥有一个或两个角色,我们必须为每个角色指定它使用的 portType。对于同步操作,由于操作只是单向调用,因此每个合作伙伴链接类型仅有一个角色。例如,此 BPEL 流程对雇员出差状态 Web 服务调用 EmployeeTravelStatus 操作。由于它是同步操作,因此此 BPEL 流程等待完成并仅在完成操作后取得响应。

对于异步回调操作,我们必须指定两个角色。第一个角色描述客户端操作调用。第二个角色描述回调操作调用。在本示例中,BPEL 流程与航空公司 Web 服务之间存在一个异步关系。

正如我们已经指出的,我们需要三个合作伙伴链接类型:两个链接类型指定两个角色(因为它们是异步的),一个链接类型指定一个角色(因为它是同步的)。

合作伙伴链接类型在特殊命名空间http://schemas.xmlsoap.org/ws/2003/05/partner-link/ 的 WSDL 定义。首先,我们在客户端使用的 BPEL 流程 WSDL 中定义 travelLT 链接类型以调用此 BPEL 流程。所需的第一个角色是出差服务(即,我们的 BPEL 流程)的角色。客户端使用 TravelApprovalPT 端口类型与此 BPEL 服务通信。第二个角色 travelServiceCustomer 描述了此 BPEL 流程将在 ClientCallbackPT 端口类型中对其执行回调的客户端的特征:

项目名称: 版本:<0.1> 文档名称:BPEL 简明开发手册 日期:<2006/11/25> 文档创建者:Sika Team 公司机密文件,请勿外漏 Page 10

第二个链接类型是 employeeLT。它用于描述此 BPEL 流程与雇员出差状态 Web 服务之间的通信,并在此雇员 Web 服务的 WSDL 中定义。此交互是同步交互,因此我们需要一个名为 employeeTravelStatusService 的角色。此 BPEL 流程使用雇员 Web 服务上的 EmployeeTravelStatusPT:

注意:因为此过程序同步的,所以只有一个角色,不同于其它两个通信过程。

最后一个合作伙伴链接类型 flightLT 用于描述此 BPEL 流程与航空公司 Web 服务之间的通信。此通信是异步通信。此 BPEL 流程对航空公司 Web 服务调用一个异步操作。此 Web 服务在完成请求后对此 BPEL 流程调用一个回调。因此,我们需要两个角色。第一个角色描述航空公司 Web 服务对于此 BPEL 流程服务的角色,即航空公司服务 (airlineService)。此 BPEL 流程使用 FlightAvailabilityPT 端口类型进行异步调用。第二个角色描述了此 BPEL 流程对于航空公司 Web 服务的角色。对于航空公司 Web 服务而言,此 BPEL 流程是一个航空公司客户,因此角色名称为 airlineCustomer。航空公司 Web 服务使用 FlightCallbackPT 端口类型进行回调。此合作伙伴链接类型在航空公司 Web 服务的 WSDL 中定义:

了解合作伙伴链接类型对于开发 BPEL 流程规范至关重要。有时,它可以帮助生成所有交互的图表。定义合作伙伴链接类型后,我们已经完成了准备阶段,并准备开始编写业务流程定义。 第 4 步:创建业务流程 ―――――――在bpel文件中定义业务流程

现在,您就可以开始编写 BPEL 流程了。通常,BPEL 流程等待客户端传入的消息,以启动业务流程的执行。在本示例中,客户端通过发送输入消息TravelRequest 启动此 BPEL 流程。然后,此 BPEL 流程通过发送 EmployeeTravelStatusRequest 消息调用雇员出差状态 Web 服务。由于此调用是同步调用,因此它等待 EmployeeTravelStatusResponse 消息。然后,此 BPEL 流程通过向上述两家航空公司 Web 服务发送

FlightTicketRequest 消息对它们进行并发异步调用。每个航空公司 Web 服务通过发送 TravelReponse 消息进行回调。然后,此 BPEL 流程选择较合适的航空公司并使用 TravelResponse 消息对客户端进行回调。我们首先编写一个空的 BPEL 流程提纲,它展示了每个 BPEL 流程定义文档的基本结构: 项目名称: 版本:<0.1> 文档名称:BPEL 简明开发手册 日期:<2006/11/25> 文档创建者:Sika Team 公司机密文件,请勿外漏 Page 11


BPEL 简明开发手册(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新型自动站观测仪器的管理和维护

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: