Processi BPEL Obiettivi - Università degli Studi di Roma "Tor Vergata"

Università degli studi di Roma “Tor Vergata”
Facoltà di Ingegneria
Processi BPEL
Corso di Sistemi Distribuiti
Stefano Iannucci
Anno accademico 2009/10
Email: [email protected]
Obiettivi
z
Esercitazione pratica su:
z
z
z
creazione e gestione di web services
orchestrazione di web services con Business
Process Execution Language (BPEL)
Requisiti software:
z
IDE NetBeans 6.7.1
z
Application server GlassFish 2
z
OpenESB
z
Disponibili in un unico pacchetto:
https://open-esb.dev.java.net/Downloads.html
1
Passi per la creazione di un web service
z
z
Creazione di un modulo EJB
Creazione di un Session Bean di tipo Web
Service all'interno del progetto
z
Definizione delle operazioni (metodi) esposti
z
Implementazione della business logic
z
Deployment
2
Creazione di un “echo” web service
z
Creare un nuovo progetto di tipo Java EE → EJB Module
z
Impostare il nome di progetto a “LezWS”
z
Scegliere come application server Glassfish V2
z
Scegliere come versione Java EE: “Java EE 5”
3
Creazione di un “echo” web service (2)
z
Click col pulsante destro sul nome del progetto
z
Scegliere New → Web Service
z
Compilare la form come mostrato in figura
4
Creazione di un “echo” web service (3)
z
z
z
z
Il nostro web service non è ancora pronto: dobbiamo
definire almeno un'operazione (metodo) da poter invocare
Aprendo il Session Bean appena creato, passiamo alla
vista “Design” e clicchiamo su “Add Operation...” per
aggiungere un'operazione
Ci viene richiesto di fornire il nome, un tipo di output e zero
o più tipi di input. Usiamo echo come nome,
java.lang.String come tipo di output ed aggiungiamo un
parametro di tipo java.lang.String
L'ultima cosa è l'implementazione della business logic,
molto semplice nel nostro caso: tornando sulla vista
“Source” modifichiamo lo statement return null; con return
parameter;
5
Deployment di un “echo” web service
z
z
z
z
Siamo pronti per eseguire il deploy (pubblicazione) del
servizio web.
Click col pulsante destro sul
nome del progetto → Deploy.
L'IDE, tramite ant ed il file build.xml, compila il modulo
creandone il jar, fa partire GlassFish e quindi pubblica
il web service.
Il web service è ora accessibile all'indirizzo:
http://localhost:8080/EchoWSService/EchoWS
z
z
Il WSDL è stato automaticamente generato ed è
disponibile all'indirizzo:
http://localhost:8080/EchoWSService/EchoWS?wsdl
6
Orchestrazione dei servizi web
z
z
z
z
I web service consentono di realizzare in modo
semplice, modulare, standard applicazioni distribuite
Problema: i moduli di un'applicazione hanno la
necessità di essere “connessi” tra loro
Soluzione: introduciamo una logica di livello
superiore, che esprime le modalità di invocazione dei
servizi (esecuzione sequenziale, condizionale, ecc.)
BPEL ci consente di definire tale logica come se
stessimo costruendo un Activity Diagram UML e gli
IDE ci facilitano il compito fornendo una comoda
interfaccia grafica.
7
Esempio: UML Activity Diagram
8
BPEL: Relazioni con i Partner
Partner Service
Partner Service
Partner Service
z
Partner: entità coinvolta nell'esecuzione del
processo. Può essere:
z
un web service esterno
z
il client che invoca il processo
9
BPEL: caratteristiche generali
z
z
z
z
Fornisce un modello dei dati universale per lo
scambio di messaggi
Manipola e trasforma i dati per interagire
correttamente con i propri partner
Implementa il processamento parallelo delle
attività
Gestisce le eccezioni ed implementa logiche di
compensazione (cosiddette operazioni di undo)
10
BPEL: le attività
z
z
Le attività in BPEL hanno la stessa valenza di
quelle di un Activity Diagram UML
Organizzate in:
z
Attività di base: esprimono una generica azione
−
z
<invoke>, <receive>, <reply>, <assign>, <throw>, <wait>,
<empty>, <exit>
Attività strutturate: sono utilizzate per raggruppare
attività di base
−
<if>, <while>, <repeatUntil>, <foreach>, <pick>, <flow>,
<sequence>, <scope>
11
BPEL: l'attività <receive>
z
z
z
Tutti i processi sincroni prevedono la
combinazione delle attività: <receive> e
<reply>.
L'attività <receive> esegue una wait bloccante
aspettando che arrivi un messaggio (una
richiesta). <receive> è l'attività delegata ad
istanziare il processo business.
La <receive> è associata a:
z
un Partner Link (canale di comunicazione con un
Partner)
z
una operazione
z
una variabile di input
12
BPEL: l'attività <reply>
z
z
z
Nei processi sincroni viene utilizzata per
rispondere al Partner Link che ha inviato il
messaggio di richiesta, a conclusione del
processo business.
L'attività di <reply> può dare due tipi di risposta:
z
Risposta normale
z
Risposta con fault
L'attività di <reply> è associata a:
z
un Partner Link
z
una operazione
z
una variabile di output
13
BPEL: l'attività <invoke>
z
z
Attività utilizzata per invocare una determinata
operazione di un Partner Link.
L'attività <invoke> è associata a:
z
un Partner Link
z
una operazione
z
z
una variabile di input (del tipo di input
dell'operazione)
una variabile di output (del tipo di output
dell'operazione)
14
BPEL: l'attività <assign>
z
z
z
Consente di copiare il contenuto di variabili o
campi di variabili complesse all'interno di altre
variabili o campi
E' composta da una o più <copy> ed ogni
<copy> è composta da un <from> ed un <to>
Due sintassi per l'identificazione dei dati:
z
z
Semplice (utile per copiare dati tra due variabili o
tra parti di variabili)
Xpath (utile per copiare dati tra campi di variabili di
tipo complesso)
15
BPEL: l'attività <assign> (2)
z
Esempio con identificazione semplice (questo
presuppone che entrambe le variabili abbiano lo
stesso tipo):
<assign name="Assign1">
<copy>
<from variable=”inVar”/>
<to variable=”outVar”/>
</copy>
</assign>
z
Esempio con l'utilizzo di Xpath (questo presuppone che i
campi di origine e destinazione abbiano lo stesso tipo):
<assign name="Assign1">
<copy>
<from>$inVar.part1/ns0:nome</from>
<to>$outVar.part1/ns1:prenotazioneAlbergo</to>
</copy>
</assign>
16
BPEL: l'attività <assign> (3)
z
E' possibile identificare i dati in modo misto, sempre
tenendo in considerazione i tipi di origine e destinazione.
Esempio:
<assign name="Assign1">
<copy>
<from>$inVar.part1/ns0:nome</from>
<to variable=”outVar”/>
</copy>
</assign>
z
Infine, è possibile utilizzare il costrutto <literal> per
assegnare manualmente il valore ad una variabile
17
BPEL: attività strutturate
z
Attività <sequence>
z
z
Attività <flow>
z
z
Fornisce l'implementazione dei costrutti fork e join
consentendo l'esecuzione parallela di attività
Attività <while> e <repeatUntil>
z
z
Consente l'esecuzione sequenziale di attività
Forniscono la possibilità di eseguire cicli su attività
secondo determinate condizioni espresse secondo una
logica booleana
Attività <if>
z
Implementa il costrutto di programmazione if – then –
else fornendo la possibilità di esecuzione condizionale
18
di attività
BPEL: attività scope
z
L'attività <scope> permette la creazione di “pacchetti” di
attività.
z
z
z
z
Ogni <scope> ne può contenere altri annidati
Il suo utilizzo consente l'introduzione dei fault handlers
tramite il costrutto <faultHandlers>
Ogni fault handler può avere una o più attività <catch> ed
al più un'attività <catchAll>
z
z
z
Ogni <scope> ha un'attività primaria, solitamente
<sequence> o <flow>
Le attività <catch> “catturano” eventi specifici come in Java
L'attività <catchAll> cattura qualsiasi tipo di eccezione, come
catch (Exception e) {;}
Il “catching” viene eseguito a seguito di un “throw”
19
BPEL: attività throw
z
Un processo BPEL può fallire per vari motivi:
z
z
z
z
Può esplicitamente lanciare un'eccezione
L'invocazione di un servizio esterno può non
andare a buon fine
Possono verificarsi problemi a livello di ambiente
d'esecuzione (es. fallimento di una join)
Come in Java, possiamo sollevare
esplicitamente un'eccezione con il costrutto
<throw>
20
Passi per la creazione di un processo BPEL
1) Dobbiamo avere a disposizione i WSDL:
•
dei servizi da invocare
•
del processo stesso
2) Ogni WSDL ci consente di creare un PartnerLink, che può
implementare due ruoli:
•
myRole: indica il processo stesso
•
partnerRole: indica il ruolo di un partner esterno
3) Dobbiamo strutturare il grafo di esecuzione
Partner Service
Partner Service
Partner Service
21
Esempio: BPEL Process “Echo”
22
JBI, OpenESB
z
z
Scopo di Java Business Integration (JBI): fornire un approccio
per l'implementazione di una architettura orientata ai servizi
(SOA)
Due tipi di componenti implementano le specifiche JBI: “Service
Engine” (SE) e “Binding Components” (BC).
z
z
z
I primi sono i servizi offerti dall'application server in uso (es.
BPEL Engine, JavaEE Engine, SQL Engine, …)
gli altri sono invece i componenti che consentono ai vari
moduli applicativi presenti sull'application server di poter
comunicare ai vari Service Engine in modo standard.
OpenESB implementa i BC secondo le specifiche JBI. Esempi
di BC implementati da OpenESB sono: HTTP BC, FTP BC,
eMail BC.
23
Riferimenti
z
GlassFish ESB:
https://open-esb.dev.java.net/
z
WS-BPEL Oasis Standard:
http://www.oasis-open.org/committees/wsbpel/
z
JAX-WS:
https://jax-ws.dev.java.net/
24