07-服務計算基礎(服務組合)_第1頁
07-服務計算基礎(服務組合)_第2頁
07-服務計算基礎(服務組合)_第3頁
07-服務計算基礎(服務組合)_第4頁
07-服務計算基礎(服務組合)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

服務計算基礎主講:李偉剛liweigang@西北工業(yè)大學軟件與微電子學院第六章服務組合主要內(nèi)容服務組合業(yè)務流程BPEL概述BPEL結(jié)構(gòu)BPEL表示法及其處理BPEL相關產(chǎn)品和資源第一節(jié)服務組合Web服務組合是通過組合基本W(wǎng)eb服務提供增值服務的能力,這些基本W(wǎng)eb服務可能由別的組織提供。要點服務組合需要使用其它服務組合后形成的是一個具有新功能的服務服務組合使用的基本功能可以是組織外部的服務組合的概念服務組合——挑戰(zhàn)服務組合——實例AirlineCAirlineAAirlineBInternetCheckFlightSchedulesWebServiceWebServiceWebService

B2BApplicationsTravelAgencyDecisionMakingCompareOptionsCheckFlightSchedulesCheckFlightSchedulesIBMWebSphereSunJavaMicrosoft.NetWearehere!業(yè)務面臨的一個關鍵問題仍然是集成企業(yè)內(nèi)部集成(EnterpriseApplicationIntegration,EAI)與合作伙伴的集成(Business-to-BusinessIntegration,B2Bi)企業(yè)聯(lián)盟Webservices

走向面向服務計算應用程序被視為“服務”松散耦合,動態(tài)交互異構(gòu)平臺沒有哪一方取得完全的控制權(quán)服務組合如何組合服務?服務組合——目的第二節(jié)業(yè)務流程Programminginthelarge非程序員實現(xiàn)流程流程邏輯處理如何將功能點組合起來以解決更復雜的問題(如,處理一個訂單)Programminginthesmall程序員實現(xiàn)功能功能邏輯處理具體的細粒度的任務(如,獲取訂單文件或更新客戶記錄)兩種編程模型移植性和互操作性靈活的集成能力表達能力強,易于適應底層服務的變更可細分,基于類型的組合,使得:第三方能對已有服務進行組合為不同部門提供不同的的組合視圖提高可伸縮性和復用性有狀態(tài)會話和生命期管理支持多個有狀態(tài)長周期會話可恢復長周期的業(yè)務流程需要錯誤處理和恢復機制,以便管理錯誤和恢復錯誤對過程模型的需求業(yè)務流程交互模式使用Orchestration,需要一個總控過程來控制涉及到的Web服務,并協(xié)調(diào)Web服務不同操作的執(zhí)行。所涉及到的Web服務并不知道(也不必知道)它們是組合過程的一部分。只有中央的總控過程知道它們?nèi)绾谓M合和協(xié)調(diào)Choreography并不依賴中央的總控協(xié)調(diào)過程。相反,每個涉及其中的Web服務都知道何時執(zhí)行自己的操作,和誰交互。所有的Choreography參與者都需要知道業(yè)務流程,要執(zhí)行的操作,要交互的消息,和交換消息的時機Orchestration(編曲)vsChoreography(編舞)從組合Web服務來執(zhí)行業(yè)務流程的角度來看,Orchestration比Choreography更靈活:

1、我們知道誰負責執(zhí)行整個業(yè)務流程。

2、即使Web服務并不知道它們是業(yè)務流程的一部分,仍然可以把它們組合起來。

3、當錯誤發(fā)生時,我們可以提供一個備選的ScenarioBPEL遵循Orchestration范式Orchestration(編曲)vsChoreography(編舞)SamplePurchaseOrderPurchaseOrderRequestPurchaseOrderAcknowledgementPurchaseOrderResponseBusiness

“A”Business“B”SampleBusinessProcess:PurchaseOrderPORequestSend

POReceivePOAckReceivePOResponseReceive

POSend

POAckSendPOResponsePOAcknowledgementPOResponseChoreography–TheobservablepublicexchangeofmessagesPublicProcessBusinessABusinessBFromaChoreographyPerspectiveSend

POReceivePOAckReceivePOResponseTransformTransformFromERPToERPPORequestPOAcknowledgementPOResponseOrchestration–AprivateexecutablebusinessprocessPrivateProcessBusinessABPELWorkflowFromanOrchestrationPerspectiveBusiness

BBusinessAnalystToolBusiness

ASend

POReceivePOAckReceivePOResponseTransformTransformBusinessABPELWorkflowPORequestPOAcknowledgementPOResponseGenerateBPEL

TemplateGenerateBPEL

TemplateReceive

POSendPOAckReceivePOResponseTransformTransformBusinessBBPELWorkflowTwoBPELworkflowtemplatesreflectingabusinessagreementOrchestrationandChoreographyTogether第三節(jié)BPEL概述業(yè)務流程可執(zhí)行語言BPEL(BusinessProcessExecutionLanguage)是專為整合WebServices而制定的一項規(guī)范標準。描述商業(yè)活動的抽象高級語言IBM的WSFL—支持圖形化的流程Microsoft的XLANG—結(jié)構(gòu)化構(gòu)造方法BPEL描述流程可執(zhí)行工作流—描述業(yè)務交互中參與者的實際行為;抽象流程—描述各方參與者對外可見的消息交換。BPEL的作用是將一組現(xiàn)有的服務組合起來,從而定義一個新的Web服務。因此,BPEL基本上是一種實現(xiàn)此種組合的語言。組合服務的接口也被描述為WSDLportType的集合。BPEL簡介BPEL——組合Web服務BPEListheWebServicesOrchestrationstandardfromOASISbee?pel’,beep’?uhl,bip’?uhlAnXML-basedgrammarfordescribingthelogictoorchestratetheinteractionbetweenWebservicesinabusinessprocessBPELHistoricalTimelineDec2000MicrosoftpublishesXLANGMarch2001IBMpublishesWSFLJuly2002IBM,MicrosoftandBEAconvergeWSFL&XLANGintoBPEL4WS1.0March2003BPEL4WSissubmittedtoOASISMay2003OASISpublishesBPEL4WS1.11stH2007WS-BPEL2.0releasedWS-BPEL歷史BPEL1.1(*)(*)BPEL1.1authors,May2003WS-BPEL2.0GettingthePlayersTogetherBPEL流程可以實現(xiàn)Web服務之間簡單交互或復雜交互的自動化支持長周期業(yè)務事務關聯(lián)消息交換實現(xiàn)活動的并發(fā)處理在合作方交互時映射數(shù)據(jù)提供一致的異常和恢復處理機制BPEL關注的問題WSDL定義了Webservices具有無狀態(tài)的交互模型消息交換同步調(diào)用無關聯(lián)的異步調(diào)用大多數(shù)“現(xiàn)實世界的”業(yè)務流程需要一個更強大的交互模型可以雙向交換消息,也可以點到點(peer-to-peer)的交換,并能持續(xù)特定時間(分、時、天)BPEL提供了描述有狀態(tài)的、長運行周期的交互的能力為什么需要BPEL?使用XML語言定義業(yè)務流程用流程分解和裝配的方式建立Webservices模型在業(yè)務流程的外部(抽象)視圖和內(nèi)部(可執(zhí)行)視圖使用相同的編排方法使用層次化和圖形化的控制方式,減小過程建模的難度在應用消息的級別上為流程實例提供一種識別機制在創(chuàng)建和停止流程實例時隱含基本的生命周期機制定義了一種長周期事務處理模型,支持長周期業(yè)務流程全部或其中某些部分的失敗恢復用模塊化和可組合的方式提供了兼容Web服務標準的語言BEPL設計目標描述業(yè)務流程的業(yè)界標準使用通用的語言和技術(shù)在設計上很自然地與Webservices相適應用XML描述使用并擴展了WSDL1.1使用XMLSchema1.0作為數(shù)據(jù)模型在平臺和開發(fā)商間可移植理論上可以在任何BPEL兼容的引擎上運行在交互的過程間實現(xiàn)互操作在Webservicesstack的頂層BEPL的優(yōu)點WS-BPELXML,EncodingOtherprotocolsOtherservicesTransportandEncodingBusinessProcessesWSDL,Policy,UDDI,InspectionDescriptionSecurityReliableMessagingTransactionsCoordinationSOAP(LogicalMessaging)QualityOfServiceWearehereWS-BPELintheWS-*Stack第四節(jié)BPEL結(jié)構(gòu)WS-BPELMyProcessinvokereceivereceiveinvokeinvokeHandlersfaulthandlereventhandlerfaulthandlercompensationhandlerterminationhandlereventhandlerPartnerLinksPartnerLinkTypePortType1PortType2partnerlinkpartnerlinkVariables42WSDLMessageXMLSchemaTypeXMLSchemaElementPropertiesCorrelationSetsProperty1Property2StructuredActivitiesif-elsewhilescopepicksequenceflowrepeatUntilforEachBasicActivitiesreceivereplyinvokethrowexitwaitemptycompensatevalidateassignrethrowextensionActivitycompensateScopeProcessPartnerlinksDatahandlingPropertiesandcorrelationBasicandstructuredactivitiesScopesWS-BPEL語言結(jié)構(gòu)processimports定義對外部XMLSchema或WSDL的依賴關系extensions定義WS-BPEL擴展的屬性和元素的名稱空間variables存儲業(yè)務流程或伙伴交互的狀態(tài)數(shù)據(jù)partnerlinksWS-BPEL過程在其行為中用到的關聯(lián)關系correlationsets應用數(shù)據(jù)字段,它們共同標識了一個會話messageexchanges出站和進站消息活動的相關關系eventhandlers并發(fā)處理進站消息或計時器警報faulthandlers處理流程中的異常情形primaryactivity執(zhí)行流程邏輯——任意個活動可以循環(huán)嵌套XMLschemasWSDLdefinitionsWS-BPEL過程定義BPEL建立在WSDL服務模型之上,并對其進行了擴展WSDL定義了允許的特定操作BPEL定義了WSDLoperations如何被編排在一起滿足特定業(yè)務流程BPEL還定義了WSDL的擴展,以支持長周期異步業(yè)務流程WSDL1.1BPEL2.0BPEL-definedWSDLextensionsWS-BPEL與WSDL的關系BPEL流程與業(yè)務伙伴暴露的WSDL服務交互WebServiceLoanApprovalProcessWebServiceWSDLLoanApprovalPortTypeFinancialInstitution‘sWebService(LoanApprover)invokeInterfacesexposedbytheBPELprocessInterfacesconsumedbytheBPELprocessreceivereplyRecursiveCompositionPartnerLinkTypePartnerLinkTypeServicePServiceAServiceBA’sWSDLP’sWSDLB’sWSDLFinvokereceivereceiveinvokeinvokeWeb服務組合processpartnerlinkpartnerlinktype業(yè)務伙伴間點到點的會話關系WSDLporttypemyRoleProvidedporttypeWSDLporttypepartnerRoleRequiredporttypereceive入站請求–BPEL流程提供的服務invoke出站請求–BPEL流程需要的服務PartnerLinks<partnerLinks><partnerLinkname=“customer"partnerLinkType=“l(fā)ns:purchasePLT”

myRole=“purchaseService”/><partnerLinkname=“inventoryChecker”partnerLinkType=“l(fā)ns:inventoryPLT”

myRole=“inventoryRequestor”partnerRole=“inventoryService”/><partnerLinkname=“creditChecker”partnerLinkType=“l(fā)ns:creditPLT”

myRole=“creditRequestor”partnerRole=“creditService”/></partnerLinks><plt:partnerLinkTypename=“purchasePLT”><plt:rolename=“purchaseService”><plt:portTypename=“tns:purchasePT”/></plt:role></plt:partnerLinkType>PurchaseProcessWSDL:BPEL:<portTypename=“purchasePT”><operation

name="sendPurchase"></operation></portType>PurchaseProcessPortType:PartnerLinkinBPEL<definitionsname="ncname"targetNamespace="uri"xmlns="/wsdl/"xmlns:plnk="/ws/2003/05/partner-link/">...<plnk:partnerLinkTypename="ncname"><plnk:rolename="ncname"><plnk:portTypename="qname"/></plnk:role><plnk:rolename="ncname">?<plnk:portTypename="qname"/></plnk:role></plnk:partnerLinkType>...</definitions>

partnerLinkType為了描述兩個服務之間的會話關系,伙伴鏈接類型定義了會話中每個服務所扮演的“角色”,并且指定了每個服務所提供的portType,以便接收會話的上下文中的消息。每個角色的portType可以產(chǎn)生于不同的名稱空間,也可產(chǎn)生相同的名稱空間。根據(jù)相同名稱空間中的portType來定義合作伙伴鏈接類型的兩個角色。伙伴鏈接類型定義文檔可以是獨立于任一個服務的WSDL文檔的單獨構(gòu)件,也可以被放在定義portType的WSDL文檔中,這些portType也被用來定義不同的角色。有些情況下,定義僅包含一個角色的伙伴鏈接類型是有意義的。在這種伙伴鏈接情形中,一個服務可以鏈接任何其他服務?;锇殒溄宇愋蜆I(yè)務流程交互的服務被描述成伙伴鏈(partnerLinks)。每個伙伴鏈由partnerLinkType來描述。每個伙伴鏈都被命名。通過該伙伴鏈的所有服務交互。屬性myRole指出了業(yè)務流程本身的角色,而屬性partnerRole指出了伙伴的角色。如果partnerLinkType僅有一個角色,那么將根據(jù)需要省略其中一個屬性。<partnerLinks><partnerLinkname="ncname"partnerLinkType="qname"myRole="ncname"?partnerRole="ncname"?>+</partnerLink></partnerLinks>partnerLinksWSDL的PortType使用抽象消息來定義抽象功能。port提供實際訪問信息,包括通信端點和其他與部署有關的信息。綁定使兩者連結(jié)在一起。服務的用戶必須靜態(tài)地依賴于由portType定義的抽象接口,但是在通常情況下可以動態(tài)地發(fā)現(xiàn)和使用port定義的信息。端點引用的基本用途是為服務提供一種特定于端口(port)的數(shù)據(jù)的動態(tài)通信機制。端點引用使得WS-BPEL可以為特定類型的服務動態(tài)選擇一個提供者,并調(diào)用其上的操作。BPEL使用了WS-Addressing中定義的端點引用的概念。流程實例的partnerlink的每個伙伴角色被分配一個具有惟一性的端點引用,這可以在流程的部署過程中完成,也可以由流程中的某個活動動態(tài)地執(zhí)行。端點引用(EndpointReference,EPR)processassignxsl:transformreceiverequestresponseinvokerequestreplyresponse42WSDLmessageWSDLmessageWSDLmessages變量用WSDL消息來定義42XMLschemasXMLSchemaelements/types變量用XMLSchema的元素或類型來定義變量Variables業(yè)務流程指定了涉及伙伴之間消息交換的有狀態(tài)交互。業(yè)務流程的狀態(tài)不僅包括被交換的消息,而且還包括用于業(yè)務邏輯和構(gòu)造發(fā)送給伙伴的消息的中間數(shù)據(jù)。每個變量的類型可以是WSDL消息類型、XMLSchema簡單類型或XMLSchema元素。屬于全局流程作用域的變量稱為全局變量;屬于流程作用域的變量稱為局部變量;每個變量只有在定義它的作用域和嵌套在它所屬于的作用域內(nèi)的全部作用域中才是可見的<variables><variablename="ncname"messageType="qname"?type="qname"?element="qname"?/>+</variables>變量Variables<variables><variablename=“PO”messageType=“l(fā)ns:POMessage”/><variablename=“Invoice”messageType=“l(fā)ns:InvMessage”/><variablename=“POFault”messageType=“l(fā)ns:orderFaultType”/></variables><messagename=“POMessage”><partname=“customerInfo”type=“sns:customerInfo”/><partname=“purchaseOrder”type=“sns:purchaseOrder”/></message><messagename="InvMessage"><partname=“IVC”type=“sns:Invoice”/></message><messagename=“orderFaultType”><partname=“problemInfo”type=“xsd:string”/></message>PurchaseProcessWSDL:BPEL:VariablesinBPELprocessXMLschemaelementWSDLmessagepartpartpart...propertypropertyalias類型化的屬性映射到WSDLmessages的parts上,或XMLschema元素上propertypropertyalias屬性用于引用消息或變量中的全部或部分數(shù)據(jù),常用于相關集getVariableProperty(variable,property)屬性將流程邏輯從變量的定義細節(jié)中分離開來

消息屬性(MessageProperties)<wsdl:definitionsname="ncname"xmlns:bpws="/ws/2003/03/business-process/"><bpws:propertyname="ncname"type="qname"/>...</wsdl:definitions><definitionsname="ncname"...xmlns:bpws="/ws/2003/03/business-process/"><bpws:propertyAliaspropertyName="qname"messageType="qname"part="ncname"query="queryString"/>...</wsdl:definitions>propertyAlias:property:消息屬性(MessageProperties)processinstance3processcorrelationsetcustomerIdorderNumberprocessinstance1processinstance2processinstance4receive提交購買訂單如何通過無狀態(tài)的Webservice接口識別有狀態(tài)的流程實例?長周期會話中的消息與正確的的流程實例關聯(lián)locatepurchaseOrdercId=0815orderNo=42receive查詢訂單狀態(tài)queryOrderStatuscustId=0815oNo=42customerIdorderNumber4(0815,49)3(0815,42)2(0707,11)1(0311,33)initiateprocessinstance3屬性和相關集(CorrelationSets)在面向?qū)ο箢I域通過對象引用進行有狀態(tài)的交互。對象引用本身提供了訪問具有合適的交互狀態(tài)和歷史的某個對象(實例)的能力。這種方式適用于緊密耦合的實現(xiàn)。Web服務領域引用方式將造成實現(xiàn)之間脆弱的依賴關系;需要松散耦合機制實現(xiàn);避免在實例路由中使用特定于實現(xiàn)的標記。在業(yè)務流程實例的生存期中,它通常與涉及它的伙伴進行多次會話,相關聯(lián)的會話涉及的參與者不止兩個,常常有必要提供應用程序級的機制,以使消息和會話被匹配到預定的業(yè)務流程實例。相關集BPEL提供了聲明性機制,以指定服務實例中相關聯(lián)的操作組。一組相關標記可定義為相關聯(lián)的組中所有消息共享的一組特性。這樣的一組特性稱為相關集。每個關聯(lián)集都在一個作用域中進行聲明并屬于該作用域。屬于全局流程作用域的關聯(lián)集稱為全局關聯(lián)集;屬于局部作用域,這樣的關聯(lián)集稱為局部關聯(lián)集。在流程開始時,全局關聯(lián)集處于未初始化的狀態(tài)。在其所屬的作用域的執(zhí)行開始時,本地關聯(lián)集處于未初始化的狀態(tài)。相關集在其語義上類似于延遲綁定的常數(shù)。相關集的綁定由特別標記的消息發(fā)送或接收操作來觸發(fā)。相關集在其所屬的作用域的生存期中只能初始化一次。在初始化之后,它的值就可被認為是業(yè)務流程實例的標識的別名。相關集在多方業(yè)務協(xié)議中,三種情況發(fā)起者流程發(fā)送啟動會話的第一個消息,從而定義了標記該對話的相關集中的特性值。所有其他參與者通過接收提供相關集中的特性值的傳入消息來綁定會話中的相關集。發(fā)起者和其他參與者都必須發(fā)送啟動會話的第一個消息,從而定義標記會話的相關集中的特性值。相關集的名稱用在invoke、receive和reply活動中,也用在pick活動的onMessage分支中,flow活動的link中,同時還用在事件處理程序的onMessage形式中。<correlationSets>?<correlationSetname="ncname"properties="qname-list"/>+</correlationSets>相關集processscopescopescopescopescopescopescope范圍提供了一個上下文環(huán)境,它影響其中包含的活動的執(zhí)行行為獨立范圍為并發(fā)訪問共享資源提供了控制機制scope局部定義–partnerlinks,messageexchanges,variables,correlationsets局部處理–eventhandlers,faulthandlers,aterminationhandler,andacompensationhandlerCompensationhandler取消已經(jīng)完成的活動造成的持久效果Terminationhandler處理對范圍的強制停止(externalfaults)primaryactivityscopeScopes故障處理是因發(fā)生故障而切換到撤銷發(fā)生故障的作用域中的部分或不成功的工作。故障處理程序提供了定義一組自定義的故障處理活動的方法,句法上定義為catch活動。定義的每個catch活動能攔截某種特定的故障(由全局惟一的故障QName和有與該故障相關聯(lián)的數(shù)據(jù)的變量來定義)。如果沒有故障名,那么catch將攔截全部有適合類型的故障數(shù)據(jù)的故障。使用catch處理程序中的faultVariable屬性來指定故障變量。<faultHandlers><catchfaultName="qname“aultVariable="ncname">activity</catch><catchAll>activity</catchAll></faultHandlers>故障處理程序Try-catch-throw機制原理活動Atry活動2活動1try活動2.1活動2.2throw活動……異常異常處理catchthrow異常處理catch對invoke活動的故障響應是故障的來源之一,故障由顯式給出的名稱和數(shù)據(jù)部分組成。程序化地拋出throw活動是故障的另一個來源,它也有顯式給出的名稱和數(shù)據(jù)。故障處理程序通過補償處理程序,作用域可以描述通過應用程序定義的方式可撤銷的行為。有補償處理程序的作用域可不受約束任意深地嵌套補償處理程序僅僅是用于補償?shù)幕顒拥陌b。在許多情況下,補償處理程序需要接收當前狀態(tài)的數(shù)據(jù)并返回關于補償結(jié)果的數(shù)據(jù)補償處理程序的調(diào)用方法是使用compensate活動<compensationHandler>?activity</compensationHandler>補償處理程序整個流程以及每個作用域可以與一組在相應的事件發(fā)生時并發(fā)的調(diào)用的事件處理程序相關聯(lián)。在事件處理程序中進行任何類型的活動,但是不允許使用<compensate/>調(diào)用補償處理程序。有兩種類型的事件:與WSDL中請求/響應或單向操作對應的傳入消息;用戶設置的時間過后發(fā)出的警報。事件處理程序<eventHandlers>?<onMessagepartnerLink="ncname"portType="qname"operation="ncname"variable="ncname"?>*<correlations>?<correlationset="ncname"initiate="yes|no">+</correlations>activity</onMessage><onAlarmfor="duration-expr"?until="deadline-expr"?>*activity</onAlarm></eventHandlers>事件處理程序onMessage標志表示指定的事件是一個等待消息到達的事件。這個標記及其屬性的解釋類似于receive活動。partnerLink屬性定義請求將到達的合作伙伴鏈接。portType和operation屬性是合作伙伴為引發(fā)事件而調(diào)用的適當端口類型和操作。變量屬性標識包含從合作伙伴接收到的消息的變量。onAlarm標志標記超時事件。for屬性指定該事件發(fā)生之前的持續(xù)時間。計算持續(xù)時間的計時在相關的作用域的執(zhí)行開始的時刻響起。until屬性指定發(fā)出警報的特定時刻。這兩個屬性中僅有一個必須出現(xiàn)在任何onAlarm事件中。事件處理程序processreceivereplyinvoke調(diào)用一個單向或請求-響應操作阻塞并等待匹配的消息來臨/發(fā)送一個回復消息validateassign用新數(shù)據(jù)更新變量或partnerlinks的值驗證變量中存儲的XML消息throwrethrow從業(yè)務流程內(nèi)部生成一個錯誤(fault)從錯誤處理器中發(fā)送一個錯誤(fault)exit立即停止一個業(yè)務流程實例的執(zhí)行compensatecompensateScope以缺省的順序在所有完成的子域上調(diào)用補償(compensation)在一個完成的子域上調(diào)用補償wait等待給定的時間段或直到特定時間點empty業(yè)務流程中的空節(jié)點extensionActivityBPEL語言擴展的封裝BasicActivitiesterminate我們重點講解廣泛使用的1.1規(guī)范<receive>構(gòu)造業(yè)務流程阻塞等待匹配消息的到達實例化業(yè)務流程的惟一方法是receive活動,把createInstance屬性設置為“yes”。該屬性的缺省值是“no”。<receivepartnerLink="ncname"portType="qname"operation="ncname"variable="ncname"?createInstance="yes|no"?standard-attributes>standard-elements<correlations>?<correlationset="ncname"initiate="yes|no"?>+</correlations></receive>receive<reply>構(gòu)造業(yè)務流程發(fā)送消息以應答通過<receive>接收到的消息。receive和reply的組合為流程構(gòu)成了在WSDLportType上的請求-響應操作。<replypartnerLink="ncname"portType="qname"operation="ncname"variable="ncname"?faultName="qname"?standard-attributes>standard-elements<correlations>?<correlationset="ncname"initiate="yes|no"?>+</correlations></reply>reply<invoke>允許業(yè)務流程調(diào)用由合作伙伴在portType上提供的單向或請求-響應操作。異步調(diào)用僅需要操作的輸入變量;同步調(diào)用既需要輸入變量,又需要輸出變量。invoke<invokepartnerLink="ncname"portType="qname"operation="ncname"inputVariable="ncname"?outputVariable="ncname"?standard-attributes>standard-elements<correlations>?<correlationset="ncname"initiate="yes|no"?pattern="in|out|out-in"/>+</correlations><compensationHandler>?activity</compensationHandler></invoke>invokeInvoke<InventoryService>Invoke<CreditService>Reply<Invoice>Receive<PO><sequence><flow></sequence>例子<sequence>

<receivepartnerLink=“customer”portType=“l(fā)ns:purchaseOrderPT”

operation=“sendPurchaseOrder”variable=“PO”

createInstance="yes"/>

<flow>

<invokepartnerLink=“inventoryChecker”

portType=“l(fā)ns:inventoryPT”operation=“checkINV”

inputVariable=“inventoryRequest”

outputVariable="inventoryResponse"/>

<invokepartnerLink=“creditChecker”

portType=“l(fā)ns:creditPT”operation=“checkCRED”

inputVariable=“creditRequest”

outputVariable="creditResponse"/>

</flow> ......

<replypartnerLink=“customer”portType=“l(fā)ns:purchaseOrderPT”

operation="sendPurchaseOrder"variable="invoice"/></sequence>例子<assign>的作用是用新的數(shù)據(jù)來更新變量的值。assign可以包括任意數(shù)量的基本賦值。assign還可把端點引用復制到合作伙伴鏈接,或把合作伙伴鏈接復制到端點引用(服務的動態(tài)綁定)。<assignstandard-attributes>standard-elements<copy>+from-specto-spec</copy></assign>assignfrom-spec必須是以下形式中的一種:<fromvariable="ncname"part="ncname"?/><frompartnerLink="ncname"endpointReference="myRole|partnerRole"/><fromvariable="ncname"property="qname"/><fromexpression="general-expr"/><from>...literalvalue...</from>to-spec必須是以下形式中的一種:<tovariable="ncname"part="ncname"?/><topartnerLink="ncname"/><tovariable="ncname"property="qname"/>

assign<throw>從業(yè)務流程中生成故障。使用throw發(fā)出內(nèi)部故障。每個故障需要有一個全局惟一的QName,還可選提供數(shù)據(jù)的變量。故障處理程序可以使用這種數(shù)據(jù),來分析和處理該故障并植入需被發(fā)送到其他服務的所有故障消息。<throwfaultName="qname"faultVariable="ncname"?standard-attributes>standard-elements</throw>throw<terminate>可以用于立即終止當前正在運行的業(yè)務流程實例。所有當前正在運行的活動必須盡可能快地終止,而且沒有任何故障處理或補償行為。<terminatestandard-attributes>standard-elements</terminate>terminate<wait>構(gòu)造允許等待一段給定的時間或等到某一時刻。必須確切地指定wait中一個到期條件。<wait(for="duration-expr"|until="deadline-expr")standard-attributes>standard-elements</wait>wait<empty>允許在業(yè)務流程中插入“no-op”指令。empty可用于并行活動的同步。<emptystandard-attributes>standard-elements</empty>empty與語義<compensate>將使已正常執(zhí)行完的內(nèi)層作用域上調(diào)用補償處理程序。compensate定義了執(zhí)行補償所在的作用域。僅當作用域正常完成執(zhí)行之后該作用域的補償處理程序才可被調(diào)用。顯式地執(zhí)行compensate活動的能力是BPEL應用程序錯誤處理框架的基礎所在。該活動只能用于業(yè)務流程的以下部分中:在作用域的fault處理程序中,該作用域包括補償將被執(zhí)行的作用域。在作用域的補償處理程序中,該作用域包括補償將被執(zhí)行的作用域。<compensatescope="ncname"?standard-attributes>standard-elements</compensate>compensatecompensateScope_1Scope_1_1Scope_1_1_1faultHandlers<compensatescope=“Scope_1_1_1”/>Scope_1Scope_1_1Scope_1_1_1faultHandlers<compensatescope=“Scope_1”/>…………<compensationHandler>…</compensationHandler>processflow包含的活動并發(fā)執(zhí)行,可以用link指定順序sequence包含的活動順序執(zhí)行while當預定的條件滿足時,包含的活動重復執(zhí)行repeatUntil包含的活動重復執(zhí)行直到預設條件滿足為止pick阻塞并等待一個消息的來臨(或時間超時)forEach由一個指定的計數(shù)器變量控制,包含的活動順序執(zhí)行或并發(fā)執(zhí)行多次if-elseif-else多選一scope將一組活動關聯(lián)起來,使之具有共同的本地變量、伙伴連接、處理器等2.N.1.…BCAccc1c2…2.N.1.……AM2M1StructuredActivitiesswitch我們重點講解廣泛使用的1.1規(guī)范<sequence>定義一組按順序先后執(zhí)行的活動。執(zhí)行順序是sequence元素中被列出活動的先后順序。當sequence中的最后一個活動完成后,該sequence活動也就完成了。

<sequencestandard-attributes>standard-elementsactivity+</sequence>sequence<switch>允許從一組分支中只選擇一個活動分支。switch由case元素定義的一個或多個條件分支的有序列表組成,后面可跟也可以不跟一個otherwise分支。以case分支的出現(xiàn)順序檢查,第一個條件是true的分支被選擇并被作為被執(zhí)行的活動。如果有條件的分支都未被選擇,那么otherwise分支將被選擇。<switchstandard-attributes>standard-elements<casecondition="bool-expr">+activity</case><otherwise>?activity</otherwise></switch>switch<while>當預定的條件滿足時,包含的活動重復執(zhí)行。

<whilecondition="bool-expr"standard-attributes>standard-elementsactivity</while>while<pick>阻塞并等待某一個合適的消息的到達或超時警報響起。當其中一個觸發(fā)器觸發(fā)后,相關的活動就被執(zhí)行,pick也隨即完成了。pick活動等待一組相互排斥事件中的一個事件的發(fā)生,然后執(zhí)行與發(fā)生的事件相關聯(lián)的活動。如果多個事件發(fā)生,那么按照時間發(fā)生先后或選擇原則確定發(fā)生事件。當業(yè)務流程的實例的創(chuàng)建是由于接收到一組可能的消息中的一個消息而發(fā)生的時,可以使用pick形式。每個pick活動必須至少包括一個onMessage事件。onMessage事件的語義等同于有關變量屬性的可選類型的receive活動。pick<pickcreateInstance="yes|no"?standard-attributes>standard-elements<onMessagepartnerLink="ncname"portType="qname"operation="ncname"variable="ncname"?>+<correlations>?<correlationset="ncname"initiate="yes|no"?>+</correlations>activity</onMessage><onAlarm(for="duration-expr"|until="deadline-expr")>*activity</onAlarm></pick>pick<flow>結(jié)構(gòu)指定一個或多個并行地執(zhí)行的活動。為了定義任意的控制結(jié)構(gòu),可以在并行的活動中使用鏈接。flow能進一步表達直接或間接嵌套在其中的活動之間的同步相關性,link構(gòu)造用來表達這種同步相關性。一個link有一個名稱,flow活動的所有鏈必須在flow活動中分別定義?;顒拥膕ource和target元素用來鏈接兩個活動。在flow活動中聲明的每個link必須在該flow中恰好有一個活動作為它的源,恰好有一個活動作為它的目標。<flowstandard-attributes>standard-elements<links>?<linkname="ncname">+</links>activity+</flow>flow<flow><links><linkname="XtoY"/><linkname="CtoD"/></links><sequencename="X"><sourcelinkName="XtoY"/><invokename="A".../><invokename="B".../></sequence><sequencename"Y"><targetlinkName="XtoY"/><receivename="C"/><sourcelinkName="CtoD"/></receive><invokename="E".../></sequence><invokepartnerLink="D"><targetlinkName="CtoD"/></invoke></flow><flow></flow><Y><C><E><X><A><B><D><linkCtoD><linkXtoY>Links–ControlFlow<scope>結(jié)構(gòu)允許定義嵌套活動,這個嵌套活動有和自己關聯(lián)的變量、故障處理程序和補償處理程序。每個scope有一個定義它的正常行為的主要活動。該主要活動可以是一個復雜的結(jié)構(gòu)化的活動,其中有任意深度的許多嵌套的活動。所有的嵌套的活動都共享該scope。<scopevariableAccessSerializable="yes|no"standard-attributes>standard-elements<variables>...</variables><correlationSets>...</correlationSets><faultHandlers>...</faultHandlers><compensationHandler>...</compensationHandler><eventHandlers>...</eventHandlers>activity</scope>scope<sequence><receive.../><flow><sequence><invoke.../><while...><assign>...</assign></while></sequence><sequence><receive.../><invoke.../></sequence></flow><reply.../></sequence>receivereplyreceiveinvokeinvokeassignsequencesequencesequenceflowwhileNestingStructuredActivities第五節(jié)BPEL表示法及其處理1.用戶請求貸款,提供名字和賬戶信息2.有兩個web服務:a)風險評估:如果風險小則批準

b)貸款審批:檢查名字批準或不批準貸款3.回復用戶invokereceiveinvokereplyassignloanApprovalPTloanapproverriskAssessmentPTloanassessoramount<10000amount>=10000risk="high"risk="low"approved="true"approved="false"flowBPEL的表示基于圖的描述方法ifbuyer$$<seller$$elsereply(buyer)reply(seller)receive(buyer)receive(seller)assign"success"assign"failure"sequenceflowif-elseBPEL的表示結(jié)構(gòu)塊描述方法ProcessBPEL中定義的業(yè)務流程表示有狀態(tài)的Webservices當流程啟動,將通過流程定義創(chuàng)建一個新實例BPEL流程實例的創(chuàng)建和銷毀隱含在設計中receivereplyinv

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論