Vzory interakce zpráv v komponentě BPEL Process Marek Rychlý Vysoké učení technické v Brně Fakulta informačních technologií Ústav informačních systémů Přednáška pro IOA 5. listopadu 2014 Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 1 / 25
Obsah 1 Orchestrace služeb s asyncrhonním voláním Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním 2 WS-Addressing Correlation Sets Problémy při korelaci zpráv 3 Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 2 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Orchestrace služeb a BPEL Process komponenta (opakování ze 4. přednášky) Orchestruje napojené komponenty/služby pomocí vlastní logiky. (komponenta je vhodná pro implementaci business procesů/služeb) Logika orchestrace zapsána v jazyce BPEL v1.1 nebo BPEL v 2.0. (BPEL v1.1 aka BPEL4WS a BPEL v2.0 aka WS-BPEL jsou standardizovány) BPEL nemá stanovenou grafickou notaci, narozdíl od BPMN. (BPMN modely jsou převoditelné do BPEL, ikdyž to je pak velmi špatně čitelné) (diagram převzat z Oracle SOA Suite 11g: Essential Concepts ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 4 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Přehled strukturovaných aktivit v BPEL procesu (opakování z 6. přednášky) (diagram převzat z Next Generation Web Services in Practice ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 5 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Přehled základních aktivit v BPEL procesu (opakování z 6. přednášky) (diagram převzat z Next Generation Web Services in Practice ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 6 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Synchronní a asynchronní volání služeb (opakování z 6. přednášky) Při synchronním volání (typicky krátce pracující) služby předány parametry operaci volané služby a obdržena návratová hodnota případně zpráva o chybě. (po vyvolání služby její klient čeká/je blokovaný až do přijetí odpovědi) Při asynchronním volání (typicky dlouze pracující) služby předány parametry operaci volané služby pokud návratová hodnota, tak obdržena později pomocí callback. (po volání služby klient pokračuje, čeká až/pokud vůbec potřebuje odpověd ) (diagram převzat z Asynchronous vs. Synchronous BPEL process ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 7 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Asynchronní volání služby v BPEL procesu (diagram převzat z Oracle BPEL Process Manager Developer s Guide 10g ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 8 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Problémy při asynchronním volání služeb Požadavek na službu a odpověd samostatnými HTTP voláními. (volání požadavku i callback pomocí HTTP metody POST s prázdnou odpovědí) Protokol HTTP bezestavový, nelze sdružit volání do session. (nelze poznat, který callback souvisí se kterým původním požadavkem) Kontejner, kde běží BPEL engine přijímající volání, musí umět přiřadit do procesu přijatou zprávu na správnou aktivitu receive, (zejména odlišit zprávu začínající novou instanci BPEL procesu, tj. přijímanou prvním receive procesu, a zprávu končící to správné asynchronní volání orchestrované služby, tj. přijímanou jako callback tím správným receive následujícím po příslušném invoke ) přiřadit přijatou zprávu té správné instanci BPEL procesu. (proces je typicky v jednom okamžiku používán mnoha klienty, tj. existuje mnoho souběžných instancí BPEL procesu v různých stavech jeho průběhu) Instance čekající na callback mohou být dočasně pozastaveny. (tzv. Dehydration Point na obrázku na předchozí stránce) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 9 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Příklad BPEL procesu s asynchronním voláním WSDL dokument volané služby <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" targetnamespace="http://mybank.com/unitedloan"...>... <porttype name="loanservice"> <operation name="initiate"> <input name="request" message="tns:loanservicerequestmessage"/> </operation> </porttype> <porttype name="loanservicecallback"> <operation name="onresult"> <input name="result" message="tns:loanserviceresultmessage"/> </operation> </porttype> <plnk:partnerlinktype name="loanservice"> <plnk:role name="loanserviceprovider"> <plnk:porttype name="tns:loanservice"/> </plnk:role> <plnk:role name="loanservicerequester"> <plnk:porttype name="tns:loanservicecallback"/> </plnk:role> </plnk:partnerlinktype>... </definitions> Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 10 / 25
Aktivity BPEL související s orchestrací Asynchronní volání orchestrovaných služeb Příklad BPEL procesu s asynchronním voláním Příklad BPEL procesu s asynchronním voláním BPEL proces volající službu <bpel-process id="loanbroker" src="loanbroker.bpel" wsdllocation="loanbroker.wsdl"> <properties id="loanservice"> <property name="wsdllocation">http://mybank.com/unitedloan?wsdl</property> </properties> <partnerlink name="loanservice" partnerlinktype="services:loanservice" myrole="loanservicerequester" partnerrole="loanserviceprovider"/> </partnerlinks> <variables> <variable name="request" messagetype="services:loanservicerequestmessage"/> <variable name="response" messagetype="services:loanserviceresultmessage"/> </variables> <sequence> <receive name="receiveinput" partnerlink="client" variable="input" porttype="tns:loanbroker" operation="initiate" createinstance="yes"/>... <invoke name="invoke" partnerlink="loanservice" inputvariable="request" porttype="services:loanservice" operation="initiate"/>... <receive name="receivecb" partnerlink="loanservice" variable="response" porttype="services:loanservicecallback" operation="onresult"/>... </sequence> </bpel-process> Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 11 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Korelace asynchronních volání služeb Korelace = vzájemná souvislost/souvztažnost/interakce. (příchozích a odchozích zpráv v rámci jednoho BPEL procesu) Nutno přiřadit zprávy k instancím/vláknům běžících procesů. (příchozí zpráva musí nést informaci, která se použije pro výběr instance/vlákna) 1 WS-Addressing (v hlavičce volání je adresa callback operace a identifikátor zprávy) 2 Correlation Sets (zprávy řazeny do množinna základě obsahu a ty pak k instancím procesu) (diagram převzat z Patterns and Strategies for Building Document-Based Web Services ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 13 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Web Services Addressing (WS-Addressing) W3C specifikace pro adresování SOAP zpráv. (způsob identifikace endpoints webových služeb a jejich adresace ve zprávách) Adresát zprávy v SOAP hlavičce, ne v transportním protokolu. (nemusí být shodný s HTTP serverem, ten může být např. proxy či ESB službou) <S:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <S:Header> <wsa:messageid>uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff</wsa:messageid> <wsa:replyto> <wsa:address> http://mybank.com/loanbroker/loanservicecallback </wsa:address> </wsa:replyto> <wsa:to>http://mybank.com/unitedloan/loanservice</wsa:to> <wsa:action>http://mybank.com/unitedloan/loanservice/request</wsa:action> </S:Header> <S:Body>... </S:Body> </S:Envelope> Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 14 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Adresace v rámci WS-Addressing Adresát SOAP zprávy určen elementy <to/> a <action/> jako URI operace daného poskytovatele služby (dle operation / soapaction v popisu binding WSDL dokumentu služby) a URI akce definující sémantiku volání operace. (identifikující vstupní/výstupní zprávy operace v porttype WSDL služby) Operace a akce tedy dle WSDL popisu služby adresáta zprávy. (URI akce implicitně [targetnamespace]/[porttype name]/[input output name] )) <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" targetnamespace="http://mybank.com/unitedloan"...>... <porttype name="loanservice"><operation name="initiate"> <input name="request" message="tns:loanservicerequestmessage" wsa:action="http://mybank.com/unitedloan/loanservice/request"/> </operation></porttype> <porttype name="loanservicecallback"><operation name="onresult"> <input name="result" message="tns:loanserviceresultmessage" wsa:action="http://mybank.com/unitedloan/loanservice/result"/> </operation></porttype>... </definitions> Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 15 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Volání callback operace s použitím WS-Adressing Kromě adresáta zprávy obsahuje každá SOAP hlavička ID zprávy. (v elementu <MessageID/>, např. jako universally unique identifier (UUID)) Při callback obsahuje hlavička také ID zprávy původní zprávy. (tj. ID původní zprávy dřívějšího asynchronního volání, na kterou odpovídá zpráva volání callback operace; v elementu <RelatesTo/>) <S:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"> <S:Header> <wsa:messageid>uuid:aaaabbbb-cccc-dddd-ffff-eeeeeeeeeeee</wsa:messageid> <wsa:relatesto>uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff</wsa:relatesto> <wsa:to S:mustUnderstand="1"> http://mybank.com/loanbroker/loanservicecallback </wsa:to> <wsa:action>http://mybank.com/unitedloan/loanservice/result</wsa:action> </S:Header> <S:Body>... </S:Body> </S:Envelope> ( mustunderstand říká, že příjemce musí elementu porozumět, jinak vrátit chybu) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 16 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv WS-Addressing při ansynchroním volání s callback (diagram převzat z Oracle BPEL Process Manager Developer s Guide 10g ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 17 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Množiny korelací (Correlation Sets) WS-Addressing se nehodí v případech, kdy na jedno volání služby odpoví tato více callback voláními, (a chceme jednotlivé callback volání odlišit, např. daným pořadím) BPEL proces čeká na dodatečné/doplňující informace od klienta. (např. sekvence operací NewUserSignUp a EnterVerifCodeSentByEmail ) Correlation Sets (CSs) seskupují volitelně volání a příjem zpráv. (tzn. umožňují přiřadit aktivity invoke a receive do daných korelačních množin) Seskupení zpráv probíhá na základě jejich obsahu, ne hlaviček. Odchozí zprávou je přiřazena instance procesu do dané CS. (odchozí zpráva je prozkoumána a vyhoující data určí příslušnou CS) Příchozí zpráva je namapována na CS a předána čekající/přijímající instanci procesu v této množině. (příchozí zpráva je prozkoumána a vyhoující data určí příslušnou CS) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 18 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Correlation Set Property & Property Aliases Hodnoty Correlation Set Property (CSP) určují CS. (tzn. stejné hodnoty CSP znamenají stejnou CS a tedy i stejnou instanci procesu) Každá CSP je dána názvem a datovým typem. Každá CS má přiřazenu/je určna hodnotami skupiny CSP. (např. CS UserRegistration má přiřazenu CSP RegisteringUserLogin ) Každý invoke 1 / receive / reply může být přiřazen k CSs. (toto sdružuje aktivity invoke / receive / reply do korelačních množin) Aktivity invoke / receive / reply mohou inicializovat CS. (pak je daná aktivita první v dané CS, definuje vlastnosti CS pro ostatní aktivity) Pro každou CSP nutný Property Alias, mapování na data zpráv. v inicializujících aktivitách říká jak z dat naplnit danou CSP v CS, v ostatních říká s jakými daty zpráv porovnávat CSP pro výběr CS. 1 u invoke lze navíc určit, které zprávy se CS týká; tj. request/response Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 19 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Correlation Set, Property, Property Aliases CS, CSP a PA jsou vlastnosti instance komponenty BPEL Process (v aplikaci jdeveloper se nastavují v nástrojovém panelu BPEL editoru) CS určuje seskupení příchozích a odchozích volání v rámci procesu. (každou aktivitu týkající se volání lze přiřadit do CSs) CSP určuje atributy, které definují dané CS. (inicializovaná CS pak má nastaveny hodnoty svých CSP) PA určuje mapování CSP na obsah XML zpráv volání. (jak ze zprávy inicializovat CS či jak poznat, ke kterým CS aktivita patří) (diagram převzat z ActiveVOS Designer Online Help V7.0.1, Correlation ) (diagram převzat z SOA for the Business Developer: Concepts, BPEL, and SCA ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 20 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Korelace zpráv a revize SCA aplikací SCA aplikace se nasazuje/deploy na server s číslem revize. (nové verze implementace aplikace mají vyší číslo revize, než verze staré) Staré, na serveru již běžící, revize se nemažou. (klienti si mohou při volání webových služeb vynutit kompativilní revizi) Nové revize se typicky stávají implicitními/default. (pokud neuvedou klienti číslo požadované revize, komunikují s default revizí služby) Korelace může mít problémy s běžícími revizemi služeb: 1 BPEL proces v SCA aplikaci revize A zavolá asynchronně službu, (po dopoknčení zpracování požadavku čeká BPEL proces na callback ) 2 na server je nahrána/deployed nová revize BPEL procesu B > A, (nová revize se stane implicitní/default) 3 dříve volaná služba se pokusí provést callback na BPEL proces, 4 SCA kontejner přijme callback volání a protože je bez čísla revize, předá ho instanci BPEL procesu revize B, ne původní A. 5 chyba, protože instance B takový callback nečeká. Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 21 / 25
WS-Addressing Correlation Sets Problémy při korelaci zpráv Korelace zpráv a revize SCA aplikací vysvětlení a korekce Každá inicializovaná Correlation Set má tzv. Conversation ID. (vypočítané na základě zpravy zpracovávané aktivitou inicializující CS a názvu CS) Callback zpráva je směrována na instanci BPEL procesu podle Conversation ID, jména operace volané webové služby, jména volané BPEL komponenty. Problémem je stejná zpráva a název inicializující CS a stejně pojmenovaná operace nad BPEL komponentou stejného jména. (stejné u SCA aplikaci různých revizí; SCA kontejner neví kam zprávu doručit) V případě problému, nastavit Conversation ID pro každou instanci ručně z dat zprávy použité při inicializaci. (např. na hodnotu orderno 1000 + revisionid, atp.) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 22 / 25
Korelace zpráv asynchronních volání důležitá pro přijetí příchozí zprávy správnou aktivitou receive ve správné instanci BPEL procesu. Korelace v BPEL procesu pomocí WS-Addressing a Correlation Sets. WS-Addressing mapuje zprávy požadavků na odpovědi ( callbacks ) pomocí speciálních elementů SOAP hlavičky. Correlation Sets umožňují seskupit invoke / receive / reply aktivity na základě SOAP těla/obsahu zpráv. Příště? BPEL aktivity Pick a FlowN, transakce v BPEL procesech. (proces začínající příjmem jedné z více zpráv, dynamické spojení na partnery,... ) Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 24 / 25
Poděkování Tento předmět byl podpořen projektem MŠMT CZ.1.07/2.2.00/15.0163 Vzdělávání v IT pro praxi. Marek Rychlý Vzory interakce zpráv v komponentě BPEL Process Přednáška pro IOA, 5. listopadu 2014 25 / 25