Orchestrazione e coreografia
BPEL vs WS-CDL
Service Oriented Architecture
Architettura basata su servizi
Servizi
Funzioni di business auto-contenute
Eseguono unità di lavoro discrete
non posso invocare un servizio “a metà”
Indipendenti dalla tecnologia (interoperabilità)
Invocabili utilizzando standard di comunicazione
Disaccoppiati
Si conoscono unicamente tramite un’interfaccia pubblica
Devo poter modificare l’implementazione di un servizio
senza toccare gli altri
Trasparenti rispetto alla locazione
Recuperabili interrogando un repository
Basic SOA
Service
Provider
Publish
Service
Registry
Bind
Find
Service
Client
Web Services
XML
XSD
Service
Provider
Caso tipico
HTTP
WSDL
Publish
Bind
UDDI
Service
Registry
Find
Service
Client
Messaggi
SOAP
WS Stack
Composition - Processes
BPEL, BPELJ, WS-CDL
Coordination - Context - Transactions - Security
WS-Coordination, WS-AtomicTransactions, WS-Security, …
Description
WSDL, WS-Policy
Advertisement
UDDI
Messaging
SOAP, WS-Addressing, WS-ReliableMessaging
Transport
HTTP, SMTP, HTTPS
Format
XML
Simple Object Access
Protocol
Envelope
Header
Body
Document
Messaggio, parametri,
valori
Fault
Protocollo indipendente dal
livello di trasporto per lo
scambio di documenti XMLbased
Messaggio SOAP:
Header con informazioni
aggiuntive - infrastrutturali (es:
gestione della sicurezza)
Body con il messaggio da
comunicare
Fault per l’eventuale gestione
di errori e eccezioni
Modalità di interazione
Determinate dall’encoding SOAP
Tipo di interazione
Tipo di codifica
Due modalità fondamentali:
RPC (sempre meno utilizzata)
Document-based (message passing)
Si tende a realizzare una invocazione con
risultato con una coppia di messaggi
ma non c’è più attesa del cliente
Web Services Description
Language 1/3
Dialetto XML per la descrizione
dell’interfaccia pubblica di un servizio
Cosa fa il servizio (operazioni e relativi parametri)
Dove si trova
Come si invoca
La descrizione si compone di una parte
astratta (interfaccia) e di una concreta
(realizzazione del servizio)
WSDL 2/3
Parte astratta
Messaggio
informazione effettivamente scambiata tra requestor e
provider (per input, output, fault)
Associato a parametri
Tipi XSD
Operation
descrizione astratta di un’attività supportata dal servizio
si aggancia a messaggi
Interface (o Port Type) = insieme di operazioni
astratte
WSDL 3/3
Parte concreta
Types
definizione dei tipi (tramite XSD)
Binding
Specifica i protocolli di comunicazione e i formati dei dati
per le operazioni e i messaggi definiti da un’interfaccia
Port (Endpoint)
Specifica l’indirizzo per legarsi al servizio
Service
aggregazione di un insieme di porte
Esempio 1/2
Tipo
<element name=“TradePrice”>
<complexType>
<all>
<element name=“price” type=“float”/>
</all>
</complexType>
</element>
Messaggio
<message name=“GetLastTradePriceOutput”>
<part name=“body” element=“xsdl:TradePrice”/>
</message>
Esempio 2/2
portType (request-response)
<portType name=“StockQuotePortType”>
<operation name=“GetLastTradePrice”>
<input message=“tns:GetLastTradePriceInput”/>
<output message=“tns:GetLastTradePriceOutput”/>
</operation>
</portType>
Modalità di interazione
In base a come una operation viene legata ai
messaggi otteniamo 4 diverse modalità di
interazione
One way
Un solo messaggio in input all’endpoint
Request response
L’endpoint riceve un messaggio ed emette in output una
risposta
Solicit response (?)
L’endpoint invia un messaggio al client (sollecitazione) e
attende un messaggio di risposta
Notification (?)
L’endpoint invia un messaggio di notifica in output
Composizione di servizi
Possiamo comporre servizi semplici per
realizzare applicazioni più complesse
Da servizi a processi di business
Due approcci
Orchestrazione
Si definisce un servizio in termini di interazione con altri
servizi + parti “private”
Coreografia
Si definisce, assumendo un punto di vista globale, come
devono interagire differenti servizi al fine di raggiungere
l’obiettivo della composizione
L’interfaccia di comportamento di un servizio rappresenta
la parte del servizio che interagisce con l’esterno
Business Process Execution
Language (for Web Services)
Linguaggio XML-based per l’orchestrazione
di una serie di servizi al fine di realizzare un
processo di business
Il coordinatore è, in fase di esecuzione, il
BPEL-engine che esegue la specifica
Standard de-facto proposto dall’IBM
A partire da una serie di servizi stateless
costruisco un processo con stato…
…che può eventualmente esporsi a sua volta
come servizio
Le due visioni di BPEL
Linguaggio core per definire i ruoli (abstract WSDL)
che interagiscono con il processo e specificare i
pattern di interazione con tali ruoli
Questo core si può poi istanziare su due differenti
realtà
La specifica di un protocollo di business o processo
astratto (interfaccia di comportamento)
La specifica di un processo eseguibile (processo
astratto + attività private, interne al processo stesso)
Idea fondamentale: finchè un processo espone la
stessa interfaccia di comportamento, possiamo
aggiornarlo senza toccare il mondo esterno
Parti fondamentali
Variables
Dati utilizzati dal processo
WSDL message types
Tipi semplici o elementi XSD
partnerLinks
Identificazione di chi interagisce con il processo
Definizione del processo
Definizione dei fault handlers
Sia per cause interne che per cause esterne (vedi
WSDL)
Definizione degli handler di compensazione
Partner del processo
Un partner è un insieme di partnerLink
Deve fornire le funzionalità richieste
Un partnerLink rappresenta un servizio con cui il
processo interagisce
È identificato da un partnerLinkType
Un partnerLinkType è associato ad un ruolo e
ad un portType (vedi WSDL)
Nota: una port implementa un portType
A livello di definizione, rimaniamo in astratto
In fase di esecuzione è possibile definire
staticamente o dinamicamente l’istanza con cui si
interagirà
Dati
I dati costituiscono lo stato del processo
Sono i messaggi scambiati, i valori intermedi delle
variabili, i valori dei time-out…
Lo scoping è quello classico (vale l’innestamento)
Variabili o globali o valide all’interno di uno scope
Problemi nel caso di uso di variabili ancora non
inizializzate
Ci sono anche delle “proprietà” definite
globalmente (tipi XSD semplici che
rappresentano le informazioni principali del
processo)
Correlazione
In alcuni casi il processo vuole dialogare
sempre con la stessa istanza di un partner
In OO si usa un object reference
Paradigma inutilizzabile nel contesto WS
Si ricorre all’uso dei dati (che determinano lo
stato) e dei protocolli di comunicazione
Usiamo un business token, dichiarando la sua
struttura e la sua posizione nell’envelope
Dichiariamo che un gruppo di attività è correlato
dicendo quali token di correlazione vengono
condivisi dalle attività (correlation set)
All’inizio il correlation set non ha valore
viene assegnato allo scambio di un certo messaggio
Inizio e fine di un processo
BPEL descrive un processo con stato
E che quindi ha un ciclo di vita
Un processo viene istanziato implicitamente
Attributo createInstance=YES sulla ricezione di un
messaggio (receive o pick)
Il processo viene istanziato sempre su stimolo esterno
Terminazione…
Quando non c’è più nulla da fare (terminazione
implicita)
Quando viene sollevato un fault
Utilizzando <terminate> (terminazione anomala,
solo per processi concreti)
Attività
Utilizzate per modellare il comportamento del
processo e degli handlers
Attività semplici e costrutti complessi
(diramazione del flusso, sincronizzazione,
cicli)
BPEL eredita da
XLANG (Microsoft)
Linguaggio strutturato
WSFL(IBM)
Basato su grafi
Invocazione di un servizio
Invoke
Invocazione di un servizio su un partner
Invocazione asincrona
Si specifica la variabile di input
Invocazione sincrona
Si specifica sia l’input che l’output
Si può eventualmente verificare (e gestire localmente o
rilanciare) un fault
Associabile ad un handler di compensazione (inline)
Ricezione di una richiesta
Receive
Ricezione di un messaggio da parte di un
partnerLink, il quale indica portType e operation
che vuole invocare
Eventualmente si utilizza una variabile per
accogliere i dati spediti (fondamentale per un
processo concreto)
Può istanziare il processo
Se è l’unica attività iniziale (non preceduta da nessuno)
Nel caso sia in parallelo con altre receive di questo tipo,
tutte devono appartenere allo stesso correlation set
Non è possibile l’attivazione simultanea di due
receive esattamente identiche
Risposta
Reply
Utilizzata per rispondere ad una richiesta sincrona
(rilevata con una precedente receive)
In caso di richiesta asincrona, l’eventuale risposta si
spedisce con una invoke
Eventualmente associabile alla variabile
contenente la risposta
Semantica indefinita nel caso di una reply “isolata”
Si può specificare se si tratta di una risposta
normale o di un fault
Altre attività semplici
Assign
Assegna il contenuto di una variabile ad un’altra
variabile (anche tra parti di messaggi)
Throw
Genera un fault interno
Wait
Sospende il processo per un certo tempo o fino ad
una certa deadline (es. attiva una attività il tal
giorno)
Empty
No-op (utilizzato ad es. per catturare un fault e
non fare nulla)
Attività complesse 1/3
Specificano il flusso di esecuzione
Sequence
Ordinamento sequenziale delle attività innestate
Switch
Scelta di uno e un solo percorso fra una serie, in
base a una condizione logica (ramo otherwise per
indicare l’else)
Si sceglie il primo ramo valutato vero (non
deterministicamente)
Se nessuna condizione è true e non c’è l’else si
suppone ci sia un implicito
<otherwise><empty/></otherwise>
Attività complesse 2/3
While
Ripetizione finchè una condizione non diventa vera
Pick
Mette il processo in attesa di una serie di messaggi
o di un allarme
Attesa di un messaggio: tag onMessage (= a receive)
Allarme: tag onAlarm (stessi attributi della wait)
Appena scatta l’allarme o arriva uno dei messaggi
il processo si risveglia (se arrivano due messaggi
“simultanei” scelta non deterministica)
Il pick viene disattivato
Può creare un’istanza del processo
Non ci dev’essere un’allarme
Attività complesse 3/3
Flow
Concorrenza/sincronizzazione di attività
Si può imporre l’ordinamento fra attività concorrenti
utilizzando dei link (reminiscenza di WSFL)
Posso realizzare sincronizzazioni intermedie
Ad una attività qualsiasi possiamo associare uno o
più link sia in ingresso che in uscita
Ogni link può essere associato ad una condizione logica
A
B
A
C
E
D
F
B
sequenza
C
Links
Un’attività è associata ad una condizione di
join sullo stato dei link entranti
Default: true se almeno uno dei link dà valutazione
positiva
Valutazione dei link:
A termina tutti i suoi link uscenti sono valutati
B dipendente da A tramite link valuta
Se B è “strutturalmente” pronto a partire
Se lo stato di tutti i suoi link entranti è stato valutato
Se sì viene valutata la condizione di join
Se vera B viene attivata
Altrimenti viene sollevato un fault speciale
Dead Path Elimination
Attributo (a livello di scope) per dire che non
vogliamo questo tipo di fault
In caso di condizione di join negativa:
L’attività B viene saltata
Tutti i link uscenti da B vengono valutati
negativamente
La valutazione negativa si propaga finchè
non si trova un punto in cui la condizione di
join dà riscontro positivo (DPE)
Esempio
I link possono scavalcare le attività
strutturate (entro certi limiti ben fissati)
Join condition: C1 C2
sequence
A
B
C1
X
C
C2
Y
Compensation handlers
Gestione a livello applicativo della
compensazione
L’handler di compensazione non può
modificare lo stato del processo (agisce solo
sull’esterno)
In futuro ci sarà interazione
L’handler viene installato quando la parte di
processo a cui si riferisce è completata
È può in seguito essere invocato con
<compensate> da
Un fault handler
L’handler di compensazione dello scope che lo contiene
Event handlers
Possiamo associare a uno scope degli
eventi che
scattano in maniera asincrona rispetto al
processo
Attivano un’attività (complessa)
La regola di triggering è l’arrivo di un
messaggio o un timer
L’evento rimane sempre abilitato (può
riscattare arbitrariamente)
Estensione: processi
eseguibili
Gestione più approfondita di
Espressioni
Variabili
Assegnamenti
Possibilità di terminare esplicitamente il
processo con <terminate>
Maggior numero di fault
Estensione: business
protocols
Le variabili possono essere utilizzate anche se
non inizializzate
Potrebbero essere state manipolate da attività private
Si possono omettere parametri nei messaggi
Output: suppongo che siano gestiti implicitamente
Input: il dato non mi interessa a livello pubblico
Ipotesi sulle correlazioni…
Assegnamento con copia da una variabile opaca
Non sappiamo qual è il suo valore
Ne viene preso uno non deterministicamente dal suo
spazio dei valori
Esempio
receive
Event
onMsg
initiate
Initiate
message
correlation
kill
invoke
evalClaim
terminate
pick
onMsg
Task
response
onTaskResult
onAlarm
10 days
invoke
evalClaim
end
pick
Task
response
client
Initiate
message
receive
recTaskResult
status
Initiate
message
Task
response
evaluate
claim
assign
Extract status status=‘rejected’
Rejection
handling
status=‘accepted’
Acceptance
hangling
otherwise
throw
illegalStatus
end
escalate
claim
agent
Implementazioni
Lo standard lascia alcuni punti non specificati
Es: al processo viene consegnato un messaggio
quando non se lo aspetta
Lo butta via? Segnala un errore? Lo tiene in sospeso?
Solitamente il BPEL-engine mantiene una coda in
cui inserisce i messaggi in arrivo per consumarli
quando possibile
B A
Receive A
Receive B
A
B
B
B
A
Qualche nota
Problematiche
Nessuna interazione con l’utente
Nessuna possibilità di invocare attività private
BPELJ rende possibile inserire sezioni di codice JAVA
all’interno del processo BPEL
Descrive davvero un processo di business?
Composizione di servizi con un approccio fortemente
centralizzato
Ogni interazione deve per forza riguardare l’orchestratore
Non c’è la possibilità di invocare un (sotto)processo
BPEL
WS-CDL
The Web Services Choreography Description
Language (WS-CDL) is a declarative XML-based
language that describes peer-to-peer collaborations
of participants by defining, from a global viewpoint,
their common and complementary observable
behavior; where ordered message exchanges
result in accomplishing a common business goal.
WS1
WS2
WS3
WS4
Note generali
WS-CDL: contratto collaborativo che specifica come
i partecipanti devono interagire
Interazione non più legata ad un centro di controllo
Si separa l’interazione dai partecipanti
I partecipanti devono esibire un’interfaccia di comportamento
conforme alla coreografia
Interoperabilità garantita dall’interfaccia
Fornisce uno strumento per superare le resistenze
ad integrare servizi propri con quelli di altre parti
La coreografia è a tutti gli effetti un contratto
È un linguaggio descrittivo, non eseguibile
Non per forza i partecipanti devono essere servizi!
Panoramica di WS-CDL
Principalmente abbiamo
Una parte dichiarativa
Ruoli partecipanti
Relazioni fra ruoli (commitments)
Canali di comunicazione fra partecipanti
Una parte conversazionale
Descrizione dell’interazione
Contempla anche la possibilità di specificare
l’avanzamento della collaborazione in termini di
informazioni e stato dei partecipanti
Che possono eventualmente sincronizzarsi
Semantica degli elementi
WS-CDL permette di agganciare agli
elementi una descrizione
Opzionale
In maniera
Testuale
Specificando un URI
Agganciandosi ad OWL oppure RDF
Parte dichiarativa
Descrizione delle funzionalità e dei legami
che i peer devono esibire per poter
collaborare
roleType
Ruolo che un peer può giocare
Enumera una serie di comportamenti che il ruolo
esibisce
Ogni comportamento può essere opzionalmente
agganciato a un’interfaccia WSDL
participantType
Collezione dei ruoli assunti da un partecipante
Relazioni
relationshipType
Relazione tra due ruoli che interagiranno
(mutual commitments)
Si possono anche inserire esplicitamente quali
comportamenti sono richiesti dalla relazione
(default: tutti quelli del ruolo)
Ovviamente un partecipante può
partecipare alla relazione se realizza il
ruolo richiesto
Canali 1/2
Identificano come e dove scambiarsi
informazioni per realizzare la collaborazione
I canali possono essere passati come
argomenti di un messaggio (PI calcolo…)
Comunicazione dinamica
Esempio
il cliente spedisce il “canale di consegna” al provider
Il provider effettua il forward al fornitore
Il fornitore utilizza questo canale per spedire il bene al
cliente (che prima non conosceva)
Il canale può vincolare il suo uso
Numero massimo di messaggi supportati
Restrizione delle informazioni trasportabili (canali compresi)
Canali 2/2
Utilizzo possibile di un canale
Once: una volta da un partecipante
Distinct: più volte da un partecipante
Shared: più volte da più partecipanti
Azioni:
Receive, Respond o Receive/Respond
Associato al ruolo (comportamento) che chi lo
utilizza deve esibire
Specifica vincoli sui messaggi che possono
transire
Eventualmente agganciandosi ad altri canali
Esempio
<channelType name=“OrderChannel”
action=“request”
usage=“distinct”>
<roleType typeRef=“Supplier”/>
Messaggi accettati
<identity usage="primary">
dal canale:
<token name="OrderId" />
•All’inizio solo
</identity>
messaggi contenenti
<identity usage="alternate"> OrderID
•Poi messaggi
<token name="TxnId" />
contenenti OrderID
</identity>
o TxnId
</channelType>
Variabili
Utilizzate per più scopi
Memorizzare le informazioni scambiate via messaggi
Catturare lo stato di un partecipante
Es: quando il cliente spedisce l’ordine salva in una variabile
di stato ORDER_SENT
Descrivere i canali (politiche, URL, …)
Variabili globali o relative a un ruolo
Se due ruoli di un partecipante def. la stessa c’è
condivisione
Attributi per specificare
Politiche di lettura/scrittura della variabile
Passaggio di variabili da una sotto-coreografia
Token referenziano parti di variabili (via Xpath)
Coreografie
Definiscono i contratti di interazione
Attività, eccezioni, finalizers
Nel documento si inseriscono una o più toplevel choreographies
Una può essere dichiarata root (abilitata per
default)
Le altre vengono abilitate quando eseguite
Una coreografia può richiamarne un’altra
(riusabilità)
O definita localmente
O richiamandone una di top-level (o esterna)
Coreografia - attributi
Coordinamento
indica che tutti i partecipanti devono essere
d’accordo su come la coreografia è terminata
Eventualmente con un coordination protocol
Isolamento
Indica che le variabili utilizzate dalla coreografia
sono visibili dalle altre solo quando termina
Altrimenti c’è condivisione delle variabili
Linea di vita
father successfully completed
no more activity enabled
initiator interaction performed
waiting
enabled
exception
(catched)
Complete condition==true
succesfully
completed
no
finalizer
exception
(propagated)
unsuccesfully
completed exceptionBlock completed
finalizerBlock
completed
closed
Enclosing
choreographies
closed
Interaction
Attività fondamentale
Modella lo scambio di informazioni tra partecipanti
ed eventuale sincronizzazione del proprio stato
osservabile
Consiste nell’invio di un messaggio
Associata a
Coppia di ruoli coinvolti e canale
Operazione richiesta al ricevente
Informazione scambiata
Variabili utilizzate da sender e receiver per lo
scambio
Eventuali variabili di stato che reagiscono
all’interazione
Allineamento
Indica la necessità di avere concordanza sugli
effetti di un’interazione su sender e receiver
Controllando la coerenza nella modifica delle variabili
di stato
Verificando la consistenza delle variabili che
memorizzano l’info scambiata
I partecipanti possono capire che il messaggio è
stato effettivamente consegnato
Esempio: buyer e seller vogliono verificare che dopo
l’effettuazione di un ordine
orderState(Buyer)=‘Sent’ e orderState(Seller)=‘Received’
Le variabili order(Buyer) e order(Seller) hanno = contenuto
Interaction - exchange
Exchange (scambio di informazioni)
Specifica del fault (compatibilità con WSDL)
Request o respond
Info scambiate
Send: cosa viene inviato
Receive: cosa viene ricevuto
Eventuale time-out
Record riferiti dall’exchange e/o dal time-out
Manipolazione di variabili dicendo quando e come
Nota: se più di una respond scelta implicita
Esempio
<exchange name="request" informationType="tns:purchaseOrderType”
action="request">
<send variable="cdl:getVariable('tns:purchaseOrder','','')" />
<receive variable="cdl:getVariable('tns:purchaseOrder','','')"
recordReference="record-the-channel-info" />
</exchange>
<exchange name="response"
informationType="purchaseOrderAckType"
action="respond">
<send variable="cdl:getVariable('tns:purchaseOrderAck','','')" />
<receive variable="cdl:getVariable('tns:purchaseOrderAck','','')" />
</exchange>
<exchange name="badPurchaseOrderAckException”
faultName="badPurchaseOrderAckException”
informationType="badPOAckType”action="respond">
<send variable="cdl:getVariable('tns:badPurchaseOrderAck','','')"
causeException="tns:badPOAck" />
<receive variable="cdl:getVariable('tns:badPurchaseOrderAck','','')"
causeException="tns:badPOAck" />
</exchange>
Performance
Indica che si passa a eseguire una nuova
coreografia (enclosed)
Non devono esistere dipendenze cicliche
Fase di bind in cui si legano variabili del
chiamante a quelle del chiamato
Attributo block
Truesi attende la fine della enclosed
choreography
Falsel’enclosed choreography viene attivata in
parallelo col flusso del chiamante
Se il chiamante termina con successo l’enclosed termina
automaticamente con successo
Altre attività semplici
Assign (~BPEL)
silentAction
Il ruolo esegue un’operazione non
osservabile dall’esterno
noAction (empty in BPEL)
Nota: se il ruolo non viene specificato
vuol dire che riguarda tutti…
Workunit
Unità di lavoro
Attività preceduta da un vincolo
condizione che deve essere verificata affinchè la
collaborazione possa continuare
Solo se (o quando) il vincolo è soddisfatto l’attività
viene abilitata
Attributo block
Si testa la condizione o si attende finchè non
diventa vera
Attributo repeat (modellazione di cicli)
Indica che quando la workunit è terminata si
considera di nuovo la condizione
Funzioni specifiche
Funzioni richiamabili nelle condizioni
Data/ora corrente
Si suppone che gli orologi siano più o meno
sincronizzati
Test su deadline/timer
Conoscenza dello stato della coreografia
Gestione delle variabili
Recupero valore o attesa disponibilità
Test sull’allineamento
Trigger globali
Variabili di diversi ruoli
Esempi
<workunit name="WaitForAlignment"
guard="cdl:variablesAligned(
'PurchaseOrderAtBuyer',
'PurchaseOrderAtSeller',
'tns:Customer-Retailer-Relationship')"
block="true" >
<!--some activity -->
False se la
</workunit>
variabile non è
disponibile
<workunit name="StockCheck"
guard="cdl:getVariable(
'StockQuantity','','/Product/Qty','tns:Retailer')
>10"
block="false" >
<!--some activity -->
</workunit>
Ordering Structures
Sequence
Parallel
Choice
Mutua esclusione classica (deferred)
Quando viene scelto un ramo gli altri sono disabilitati
Se i rami contengono workunits con guardie
Si possono realizzare punti decisionali
La prima workunit che fa match (se più d’una non
determinismo) determina la scelta
Eccezioni
Coreografia associata a una o più exception
workunit
Non bloccanti e non cicliche
Default: nessuna guardia
Altrimenti si esprime l’interesse per una certa
eccezione (funzione apposita)
Le workunit sono abilitate quando viene
abilitato l’exceptionBlock
Meccanismo di match (se più di una non
determinsmo) o propagazione
L’eccezione può leggere le variabili
Finalization
Quando la coreografia termina con
successo
Può essere invocato uno fra una serie di
finalizerBlocks
Gestiscono la compensazione della coreografia
commit, undo, cancel, rollback applicativi
I finalizer si distinguono per nome e ne
viene scelto uno solo
Coordinamento 1/2
Garantisce che tutti i ruoli siano
d’accordo su come la coreografia è
terminata
Indica che un insieme di interazioni è
allineato (conoscenza condivisa)
Tutti i ruoli sanno che la coreografia è
terminata con successo o meno
L’accordo viene raggiunto con un
coordination protocol
Coordinamento 2/2
Nel caso di enclosed choreography l’accordo
è anche sull’eventuale finalizer
Se non c’è coordinamento viene sollevata
un’eccezione
Se la coreografia termina con un eccezione e
alcuni ruoli non se ne accorgono, il protocollo
di coordinamento solleva un’eccezione su
questi
Esempio 1/3
Warehouse
Retailer
r4w
w4r
r4c
w4c
c4r
c4w
Consumer
Esempio 2/3
sequence
Interaction handlePO
POc
POackc
POreq
POr
POresp
POackr
Interaction handlePO
RWreq
POr
okR
RWresp
assign
okR
result
clientSatisfied
POw
okW
Esempio 3/3
NON NOTO A PRIORI
choice
workunit block=false repeat=false guard=boolean(customerSatisfied)
Interaction handlePOResponse
POResp
POResp
POposResp
perform CWchoreo
La warehouse invia una ricevuta al consumer
(estraendo il canale dal messaggio precedentemente ricevuto dal retailer)
workunit block=false repeat=false guard=not(boolean(customerSatisfied))
Interaction handlePOResponse
POResp
POResp
POnegResp
Qualche spunto…1/2
Van der Aalst. Life After BPEL?
Sostiene che BPEL astratto è una forzatura
Serve un linguaggio dichiarativo
Indica tre importanti topic
Process mining
Riscostruzione di un processo da un event log
Conformance testing
Verifica di compliance su un event log
Mediation
Adattamento di un servizio in modo da permettergli di
partecipare a una coreografia
Conformance test ++
Qualche spunto…2/2
Barros, Dumas, Oaks. A critical overview of WS-CDL
Topic
Separare il meta-modello di coreografia dall’XML
Ricondurre WS-CDL a un linguaggio formale
Per la verifica di proprietà
Per la verifica di conformance
Supporto di interazioni multi-party e multi-instance
Rapporto con BPEL
Come mappare le workunit sui costrutti BPEL?
Necessità di definire un core unitario
Notazione grafica per esprimere la coreografia a
livello alto