priminimas: eai - vilniaus universitetasuosis.mif.vu.lt/~liutauras/data/webservices/... ·...
TRANSCRIPT
Web servisų kompozicija
Priminimas: EAI● Message Broker / Object Request Broker / ESB
● IS integravimas paremtas pranešimų apsikeitimų valdymu
● Sąvokos: pranešimas, siuntėjas, gavėjas, adapteris, registras, įvykiai, ...
● Workflow● Sudėtingo verslo proceso aprašymas ir vykdymas● Sąvokos: vykdomasis mazgas, maršrutas, aktoriai,
proceso pradžia ir pabaiga,...
Verslo procesas● Procesas: veiksmų (activities) seka turinti
pradžią ir pabaigą● Inicijuojama įvykiu● Atlieka informacijos, duomenų,... transformacijas● Pagamina rezultatą
● Verslo procesas: susijusių veiksmų aibė leidžianti pasiekti iš anksto apibrėžtą rezultatą
M.P. Papazouglu...
Verslo procesų valdymas● Verslo procesų integravimas (BPI)
● Eiliškumo, hierarchijos, vykdymo logikos, informacijos apsikeitimo apibrėžimas ir vykdymas
● Verslo procesų valdymas (BPM)● BPI + „aukštesnio lygio“ valdymo funkcijos● Analizė, apibrėžimas, keitimas, planavimas,
efektyvumo ir kokybės nustatymas, optimizavimas...● Remiasi valdymo priemonėmis (tools)● Integruojami, bet nekuriami nauji procesai
Web servisai ir BPM● SOAP/WSDL/UDDI nepakankami BPM
realizacijai naudojant Web ir XML technologijas● Paprastos taikomosios programos, paprasta
sąveika● Web servisų kompozicijos sprendimai
● BPEL4WS (BPEL)● WS-Coordination● WS-Transaction● WS-CDL
Integracija:„Paprastas“ sprendimas
Pvz.: Gamintojo/tiekėjo servisai
portType
Pervežimaioperacija 1
operacija n
portType
operacija 1
operacija n
Sandė-liavimas
.Net
Java
portType
operacija 1 Tiekėjas
Java
Klientas
Sudėtingasservisas
Užsakyti produktą
Patvirtinimas
Užsakyti pristatymąPatvirtinimas
„Integruojantis“Web servisas
„Paprastas“ sprendimas● Naujo sudėtingo proceso realizavimas naudojant
„klasikines“ programavimo priemones● Priklausomas nuo platformos● Priklauso nuo programavimo kalbos● Žinomos naujo serviso realizacijos techninės detalės● Nestandartizuotas sprendimas
● BPM specifikacijos – Web servisų kompozicijos standartizavimas
Servisų kompozicijos meta-modelis
kiekis
Formali reprezentacija: grafas
Registruotiužsakymą
Gauti užsakymą
Siųstiatmetimą
Tikrintikliento vertę
Tikrintiinventorių
Užsakytipristatymą
Siųsti sąskaitą
Gautisąskaitą
... ... ...
Patvirtintipristatymą
Pristatyti
užsakymas
atmetimo detalės
kliento info.
kiekis
kiekis
kiekis
pristatymo info.rezervavimo info
pristatym
o info.
sąskaita
„Veiksmas“
„Ryšys“
„Duomenys“
Abstraktus aprašas● Formali reprezentacija acikliniu grafu● Pagrindinės sąvokos
● Veiksmas/veikla (activity)● Ryšys (link): veiksmų vykdymo eiliškumas● Duomenų elementas (data item)● Perėjimo sąlyga (transition condition)
Ryšiai ir perėjimo sąlygos
Registruotiužsakymą
Gauti užsakymą
Siųstiatmetimą
Tikrintikliento vertę
Tikrintiinventorių
Užsakytipristatymą
užsakymas
atmetimo detalės
kliento info.
kiekis
kiekis
kiekis
Kliento-id != nullKliento-kreditas != OK
Link#1:Kliento-id != nullKliento-kreditas == OK
Link#2:Kliento-vertė == OK
Link#1 OR Link#2
Perėjimosąlygos
Priklausomybėtarp ryšių(sinchronizavimas)
Kliento-verte != OK
Konkreti realizacija
Registruotiužsakymą
Gauti užsakymą
Siųstiatmetimą
Tikrintikliento vertę
Tikrintiinventorių
Užsakytipristatymą
Siųsti sąskaitą
Gautisąskaitą
... ... ...
užsakymas
atmetimo detalės
kliento info.
kiekis
kiekis
kiekis
pristatymoinfo.
rezervavimo info
pristatym
o info.
sąskaita
Patvirtintipristatymą
Pristatyti
pristatymoinfo.
Logistikostiekėjas
Orkestravimas ir choreografija● Web servisų kompozicija iš įvairių perspektyvų● Orkestravimas
● Web servisų interakcija, pranešimų apsikeitimas, vykdymo eiliškumas,...
● Iš konkretaus serviso/proceso pozicijų● Choreografija
● Bendras pranešimų apsikeitimas ir interakcijos taisyklės
● Iš visų komunikuojančių servisų pozicijų
Procesas
Gamintojas Tiekėjas
Užsakymas
Užsakymo patvirtinimas
Sąskaita
Orkestravimo perspektyva
Užsakymas
Užsakymo patvirtinimas
Sąskaita
Siųstiužsakymą
Gautipatvirtinimą
Gautisąskaitą
Iš resursųvaldymo skyriaus
Resursų valdymoskyriui
Gamintojo procesas
Choreografijos perspektyva
Užsakymas
Užsakymo patvirtinimas
Sąskaita
Siųstiužsakymą
Gautipatvirtinimą
Gautisąskaitą
Gamintojas
Gautiužsakymą
Siųstipatvirtinimą
Siųstisąskaitą
Tiekėjas
Viešas/bendras procesas
OrkestravimasBPEL
BPEL● Business Process Execution Language for Web
Services (BPEL4WS, WS-BPEL arba BPEL)● XML specifikacija verslo procesų paremtų Web
servisais apibrėžimui● Web servisų orkestravimo kalba
● Remiasi WSDL apibrėžime deklaruotais elementais● portType, operation, message, ...
BPEL ir WSDL
ActionActionActionAction PartnerLink
PartnerLink
PartnerLink
PartnerLink
BPEL
Process
ActionActionRoleRole
BPEL / Partner Link Type
Partner Link Type
WSDL
Port Type
OperationInputInput
OutputOutputFaultFault
Message
MessagePart
MessagePart
MessagePart
MessagePart
ActionActionVariablesVariables
BPEL pagrindinės savybės● Modeliuojama procesų kompozicija (partneriai)● Modeliuojamas procesų vykdymo eiliškumas● Atskiriamas abstraktus apibrėžimas nuo
konkretaus sujungimo● Partnerių „rolių“ ir jų sąryšio palaikymas● Kompensavimo mechanizmo palaikymas● Konteksto palaikymas („stateful“)● Paralelizmas ir sinchronizavimas● Įvykių valdymas
BPEL istorija● 2002: BPEL 1.0
● IBM, Microsoft, BEA, SAP, Siebel● 2003: BPEL 1.1
● Pasiūlymas OASIS standartui● 2007: BPEL 2.0 (WS-BPEL)
● OASIS standartas
Abstraktus ir vykdomas BP● Abstraktus procesas
● Aprašo pranešimų apsikeitimus tarp servisų● Tik tai, kas būtina bendravimui tarp partnerių
● Vykdomas procesas (executable)● Apibrėžia proceso pilną vidine struktūrą, proceso
logiką● Gali būti vykdomas
● Abiejų procesų aprašui gali būti naudojami tie patys specifikacijos elementai
BPEL elementai
Struktūra ir principai
portType<receive>
<invoke>
<invoke>
portType
portType
portType
Webservisas
Webservisas Partner
linksPartner
links
Webservisas
Partnerlinks
WebservisasPartner
links
<invoke>
<invoke>
<reply>
BPEL procesas
Kreditavimas
Sandėlys
Finansai
portType
portType
portType
Bendra struktūra<process name="PurchaseOrderProcess" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" ...>
<!-- Proceso dalyviai: su kuo bendraujama --> <partnerLinks> ... </partnerLinks>
<!-- Procesu naudojami duomenys: kuo apsikeičiama --> <variables> ... </variables>
<!-- Išimciu valdymas: alternatyvus vykdymo kelias --> <faultHandlers> ... </faultHandlers>
<!-- Asinchroniniai iškvietimai, konteksto, ID palaikymai --> <correlationSets> ... </correlationSets>
<!-- "Activities": <sequence>, <flow>,... Kas ir kaip daroma. --> (Activities)*
<!-- "Atšauktų" vieksmų vykdymas --> <compensationHandler> ... </compensationHandler>
<!-- Lygiagrečių įvykių valdymas --> <eventHandlers> ... </eventHandlers>
</process>
Pranešimų apsikeitimai● Nusakoma, kokius pranešimus gauna, ką
gražina, kokius servisus kviečia<process name="PurchaseOrderProcess" ...> <sequence>
<receive partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="PO" createInstance="yes"/> ... <invoke partnerLink="shipping" portType="tns:shippingPT" operation="requestShipping" inputVariable="shippingRequest" outputVariable="shippingInfo"/> <receive partnerLink="shipping" portType="tns:shippingCallbackPT" operation="sendSchedule" variable="shippingSchedule"/> .... <reply partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="Invoice"/>
</sequence></process>
Gaunama
Iškviečiama
Grąžinama
Gauti arbaparuoštipranešimas
(WSDL) interfeiso operacija
Kas gali kviesti (ar gauti)
Valdymo veiksmai (activities)● Struktūros valdymo veiksmai (stuctured
activities)<sequence> - vienas po kito<flow> - lygiagrečiai<pick> - laukti pranešimo arba „timeout“<if> (<switch>) - pasirinkti viena iš galimų veiksmų<while> - ciklas<scope> - vidinio konteksto apibrėžimas<invoke>, <receive>, <reply> - kviesti, gauti, atsakyti<assign> - kintamųjų manipuliavimas<wait> - laukti tam tikrą laiko tarpą / iki<throw> - išeiti su „fault“ į gaubiantį bloką...
Pvz.: valdymo veiksmai
<process name="PurchaseOrderProcess" ...>
<sequence> <receive name="receiveOrder" ... /> <if name="isOrderBiggerThan5000Dollars"> <condition> $order > 5000 </condition> <invoke name="calculateTenPercentDiscount" ... /> <elseif> <condition> $order > 2500 </condition> <invoke name="calculateFivePercentDiscount" ... /> </elseif> <else> <reply name="sendNoDiscountInformation" ... /> </else> </if> <invoke name="checkPayment" ... /> <invoke name="shippingService" ... /> <reply name="sendConfirmation" ... /> </sequence>
</process>
Duomenų valdymas● Proceso būsena išsaugoma proceso
kintamuosiuose (<variable>)● Deklaruojamos (<variables>)● Reikšmės atitinka gaunamus ar siunčiamus (XML)
pranešimus● Reikšmės sukomponuojamos iš turimų reikšmių
– Remiasi XPath išraiškomis– Naudoja <assign> veiksmą
Kintamieji
...<variables> <variable name="Invoice" messageType="tns:InvMessage" /> <variable name="elemVar" element="myNS:myXMLElement" /> <variable name="repCode" type="xsd:string" /> <variable name="ctVar" type="myNS:myComplexType" /></variables>
WSDL pranešimo tipas
Vartotojo arbaXML Schema tipai
<assign> <from>$Invoice/contentPart/code</from> <to variable="repCode"></to></assign>
<assign> <from variable="Invoice" part="contentPart"></from> <to variable="ServiceResponse" part="rep"></to></assign>
<assign> <from><literal>OX0092AF</literal></from> <to variable="ThisServiceCode"></to></assign>
Deklaracija
VeiksmaiXPath išraiška
Kopijavimas tarp pranešimų
Fiksuotos reikšmės
Procesų susiejimas● „Partneris“: serviso teikėjas arba vartotojas● Išreikštinai deklaruojami ryšiai tarp partnerių
● Nusakomi ryšiai tarp servisų (<partnerLink>)● Nurodoma partnerio rolė deklaruotame ryšyje
● Deklaruojama atskirai (<partnerLinkType>)● Tą pačią rolę gali turėti keli partneriai
● Remiasi atitinkamu WSDL aprašu
<partnerLinkType> (in WSDL)<wsdl:definitions targetNamespace="http://manufacturing.org/wsdl/purchase" xmlns:pos="http://manufacturing.org/wsdl/purchase" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype" ...>
<!-- portTypes supported by the purchase order process --> <wsdl:portType name="purchaseOrderPT"> <wsdl:operation name="sendPurchaseOrder"> <wsdl:input message="pos:POMessage" /> <wsdl:output message="pos:InvMessage" /> <wsdl:fault name="cannotCompleteOrder" message="pos:orderFaultType" /> </wsdl:operation> </wsdl:portType> <wsdl:portType name="invoiceCallbackPT"> ... </wsdl:portType> <wsdl:portType name="computePricePT"> ... </wsdl:portType>
<plnk:partnerLinkType name="purchasingLT"> <plnk:role name="purchaseService" portType="pos:purchaseOrderPT" /> </plnk:partnerLinkType>
<plnk:partnerLinkType name="invoicingLT"> <plnk:role name="invoiceService" portType="pos:computePricePT" /> <plnk:role name="invoiceRequester" portType="pos:invoiceCallbackPT" /> </plnk:partnerLinkType>
</wsdl:definitions>
PapildytasWSDLapibrė-žimas
<partnerLink> (& WSDL)<process name="PurchaseOrderProcess" ...>
<partnerLinks> <partnerLink name="purchasing" myRole="purchaseService" partnerLinkType="tns:purchasingLT" /> <partnerLink name="invoicing" partnerLinkType="tns:invoicingLT" myRole="invoiceRequester" partnerRole="invoiceService" /> </partnerLinks>
<sequence> <receive partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="PO" createInstance="yes"> </receive> <flow> <sequence> <invoke partnerLink="invoicing" portType="tns:computePricePT"
operation="initiatePriceCalculation" inputVariable="PO"> </invoke> ... </sequence> </flow> <reply partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="Invoice"> </reply> </sequence></process>
<process name="PurchaseOrderProcess" ...>
<partnerLinks> <partnerLink name="purchasing" myRole="purchaseService" partnerLinkType="tns:purchasingLT" /> <partnerLink name="invoicing" partnerLinkType="tns:invoicingLT" myRole="invoiceRequester" partnerRole="invoiceService" /> </partnerLinks>
<sequence> <receive partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="PO" createInstance="yes"> </receive> <flow> <sequence> <invoke partnerLink="invoicing" portType="tns:computePricePT"
operation="initiatePriceCalculation" inputVariable="PO"> </invoke> ... </sequence> </flow> <reply partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="Invoice"> </reply> </sequence></process>
<wsdl:definitions ...>
<wsdl:portType name="purchaseOrderPT"> <wsdl:operation name="sendPurchaseOrder"> <wsdl:input message="pos:POMessage" /> <wsdl:output message="pos:InvMessage" /> <wsdl:fault name="cannotCompleteOrder"
message="pos:orderFaultType" /> </wsdl:operation></wsdl:portType>
<plnk:partnerLinkType name="purchasingLT"> <plnk:role name="purchaseService"
portType="pos:purchaseOrderPT" /></plnk:partnerLinkType>
<wsdl:definitions ...>
<wsdl:portType name="purchaseOrderPT"> <wsdl:operation name="sendPurchaseOrder"> <wsdl:input message="pos:POMessage" /> <wsdl:output message="pos:InvMessage" /> <wsdl:fault name="cannotCompleteOrder"
message="pos:orderFaultType" /> </wsdl:operation></wsdl:portType>
<plnk:partnerLinkType name="purchasingLT"> <plnk:role name="purchaseService"
portType="pos:purchaseOrderPT" /></plnk:partnerLinkType>
BPEL
WSDL
<invoke>portType
„ptA“(op1, op2)
Web Service
portType„ptB“
(opX, opY)
<wsdl:definitions ...> <wsdl:portType name="ptA"> op1, op2, ... </wsdl:portType> <wsdl:portType name="ptB"> opX, opY, ... </wsdl:portType>
<plnk:partnerLinkType name="lnTypeX"> <plnk:role name="rA" portType="tns:ptA" /> <plnk:role name="rB" portType="tns:ptB" /> </plnk:partnerLinkType>
</wsdl:definitions> <process name="ProcesZ" ...> ... <partnerLinks> <partnerLink name="linkL" partnerLinkType="tns:lnTypeX" myRole="rA" partnerRole="rB" /> </partnerLinks> ...</process>
<process name="ProcesZ" ...> ... <partnerLinks> <partnerLink name="linkL" partnerLinkType="tns:lnTypeX" myRole="rA" partnerRole="rB" /> </partnerLinks> ...</process>
lnTypeX / linkL
process „ProcessZ“
myRole „rA“ partnerRole „rB“
Susiejimas● Susiejimas tarp konkrečių partnerių/servisų
● Dinamiškas: nustatomas vykdymo metu● Statiškas: nustatomas įdiegimo metu● BPEL konteinerio (runtime) atsakomybė
● Gali remtis WS-Addressing EndpointReference elementu
<sref:service-ref reference-scheme="http://www.w3.org/2005/08/addressing">
<wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:Address>http://manufacturer.com/services/PurchaseService/wsdl</wsa:Address> <wsa:PortType>tns:purchaseOrderPT</wsa:PortType> ... </wsa:EndpointReference></sref:service-ref>
[A]Sinchroninis iškvietimas
<process ...> <receive partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="PO"/>
<!-- ... Vykdomi kiti proceso veiksmai ... -->
<reply partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="Invoice" /></process>
Sinchroninis iškvietimas
<process name="PurchaseOrderProcess" ...>
<receive partnerLink="purchasing" portType="tns:purchaseOrderPT" operation="sendPurchaseOrder" variable="PO" />
<!-- Vykdomi ilgai trunkantys proceso veiksmai ... -->
<invoke partnerLink="purchasing" portType="tns:purchaseOrderCallbackPT" operation="sendPurchaseOrderResponse" variable="InvoiceResponse" />
</process>
Asinchroninis iškvietimas
Lygiagretus vykdymas● <flow> veiksmas leidžia vykdyti vidinius
veiksmus lygiagrečiai● Sinchronizavimas pasiekiamas
naudojant <link> elementus● Atitinkami veiksmai nurodo, kuris
pradinis (<source>) ir galinis(<target>) ryšio elementas
● Gali turėti papildomas „sudėtingas“sąlygas
Link#1:
Link#2:
Link#1 AND Link#2
Lygiagretus valdymas... <flow> <links> <link name="ship-to-invoice" /> <link name="check-credit" /> </links> <invoke partnerLink="shipping" portType="tns:shippingPT" operation="requestShipping" inputVariable="shippingRequest" outputVariable="shippingInfo"> <source linkName="ship-to-invoice" /> </invoke> <invoke partnerLink="creditCheck" portType="tns:CheckCreditPT" operation="ceckCustomerCredit" inputVariable="customerInfo"> <source linkName="check-credit" /> </invoke> <invoke partnerLink="scheduling" portType="tns:schedulingPT" operation="sendShippingSchedule" inputVariable="shippingSchedule"> <targets> <joinCondition>$ship-to-invoice and $check-credit</joinCondition> <target linkName="ship-to-invoice" /> <target linkName="check-credit"/> </targets> </invoke> </flow>...
=
Klaidų valdymas● Proceso vidinės ar išorinės klaidos gali būti
apdorojamos <faultHandler> konteineryje● „Gaudomos“ visos gaubiančiame bloke esančių
veiksmų klaidos● Klaidos nurodomos jų vardu ir/arba susietų
duomenų turiniu (žr. WSDL <fault> elementą)● Proceso viduje gali būti išprovokuotos <throw>
veiksmu
Pvz.: klaidos<process ...>
<variables> <variable name="ShipFault" messageType="tns:POShipFault" /> </variables> ...
<faultHandlers> <catch faultName="ship:IncorrectAddress" > <invoke ...> </catch>
<catch faultName="ship:IncorrectAddress" faultVariable="ShipFault" > <invoke ...> </catch>
<catch faultVariable="ShipFault" > <invoke ...> </catch>
<catchAll> <!-- ---> </catchAll> </faultHandlers>
<!-- ...Proceso veiksmai, kuriuos vykdant gali įvykti klaidos... -->
</process>
Blo
kas
Žr. WSDL
Šį vardą turintys fault bepapildomų duomenų
Šį vardą turintys fault su duomenimis, kurių struktūra atitinka ShipFaultBet kokie fault'ai, kurių struktūraatitinka ShipFault
Visi kiti fault'ai
Iškviečiami atitinkami veiksmai
Kiti elementai ir veiksmai● Pranešimų koreliacija
● Su pranešimais susiejami papildomi resursai<correlationSet>, <correlation>
● Kompensacijų valdymas● Atšaukiami prieš tai įvykdytų veiksmų rezultatai
<compensationHandler>● Sub-procesų apibrėžimas
● Proceso dalių izoliavimas<scope>
● Įvykių valdymas...
BPEL realizacijos
BPEL kūrimo ir valdymo priemonės● Integruotos SOA kūrimo priemonės
● BPEL visual designers● BPEL vykdymo platformos
● Apache ODE (Orchestration Director Engine)http://ode.apache.org/
● JBoss jBPMhttp://www.jboss.org/jbpm
● ...
Pavyzdys
<definitions targetNamespace="http://jbpm.org/examples/hello" xmlns:tns="http://jbpm.org/examples/hello" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="nameMessage"> <part name="name" type="xsd:string" /> </message>
<message name="greetingMessage"> <part name="greeting" type="xsd:string" /> </message>
<portType name="Greeter"> <operation name="sayHello"> <input message="tns:nameMessage" /> <output message="tns:greetingMessage" /> </operation> </portType>
<plt:partnerLinkType name="Greeter-Caller"> <plt:role name="Greeter"> <plt:portType name="tns:Greeter" /> </plt:role> </plt:partnerLinkType>
</definitions>
WSDL
<process name="HelloWorld" targetNamespace="http://jbpm.org/examples/hello" xmlns:tns="http://jbpm.org/examples/hello" xmlns:bpel="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
<partnerLinks> <partnerLink name="caller" partnerLinkType="tns:Greeter-Caller" myRole="Greeter" /> </partnerLinks>
<variables> <variable name="request" messageType="tns:nameMessage" /> <variable name="response" messageType="tns:greetingMessage" /> </variables>
<sequence name="MainSeq">
<receive name="ReceiveName" operation="sayHello" partnerLink="caller" portType="tns:Greeter" variable="request" createInstance="yes" />
<assign name="ComposeGreeting"> <copy> <from expression="concat('Hello, ', bpel:getVariableData('request', 'name'), '!')" /> <to variable="response" part="greeting" /> </copy> </assign>
<reply name="SendGreeting" operation="sayHello" partnerLink="caller" portType="tns:Greeter" variable="response" />
</sequence>
</process>
BPEL
Choreografija
Choreografija● Procesų tarpusavio interakcijos apibrėžimas ir
kontrolė● Užtikrinama, jog procesų tarpusavio pranešimų
apsikeitimai vykdomi pagal numatytą planą● Užtikrinama, jog sistemos evoliucija ir pakeitimai
lieka suderinami su numatytais scenarijais
WS-CDL● WS-Choreography Definition Language
● W3C Candidate Recomendation 1.0, 2005● BPEL?
● BPEL gali būti matoma kaip choreografijos dalis„BPEL is a programming language to specify the behavior of a participant in a choreography [...] choreography is concerned with describing the message interchanges between participants. Participants of a choreography are peers, there is no center of control...“
Web Services Choreography Working Group
Pagrindiniai WS-CDL elementai<package ...>
<informationType ...> <token ....> <role ...> <relashionship ...> <role ...> <role ...>
<channelType ...> <role...> <reference ...> <identity ...>
<choreography ..> <variableDefinitions> <variable ...> <interaction ....> <participate ...> <exchange ...> <exchange ...> </interaction>
</choreography>
....
Pranešimų tipai irelementai
Rolės ir ryšiai tarppartnerių
Komunikacijos kanalai
Konkreti interakcijatarp partnerių: rolės,komunikacijos kanalai,apsikeičiami pranešimai