BPEL的概念
• BPEL(Business Process Execution Language)又叫BPEL4WS(Business Process Execution Language For Web Service),面向Web服務的業務流程執行語言。是一種使用Web服務定義和執行業務流程的語言。BPEL提供了一種相對簡單易懂的方法,可將多個WEB服務組合到一個新的復合服務(稱作業務流程)中。
• BPEL本身是一個Web服務,可以作為服務的提供者。
• BPEL是基於Web服務的,沒有Web服務就沒有BPEL。
BPEL的運作方式
BPEL的一般構成
• 一個以bpel為後綴的文件(例如MyFlow.bpel)
• 一個WSDL文件
• 一個部置XML文件,樣子形似bpel.xml
BPEL的實現需求
• 需要熟悉單個的Web Service的使用方法
• 需要了解具體的業務流程
• 需要一個運行BPEL的處理器
• 需要一個流程設計器
• 當然需要對BPEL語法標簽的掌握等
8.6 BPEL的結構
BPEL的一般結構
• <process>
• <partnerLinks>
• <partnerLink>
• </partnerLink>
• </partnerLinks>
• <variables>
• <variable/>
• </variables>
• <faultHandlers>
• </faultHandlers>
• <sequence>
• Activities
• </sequence>
• </process>
<process>的屬性
<process name="ncname" targetNamespace="uri"
queryLanguage="anyURI"?
expressionLanguage="anyURI"?
suppressJoinFailure="yes|no"?
enableInstanceCompensation="yes|no"?
abstractProcess="yes|no"? xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
.
.
</process>
<partnerLinks>樣式
<partnerLinks>
<!– 注意:至少要指定一個角色. -->
<partnerLink name="ncname"
partnerLinkType="qname"
myRole="ncname“
partnerRole="ncname">
</partnerLink>
</partnerLinks>
<variables>樣式
<variables>
<variable name="ncname"
messageType="qname“/>
</variables>
<faultHandlers>樣式
<faultHandlers>
<catch faultName="qname“
faultVariable="ncname">
activity
</catch>
<catchAll>
activity
</catchAll>
</faultHandlers>
Activities包含具體如下
• <receive>
• <reply>
• <invoke>
• <assign>
• <throw>
• <terminate>
• <wait>
• <empty>
• <sequence>
• <switch>
• <while>
• <pick>
• <flow>
• <scope>
• <compensate>
基本活動一
• <invoke>
– 調用某個 Web 服務上的操作
• <receive>
– 等待一條消息來回應由某人從外部進行調用的服務介面的操作
• <reply>
– 生成輸入/輸出操作的回應
• <wait>
– 等待一段時間
基本活動二
• <assign>
– 把資料從一個地方複製到另一個地方
• <throw>
– 指明某個地方出錯了
• <terminate>
– 終止整個服務實例
• <empty>
– 什麽也不做
結構化活動
• <sequence>
– 定義一組步驟的有序序列
• <switch>
– 使用現在常見的“case-statement”辦法來産生分支
• <while>
– 定義一個迴圈
• <pick>
– 執行幾條可選路徑中的一條
• <flow>
– 以及指明一組步驟應該並行地執行
一個完整的簡單示例
<process name="test" targetNamespace="http://acm.org/samples"
suppressJoinFailure="yes"
xmlns:tns="http://acm.org/samples"
xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
xmlns:ora="http://schemas.oracle.com/xpath/extension"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
<partnerLinks>
<!-- The 'client' role represents the requester of this service. -->
<partnerLink name="client" partnerLinkType="tns:test" myRole="testProvider"/>
</partnerLinks>
<variables>
<variable name="input" messageType="tns:testRequestMessage"/>
<variable name="output" messageType="tns:testResponseMessage"/>
</variables>
<sequence name="main">
<receive name="receiveInput" partnerLink="client" portType="tns:test" operation="process" variable="input" createInstance="yes"/>
<assign name="creatReturnStr">
<copy>
<from expression="concat("Hello", bpws:getVariableData('input','payload','/tns:testRequest/tns:input'))"></from>
<to variable="output" part="payload" query="/tns:testResponse/tns:result"/>
</copy>
</assign>
<reply name="replyOutput" partnerLink="client" portType="tns:test" operation="process" variable="output"/>
</sequence>
</process>