上一篇文章开了一个小头,这次继续写一些自己读WS-BPEL2.0的心得体会,供大家分享
业务逻辑Business Process单独进行定义,该部分主要使用以下的XML元素,以及嵌套关系,其中这个并不是标准的XML只是为了方便说明其中的关系和结构
其中
?表示(0或1)
*表示(0或更多)
+表示(1或更多)
<
process
name
="NCName"
targetNamespace
="anyURI"
![None.gif](/Images/OutliningIndicators/None.gif)
queryLanguage
="anyURI"
?
![None.gif](/Images/OutliningIndicators/None.gif)
expressionLanguage
="anyURI"
?
![None.gif](/Images/OutliningIndicators/None.gif)
suppressJoinFailure
="yes|no"
?
![None.gif](/Images/OutliningIndicators/None.gif)
exitOnStandardFault
="yes|no"
?
![None.gif](/Images/OutliningIndicators/None.gif)
xmlns
="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
import
namespace
="anyURI"
?
![None.gif](/Images/OutliningIndicators/None.gif)
location
="anyURI"
?
![None.gif](/Images/OutliningIndicators/None.gif)
importType
="anyURI"
/>
*
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
extensions
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
extension
namespace
="anyURI"
mustUnderstand
="yes|no"
/>
*
![None.gif](/Images/OutliningIndicators/None.gif)
</
extensions
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
partnerLinks
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<!--
Note: At least one role must be specified.
-->
![None.gif](/Images/OutliningIndicators/None.gif)
<
partnerLink
name
="NCName"
![None.gif](/Images/OutliningIndicators/None.gif)
partnerLinkType
="QName"
![None.gif](/Images/OutliningIndicators/None.gif)
myRole
="NCName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
partnerRole
="NCName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
initializePartnerRole
="yes|no"
?
>
+
![None.gif](/Images/OutliningIndicators/None.gif)
</
partnerLink
>
![None.gif](/Images/OutliningIndicators/None.gif)
</
partnerLinks
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
messageExchanges
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
messageExchange
name
="NCName"
/>
+
![None.gif](/Images/OutliningIndicators/None.gif)
</
messageExchanges
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
variables
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
variable
name
="BPELVariableName"
![None.gif](/Images/OutliningIndicators/None.gif)
messageType
="QName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
type
="QName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
element
="QName"
?
/>
+
![None.gif](/Images/OutliningIndicators/None.gif)
</
variables
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
correlationSets
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
correlationSet
name
="NCName"
properties
="QName-list"
/>
+
![None.gif](/Images/OutliningIndicators/None.gif)
</
correlationSets
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
faultHandlers
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<!--
Note: There must be at least one faultHandler
-->
![None.gif](/Images/OutliningIndicators/None.gif)
<
catch
faultName
="QName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
faultVariable
="BPELVariableName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
( faultMessageType
="QName"
| faultElement
="QName"
)?
>
*
![None.gif](/Images/OutliningIndicators/None.gif)
activity
![None.gif](/Images/OutliningIndicators/None.gif)
</
catch
>
![None.gif](/Images/OutliningIndicators/None.gif)
<
catchAll
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
activity
![None.gif](/Images/OutliningIndicators/None.gif)
</
catchAll
>
![None.gif](/Images/OutliningIndicators/None.gif)
</
faultHandlers
>
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
<
eventHandlers
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<!--
Note: There must be at least one onEvent or onAlarm.
-->
![None.gif](/Images/OutliningIndicators/None.gif)
<
onEvent
partnerLink
="NCName"
![None.gif](/Images/OutliningIndicators/None.gif)
portType
="QName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
operation
="NCName"
![None.gif](/Images/OutliningIndicators/None.gif)
( messageType
="QName"
| element
="QName"
)?
![None.gif](/Images/OutliningIndicators/None.gif)
variable
="BPELVariableName"
?
![None.gif](/Images/OutliningIndicators/None.gif)
messageExchange
="NCName"
?
>
*
![None.gif](/Images/OutliningIndicators/None.gif)
<
correlations
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
correlation
set
="NCName"
initiate
="yes|join|no"
?
/>
+
![None.gif](/Images/OutliningIndicators/None.gif)
</
correlations
>
![None.gif](/Images/OutliningIndicators/None.gif)
<
fromParts
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
fromPart
part
="NCName"
toVariable
="BPELVariableName"
/>
+
![None.gif](/Images/OutliningIndicators/None.gif)
</
fromParts
>
![None.gif](/Images/OutliningIndicators/None.gif)
<
scope
>
</
scope
>
![None.gif](/Images/OutliningIndicators/None.gif)
</
onEvent
>
![None.gif](/Images/OutliningIndicators/None.gif)
<
onAlarm
>
*
![None.gif](/Images/OutliningIndicators/None.gif)
<!--
Note: There must be at least one expression.
-->
![None.gif](/Images/OutliningIndicators/None.gif)
(
![None.gif](/Images/OutliningIndicators/None.gif)
<
for
expressionLanguage
="anyURI"
?
>
duration-expr
</
for
>
![None.gif](/Images/OutliningIndicators/None.gif)
|
![None.gif](/Images/OutliningIndicators/None.gif)
<
until
expressionLanguage
="anyURI"
?
>
deadline-expr
</
until
>
![None.gif](/Images/OutliningIndicators/None.gif)
)?
![None.gif](/Images/OutliningIndicators/None.gif)
<
repeatEvery
expressionLanguage
="anyURI"
?
>
![None.gif](/Images/OutliningIndicators/None.gif)
duration-expr
![None.gif](/Images/OutliningIndicators/None.gif)
</
repeatEvery
>
?
![None.gif](/Images/OutliningIndicators/None.gif)
<
scope
>
</
scope
>
![None.gif](/Images/OutliningIndicators/None.gif)
</
onAlarm
>
![None.gif](/Images/OutliningIndicators/None.gif)
</
eventHandlers
>
![None.gif](/Images/OutliningIndicators/None.gif)
activity
![None.gif](/Images/OutliningIndicators/None.gif)
</
process
>
这其中
queryLanguage表示在整个流程中的查询语言默认值为"urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0", 表示使用ws-bpel2.0并附加XPath1.0
expressionLanguage. 表示在<process>中使用的默认表达语言. 该属性的默认值为"urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"
... ...
一个ws-bpel可以使用如下的标签定义:
· <receive>允许业务过程等待相匹配的消息到达,当消息到达时该活动才可以完成,其中的<portType>是可选的,但是当<portType>以后<portType>的InputValue的类型必须和<partTypeLink>中的对应规则相符messageExcage属性也是可选的,可以与一个<replay>活动相关联.
· <reply>允许业务过程发送一个消息来回复来自于IMA的邦定消息,IMA的类型包括<receive>,<onMessage>,<onEvent>,与<recieve>相仿<messageExchange>同样用来关联消息获得方,包括上面说的三种类型
· <invoke> 允许业务流程产生一个单方面的或者是应答式的活动,这主要根据<portType>的定义
· <assign>主要用来在业务流程中分配变量的值
· <throw>产生错误并将错误抛出
· <exit>
· <wait>用于使业务流程等待一段时间
· <empty>表示不进行任何操作,这对并行操作的活动非常有帮助
· <sequence>用来定义一组活动顺序发生
· <if>可定义活动的条件状态
· <while>循环,与高级语言中的while相仿
· <repeatUntil>另一种循环,与高级语言中的until相仿
· <forEach>循环,C#有相同的定义形式
· <pick>用来等待一组消息中的任何一个到达,或者到达超时时间以后开始激发
· <flow>用来定义并行发生的动作
· <scope>用来定义嵌套的活动
· <compensate>该标签必须使用在错误处理句柄中,用来在发生错误的时候进行补偿操作
· <compensateScope> 同上,但是只能发生在特定的内部<scope>中
· <rethrow>也必须在错误处理句柄中使用,抛异常
· <validate>通过变量相关的XML或者WSDL验证变量的值
· <extensionActivity>通过该标签扩展用户自己的活动
continue ... ...