文章仅供大家参考,所有评论, 错误报告, 其他信息以及批评, 请邮寄到 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
<
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元素包含myRole与partnerRole属性,分别担当流程服务和伙伴服务服务提供者的角色。
也就是说,当流程服务被伙伴客户端服务调用时使用myRole属性,因为在这种情况下,流程服务担当服务提供者。partnerRole属性识别流程服务所调用的伙伴服务(使伙伴服务成为服务提供者)。
当期望的流程服务在相同的伙伴服务中同时担当服务请求者和服务提供者时,myRole和partnerRole将被同时使用。在流程服务和伙伴服务的异步通信中,伙伴服务回调中myRole表明流程服务的角色。
<partnerLink>元素还有一个<partnerLinkType>属性,对于包含在流程中的每个伙伴服务,partnerLinkType属性在流程中定义了partnerLink元素所引用的WSDL中portType元素。因此,这些结构通常都直接嵌入到每个伙伴服务的WSDL文档中。partnerLinkType结构在每个服务可以担当的角色中包含了一个role元素。同时又要和partnerLink元素的myRole和partnerRole属性相对应,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
本文分析了生成可执行BPEL代码所需的信息,并以贷款申请案例为例,详细介绍了BPEL代码各元素及其所需信息。
76

被折叠的 条评论
为什么被折叠?



