2008年5月5日星期一

SOA_004:BPEL介绍

【WS-BPEL】:Web Service Business Process Execution Language
“WS-BPEL (or BPEL for short) is a language for specifying business process behavior based on Web Services.”
“业务流程执行语言是一种基于Web服务的,描述业务流程的语言。”(英文定义摘自http://en.wikipedia.org/wiki/Business_Process_Execution_Language
WS-BPEL的流行版本是1.1,由OASIS在2003年4月标准化,规范详细内容请访问:http://www.ibm.com/developerworks/library/specification/ws-bpel/
WS-BPEL的最新版本是2.0,是OASIS在2007年4月制定的,规范详细内容请访问:http://docs.oasis-open.org/wsbpel/2.0/wsbpel-v2.0.html
BPEL的基本结构如下:
<process name="ncname" targetNamespace="uri" queryLanguage="anyURI" expressionLanguage="anyURI" suppressJoinFailure="yes or no" enableInstanceCompensation="yes or no" abstractProcess="yes or no">
<partnerLinks>...</partnerLinks>
<partners>...</partners>
<variables>...</variables>
<correlationSets>...</correlationSets>
<faultHandlers>...</faultHandlers>
<compensationHandlers>...</compensationHandlers>
<eventHandlers>...</eventHandlers>
activity
</process>

1. BPEL的主要属性介绍:
(1)queryLanguage XML查询语言,缺省值:XPath 1.0。
(2)expressionLanguage XML表达式语言,缺省值:XPath 1.0。
(3)suppressJoinFailure 是否抑制流程中的所有活动的joinFailure故障。缺省值:no。
(4)enableInstanceCompensation 流程实例是否可被作为整体由特定于平台的方式来补偿。缺省值:no。
(5)abstractProcess 流程是抽象的还是可执行的。缺省值:no。

2. BPEL的主要元素介绍:
(1)partnerLinks 合作伙伴链接
<partnerLinks>
<partnerLink name="client" partnerLinkType="client:OrderBooking" myRole="OrderBookingProvider" partnerRole="OrderBookingRequester"/>
<partnerLink name="CreditRatingService" partnerRole="CreditRatingServiceProvider" partnerLinkType="ns1:CreditRatingService"/>
</partnerLinks>
完整内容请参考《用Oracle SOA Suite 10g 开发BPEL》实验2. 同步调用 OrderBooking.wsdl。

说明:
(a)描述本业务流程与不同的合作伙伴之间的“伙伴链”:即有哪些交互服务。
(b)属性 partnerLinkType 定义“伙伴链”的类型:即交互服务的接口。
(c)属性 myRole 指本业务流程所扮演的角色:请求者 or 提供者。 如果合作伙伴(外部服务)是同步服务,myRole为空。
(d)属性 partnerRole 指合作伙伴(外部服务)所扮演的角色:请求者 or 提供者。
(e)partnerLinkType 一般定义在对应的WSDL中,每个role对应一个portType:
<plnk:partnerLinkType name="OrderBooking">
<plnk:role name="OrderBookingProvider">
<plnk:portType name="client:OrderBooking"/>
</plnk:role>
<plnk:role name="OrderBookingRequester">
<plnk:portType name="client:OrderBookingCallback"/>
</plnk:role>
</plnk:partnerLinkType>
完整内容请参考《用Oracle SOA Suite 10g 开发BPEL》实验2. 同步调用 OrderBooking.wsdl。

(2)partners 合作伙伴

(3)variables 变量
<variables>
<variable name="inputVariable" messageType="client:OrderBookingRequestMessage"/>
<variable name="outputVariable" messageType="client:OrderBookingResponseMessage"/>
<variable name="invokeCR_process_InputVariable" messageType="ns1:CreditRatingServiceRequestMessage"/>
<variable name="invokeCR_process_OutputVariable" messageType="ns1:CreditRatingServiceResponseMessage"/>
</variables>
完整内容请参考《用Oracle SOA Suite 10g 开发BPEL 》实验2. 同步调用 OrderBooking.wsdl。

说明:
(a)变量类型messageType由WSDL中message定义:
<message name="OrderBookingRequestMessage">
<part name="payload" element="ns1:PurchaseOrder" />
</message>
<message name="OrderBookingResponseMessage">
<part name="payload" element="ns1:PurchaseOrder" />
</message>
完整内容请参考《用Oracle SOA Suite 10g 开发BPEL》实验2. 同步调用 OrderBooking.wsdl。

(b)与其它编程语言一样,变量也是有作用域的。

(c)使用WS-BPEL内置函数获取变量信息:
getVariableProperty(variableName, propertyName) 获取变量属性。
getVariableData(variableName,partName,locationPath) 获取变量数据。

(4)correlationSets 关联集合
业务流程有时需要与合作伙伴进行多次会话,因此有必要提供一种机制,使消息和会话被绑定到相同的流程实例,这种机制就是关联集合。
比如订票系统,客户可以查询订票状态,也可以取消订票,这就需要确保后续的请求绑定到相同流程实例。
可以用简单变量来表示,如customerID,也可以用复杂类型来表示,如(customerID,orderNumber)。
完整内容请参考《用Oracle SOA Suite 10g 开发BPEL》实验12. 使用correlationSets OrderBooking.wsdl。

(5)faultHandlers 异常处理

(6)compensationHandlers 补偿处理

(7)eventHandlers 事件处理

3. BPEL的基本活动介绍:
(1)<receive> 接收
接收消息,保持阻塞直到消息的到达。通常是流程的初始点,此时要设置createInstance="yes"。
(2)<reply> 回复
(3)<invoke> 请求
(4)<assign> 赋值
(5)<throw> 抛出异常
(6)<terminate> 终止
(7)<wait> 等待
(8)<empty> 空

4. BPEL的结构化活动介绍:
(1)<sequence> 顺序
(2)<switch> 分支
(3)<while> 循环
(4)<pick> 选取
(5)<flow> 流程
(6)<scope> 范围
(7)<compensate> 补偿

名词解释:
1. 【OASIS】:Organization for the Advancement of Structured Information Standards
结构化信息标准促进组织是一个推进电子商务标准的发展、融合与采纳的非盈利性国际化组织。
关于OASIS更多信息请访问:http://www.oasis-open.org/

没有评论: