【正文】
5. BPEL的語法 6. BPEL如何處理故障 20232023 by Li Weigang. All rights reserved. ? 靜夜四無鄰,荒居舊業(yè)貧。 flow standardattributes standardelements links? link name=name+ /links activity+ /flow flow 20232023 by Li Weigang. All rights reserved. flow links link name=XtoY/ link name=CtoD/ /links sequence name=X source linkName=XtoY/ invoke name=A .../ invoke name=B .../ /sequence sequence nameY target linkName=XtoY/ receive name=C/ source linkName=CtoD/ /receive invoke name=E .../ /sequence invoke partnerLink=D target linkName=CtoD/ /invoke /flow flow /flow Y C E X A B D link CtoD link XtoY Links – Control Flow 20232023 by Li Weigang. All rights reserved. ? scope結(jié)構(gòu)允許定義嵌套活動,這個(gè)嵌套活動有和自己關(guān)聯(lián)的變量、故障處理程序和補(bǔ)償處理程序。 ?每個(gè) pick活動必須至少包括一個(gè) onMessage事件。 ?以 case分支的出現(xiàn)順序檢查,第一個(gè)條件是 true的分支被選擇并被作為被執(zhí)行的活動。 ? 顯式地執(zhí)行 pensate活動的能力是 BPEL應(yīng)用程序錯誤處理框架的基礎(chǔ)所在。 ?所有當(dāng)前正在運(yùn)行的活動必須盡可能快地終止,而且沒有任何故障處理或補(bǔ)償行為。 invoke 20232023 by Li Weigang. All rights reserved. invoke partnerLink=name portType=qname operation=name inputVariable=name? outputVariable=name? standardattributes standardelements correlations? correlation set=name initiate=yes|no? pattern=in|out|outin/+ /correlations pensationHandler? activity /pensationHandler /invoke invoke 20232023 by Li Weigang. All rights reserved. Invoke InventoryService Invoke CreditService Reply Invoice Receive PO sequence flow /sequence 例子 20232023 by Li Weigang. All rights reserved. sequence receive partnerLink=“ customer” portType=“ lns:purchaseOrderPT” operation=“ sendPurchaseOrder” variable=“ PO” createInstance=yes/ flow invoke partnerLink=“ inventoryChecker” portType=“ lns:inventoryPT” operation=“ checkINV” inputVariable=“ inventoryRequest” outputVariable=inventoryResponse/ invoke partnerLink=“ creditChecker” portType=“ lns:creditPT” operation=“ checkCRED” inputVariable=“ creditRequest” outputVariable=creditResponse/ /flow ...... reply partnerLink=“ customer” portType=“ lns:purchaseOrderPT” operation=sendPurchaseOrder variable=invoice/ /sequence 例子 20232023 by Li Weigang. All rights reserved. ?assign的作用是用新的數(shù)據(jù)來更新變量的值。 ?until屬性指定發(fā)出警報(bào)的特定時(shí)刻。 事件處理程序 20232023 by Li Weigang. All rights reserved. ? eventHandlers? ? onMessage partnerLink=name portType=qname ? operation=name variable=name?* ? correlations? ? correlation set=name initiate=yes|no+ ? /correlations ? activity ? /onMessage ? onAlarm for=durationexpr? until=deadlineexpr?* ? activity ? /onAlarm ? /eventHandlers 事件處理程序 20232023 by Li Weigang. All rights reserved. ?onMessage標(biāo)志表示指定的事件是一個(gè)等待消息到達(dá)的事件。使用 catch處理程序中的 faultVariable屬性來指定故障變量。 相關(guān)集 20232023 by Li Weigang. All rights reserved. ? 在多方業(yè)務(wù)協(xié)議中,三種情況 ?發(fā)起者流程發(fā)送啟動會話的第一個(gè)消息,從而定義了標(biāo)記該對話的相關(guān)集中的特性值。 ? 每個(gè)關(guān)聯(lián)集都在一個(gè)作用域中進(jìn)行聲明并屬于該作用域。 ? 屬于全局流程作用域的變量稱為全局變量;屬于流程作用域的變量稱為局部變量; ? 每個(gè)變量只有在定義它的作用域和嵌套在它所屬于的作用域內(nèi)的全部作用域中才是可見的 variables variable name=name messageType=qname? type=qname? element=qname?/+ /variables 變量 Variables 20232023 by Li Weigang. All rights reserved. variables variable name=“PO” messageType=“l(fā)ns:POMessage”/ variable name=“Invoice” messageType=“l(fā)ns:InvMessage”/ variable name=“POFault” messageType=“l(fā)ns:orderFaultType”/ /variables message name=“POMessage” part name=“customerInfo” type=“sns:customerInfo”/ part name=“purchaseOrder” type=“sns:purchaseOrder”/ /message message name=InvMessage part name=“IVC” type=“sns:Invoice”/ /message message name=“orderFaultType” part name=“problemInfo” type=“xsd:string”/ /message Purchase Process WSDL: BPEL: Variables in BPEL 20232023 by Li Weigang. All rights reserved. process XML schema element WSDL message part part part ... property property alias 類型化的屬性映射到 WSDL messages的 parts上, 或 XML schema 元素上 property property alias 屬性用于引用消息或 變量中的全部或部分 數(shù)據(jù),常用于相關(guān)集 getVariableProperty( variable, property ) 屬性將流程邏輯 從變量的定義細(xì) 節(jié)中分離開來 ? 消息屬性 (Message Properties) 20232023 by Li Weigang. All rights reserved. wsdl:definitions name=name xmlns:bpws=process/ bpws:property name=name type=qname/ ... /wsdl:definitions definitions name=name ... xmlns:bpws=process/ bpws:propertyAlias propertyName=qname messageType=qname part=name query=queryString/ ... /wsdl:definitions propertyAlias: property: 消息屬性 (Message Properties) 20232023 by Li Weigang. All rights reserved. process instance 3 process correlation set customerId orderNumber process instance 1 process instance 2 process instance 4 receive 提交購買訂單 如何通過無狀態(tài)的 Web service 接口識別有狀態(tài)的流程實(shí)例? 長周期會話中的消息與 正確的的流程實(shí)例關(guān)聯(lián) locate purchaseOrder cId = 0815 orderNo = 42 receive 查詢訂單狀態(tài) queryOrderStatus custId = 0815 oNo = 42 customerId orderNumber 4 (0815, 49) 3 (0815, 42) 2 (0707, 11) 1 (0311, 33) initiate 屬性和相關(guān)集 (Correlation Sets) 20232023 by Li Weigang. All rights reserved. ? 在面向?qū)ο箢I(lǐng)域 ?通過對象引用進(jìn)行有狀態(tài)的交互。 ? 服務(wù)的用戶必須靜態(tài)地依賴于由 portType定義的抽象接口,但是在通常情況下可以動態(tài)地發(fā)現(xiàn)和使用 port定義的信息。每個(gè)伙伴鏈由 partnerLinkType來描述。組合服務(wù)的接口也被描述為WSDL portType的集合。只有中央的總控過程知道它們?nèi)绾谓M合和協(xié)調(diào) ?Choreography并不依賴中央的總控協(xié)調(diào)過程。相反,每個(gè)涉及其中的 Web服務(wù)都知道何時(shí)執(zhí)行自己的操作,和誰交互。 BPEL簡介 20232023 by Li Weigang. All rights reserved. BPEL——組合 Web服務(wù) 20232023 by Li Weigang. All rights reserved. ?BPEL is the