生成可执行BPEL代码所需必要信息分析和归纳

文章仅供大家参考,所有评论, 错误报告, 其他信息以及批评, 请邮寄到 Jeffery.Lee AT gmail.com 或者访问我的个人blog同我交流( http://ibuddie.spaces.live.com/ )。本文遵从GNU 的自由文档许可证(Free Document License)的条款,欢迎转载,如若修改、散布,请注明文章原始出处和来源。


生成可执行BPEL代码所需必要信息分析和归纳

JSSOA BPEL Designer实现具体的流程定义并生成对应的可执行BPEL代码,根据之前的架构设计并结合具体的贷款申请案例,本文将对具体的生成一个可执行的BPEL所需的信息进行归纳和总结,便于详细设计时参考。

另外,根据目前我所接触到的BPEL设计器来看,BPEL想达到非程序设计人员或者所谓的“业务分析员”也能使用的程度还有相当大的距离,虽然不断有新的IT供应商为构建BPEL流程提供了广泛的可视化设计产品,但技术上没有实质性的突破,我认为短时间内这种情况不会有大的改变。基于这种判断,本文在归纳和总结生成BPEL代码所必要信息时暂时不过多的考虑信息获取的具体实现。

BPEL代码分析

我们还是以BPEL规范中的贷款申请(Loan Approval)为例。该案例流程实现后的可执行BPEL代码如下:

< process name ="loanApprovalProcess"

targetNamespace
="http://example.com/loan-approval/"

xmlns
="http://docs.oasis-open.org/wsbpel/2.0/process/executable"

xmlns:lns
="http://example.com/loan-approval/wsdl/"

suppressJoinFailure
="yes" >

< import importType ="http://schemas.xmlsoap.org/wsdl/"

location
="loanServicePT.wsdl"

namespace
="http://example.com/loan-approval/wsdl/" />

< partnerLinks >

< partnerLink name ="customer"

partnerLinkType
="lns:loanPartnerLT"

myRole
="loanService" />

< partnerLink name ="approver"

partnerLinkType
="lns:loanApprovalLT"

partnerRole
="approver" />

< partnerLink name ="assessor"

partnerLinkType
="lns:riskAssessmentLT"

partnerRole
="assessor" />

</ partnerLinks >

< variables >

< variable name ="request"

messageType
="lns:creditInformationMessage" />

< variable name ="risk"

messageType
="lns:riskAssessmentMessage" />

< variable name ="approval"

messageType
="lns:approvalMessage" />

</ variables >

< faultHandlers >

< catch faultName ="lns:loanProcessFault"

faultVariable
="error"

faultMessageType
="lns:errorMessage" >

< reply partnerLink ="customer"

portType
="lns:loanServicePT"

operation
="request" variable ="error"

faultName
="unableToHandleRequest" />

</ catch >

</ faultHandlers >

< flow >

< links >

< link name ="receive-to-assess" />

< link name ="receive-to-approval" />

< link name ="approval-to-reply" />

< link name ="assess-to-setMessage" />

< link name ="setMessage-to-reply" />

< link name ="assess-to-approval" />

</ links >

< receive partnerLink ="customer"

portType
="lns:loanServicePT"

operation
="request"

variable
="request"

createInstance
="yes" >

< sources >

< source linkName ="receive-to-assess" >

< transitionCondition >

$request.amount
&lt; 10000

</ transitionCondition >

</ source >

< source linkName ="receive-to-approval" >

< transitionCondition >

$request.amount>=10000

</ transitionCondition >

</ source >

</ sources >

</ receive >

< invoke partnerLink ="assessor"

portType
="lns:riskAssessmentPT"

operation
="check"

inputVariable
="request"

outputVariable
="risk" >

< targets >

< target linkName ="receive-to-assess" />

</ targets >

< sources >

< source linkName ="assess-to-setMessage" >

< transitionCondition >

$risk.level='low'

</ transitionCondition >

</ source >

< source linkName ="assess-to-approval" >

< transitionCondition >

$risk.level!='low'

</ transitionCondition >

</ source >

</ sources >

</ invoke >

< assign >

< targets >

< target linkName ="assess-to-setMessage" />

</ targets >

< sources >

< source linkName ="setMessage-to-reply" />

</ sources >

< copy >

< from >

< literal > yes </ literal >

</ from >

< to variable ="approval" part ="accept" />

</ copy >

</ assign >

< invoke partnerLink ="approver"

portType
="lns:loanApprovalPT"

operation
="approve"

inputVariable
="request"

outputVariable
="approval" >

< targets >

< target linkName ="receive-to-approval" />

< target linkName ="assess-to-approval" />

</ targets >

< sources >

< source linkName ="approval-to-reply" />

</ sources >

</ invoke >

< reply partnerLink ="customer"

portType
="lns:loanServicePT"

operation
="request"

variable
="approval" >

< targets >

< target linkName ="setMessage-to-reply" />

< target linkName ="approval-to-reply" />

</ targets >

</ reply >

</ flow >

</ process >

我们对该BPEL代码中的元素,及生成该元素所需要的必要信息逐一分析:

<process>元素

<process>元素是BPEL流程中的根元素,它使用name属性定义流程的名字,并建立与流程定义相关的命名空间,其主要属性表如下:

属性名

属性说明

name

定义流程的名字

targetNamespace

定义流程的目标空间

xmlns

定义流程的名字空间

suppressJoinFailure

决定是否抑制流程中的所有活动的joinFailure故障。这个属性的缺省值是 "no"

<import>元素

<import>元素并非BPEL规范中定义的元素,而是XML Schema中定义的元素,用来向一个文档中添加多个包含不同目标命名空间的schema元素。在BPEL代码中常用来导入外部的XML Schema或者服务的WSDL定义。此外http://www.w3.org/2001/XMLSchema将作为名字空间被缺省导入。

属性名

属性说明

namespace

定义被导入相应元素的命名空间

location

定义导入文件的路径

importType

定义导入文件的默认编码类型:

当导入XML Schema时,该类型必须设置http://www.w3.org/2001/XMLSchema

当导入WSDL1.1时,该类型必须被设置为http://schemas.xmlsoap.org/wsdl/

<partnerLinks>元素

仅作为<partnerLink>的父元素而存在,无需其他属性。

<partnerLink>元素

<partnerLink>元素partnerLink元素建立了端口类型的服务(伙伴),它将参与业务流程的执行过程。伙伴服务能担当流程的客户端,负责调用流程服务。相应地,伙伴服务也能被流程服务自身所调用。

<partnerLink>元素的内容代表了两个合作伙伴之间的通信交换(流程服务是一个合作伙伴,而其他服务室另一个合作伙伴)。依据通信的种类,流程服务的作用将会不同。因而partnerLink元素包含myRolepartnerRole属性,分别担当流程服务和伙伴服务服务提供者的角色。

也就是说,当流程服务被伙伴客户端服务调用时使用myRole属性,因为在这种情况下,流程服务担当服务提供者。partnerRole属性识别流程服务所调用的伙伴服务(使伙伴服务成为服务提供者)。

当期望的流程服务在相同的伙伴服务中同时担当服务请求者和服务提供者时,myRolepartnerRole将被同时使用。在流程服务和伙伴服务的异步通信中,伙伴服务回调中myRole表明流程服务的角色。

<partnerLink>元素还有一个<partnerLinkType>属性,对于包含在流程中的每个伙伴服务,partnerLinkType属性在流程中定义了partnerLink元素所引用的WSDLportType元素。因此,这些结构通常都直接嵌入到每个伙伴服务的WSDL文档中。partnerLinkType结构在每个服务可以担当的角色中包含了一个role元素。同时又要和partnerLink元素的myRolepartnerRole属性相对应,partnerLinkType将包含一个或两个role子元素。WSDL文档中包含partnerLinkType定义的结构如下所示:

< wsdl:definitions

targetNamespace ="http://example.com/loan-approval/wsdl/"

xmlns:ens
="http://example.com/loan-approval/xsd/error-messages/"

xmlns:p
分享到:
评论

你可能感兴趣的:(xml,活动,Blog,Gmail)