Questa serie di articoli descrive come BPEL e Oracle BPEL Process Manager facilitino lo sviluppo di applicazioni SOA. In questo primo articolo affronteremo le principali caratteristiche del linguaggio BPEL e come esse vengono implementate nello strumento Oracle per la creazione di questo tipo di processi.
Introduzione
BPEL costituisce il linguaggio standard per la Process Orchestration e rappresenta sicuramente uno dei componenti fondamentali per realizzare delle Service Oriented Architecture: esso, infatti, permette l’integrazione e la cooperazione di diverse componenti, generando così dei servizi web dal valore aggiunto che mantengono le caratteristiche di modularità e scalabilità.
Web Service Orchestration
Nel panorama attuale, aumenta sempre di più la propensione a sviluppare degli applicativi che rispettano le direttive della Service Oriented Architecture: l’affermarsi dei Web Service, infatti, rende più agevole e funzionale lo sviluppo di processi di business, in cui ogni servizio esposto corrisponde a un’attività che può essere messa a disposizione per essere invocata da agenti esterni. In questo modo, è possibile gestire dei workflow operativi, generati da attività atomiche e sapientemente invocati da un unico gestore logico esterno. Si è resa quindi evidente la necessità di mettere a disposizione uno strumento standardizzato che avesse la possibilità di interagire con diversi servizi web, esposti da diversi fornitori, componendoli al fine di creare nuovi servizi dal valore aggiunto.
Il coordinamento dei vari servizi può essere realizzato principalmente in due modi:
Orchestrazione
Presuppone che il controllo del workflow venga mantenuto da un solo gestore logico, che interagisce, anche per processi di lunga durata, con altri servizi, interni od esterni.
Coreografia
Consiste in un approccio più “collaborativo”, ossia ogni partecipante esegue il suo lavoro, e il sistema di coreografia si occupa esclusivamente di tenere traccia delle interazioni avvenute.
Figura 1 – Coreografia
Queste due tipologie di architetture garantiscono un accoppiamento debole tra chi richiede e chi eroga il servizio; inoltre in ambedue le tipologie si evidenzia l’impossibilità di tracciare lo stato del servizio: si parla quindi di processi stateless.
Per chiarire meglio il concetto di orchestrazione può essere effettuato un paragone con il concetto di workflow. La definizione di un workflow, infatti, si traduce nella definizione del flusso di lavoro che effettua operazioni passando da un task all’altro, gestendo stati e risultati; d’altro canto, la definizione di un processo orchestrato significa introdurre un elemento centrale nel processo, che possiede il controllo del flusso che circola tra i servizi, che quindi possono essere assimilati ai task dello stesso workflow.
Il linguaggio BPEL è stato riconosciuto come standard per l’orchestrazione di servizi web, quindi per la definizione dei processi di business: esso, infatti, mette a disposizione diverse funzioni per l’elaborazione dei dati ricevuti dai web service partner del processo, e, tramite funzioni X-Path, esegue operazioni anche complesse su di essi.
In figura 2 viene riportato uno schema generale di processo BPEL.
Figura 2 – BPEL Process
BPEL4WS: Caratteristiche fondamentali
L’importanza del linguaggio BPEL come strumento per l’orchestrazione dei web service si evidenzia principalmente effettuando un parallelo con la specifica da cui deriva, ossia lo standard WSDL. Infatti, la specifica WSDL permette di definire l’interfaccia pubblica dei servizi web, quindi la modalità con cui effettuare operazioni con il servizio stesso; ma, nella definizione di questa interfaccia vi è la completa assenza del concetto di stato, che porta quindi a definire l’interazione con i servizi web come una pura interazione Client-Server, che rende impossibile la creazione di processi di business complessi. Il linguaggio BPEL, invece, sopperisce a questa mancanza fornendo la possibilità di definire variabili che persistono durante tutta l’esecuzione del processo: questa caratteristica è realizzata rendendo anche il processo BPEL un web service, che interagisce con l’esterno tramite un’interfaccia WSDL, che presenta dei tag particolari per la concretizzazione del servizio. Si evidenzia quindi la natura ricorsiva di BPEL: BPEL consente, cioè di modellare le collaborazioni tra servizi esterni o interni, ma il processo da lui gestito viene anch’esso visto dall’esterno come un servizio Web. In questo modo si hanno notevoli vantaggi, prima fra tutte l’estrema modularità con cui possono essere costruiti diversi processi a partire dalle medesime attività atomiche.
Un’altra caratteristica fondamentale è che BPEL è sostanzialmente un’applicazione XML-based. Questa peculiarità gli permette di integrarsi e collaborare con altre applicazioni basate su XML; inoltre, risulta necessaria per l’adempimento della principale funzione di questo linguaggio, ossia l’orchestrazione dei web service. Questi ultimi, infatti, come già detto, basano la loro comunicazione sullo standard WSDL, che è anch’esso XML-based, per cui la comunicazione risulta più agevole se fondata su standard comuni ad entrambi i partecipanti.
È importante sottolineare inoltre come BPEL si distanzi ancora dallo standard WSDL nella gestione di interazioni in modalità sincrona e asincrona, cosa che invece i servizi web semplici non rendono possibile. In particolare, la modalità asincrona prevede che il chiamante effettui la chiamata senza allocare risorse condivise (e per questo viene anche chiamata shared nothing), e successivamente continui a eseguire il proprio lavoro senza attendere la risposta del chiamato. Una volta che quest’ultimo abbia terminato il proprio processo, esso può restituire il risultato delle proprie operazioni a BPEL.
La specifica di un processo
Nel linguaggio BPEL, un processo è composto dalla rappresentazione delle interazioni tra i partner e dalla descrizione della sequenza di attività da svolgere. Un’istanza di processo è creata a run-time dall’interprete al momento in cui il processo viene chiamato, e scatena la sequenza delle attività ed interazioni modellate a livello statico.
Il ruolo di BPEL è di definire un nuovo web service componendone altri esistenti, in modo da garantire quindi la proprietà ricorsiva del linguaggio: l’interfaccia del processo sarà quindi descritta da un WSDL, la cui invocazione scatena la generazione di un’istanza del processo stesso.
La richiesta di attivazione del processo da parte di un client viene modellata attraverso l’attività di receive, e la risposta allo stesso viene gestita attraverso l’attività di reply. Questa modalità di interazione si coniuga perfettamente con i quattro modelli di comunicazione definiti dallo standard WSDL: one-way, notification, request-response, sollicit-response.
L’implementazione del processo BPEL si compone internamente di una serie di attività, racchiuse dal tag
targetNamespace="http://xmlns.oracle.com/BPELProcess"
xmlns_xsd="http://www.w3.org/2001/XMLSchema"
xmlns_bpws="http://schemas.xmlsoap.org/ws/2003/
03/business-process/"
xmlns_xp20="http://www.oracle.com/XSL/Transform/java/
oracle.tip.pc.services.functions.Xpath20"
xmlns_ldap="http://schemas.oracle.com/xpath/extension/ldap"
xmlns_bpelx="http://schemas.oracle.com/bpel/extension"
xmlns_client="http://xmlns.oracle.com/BPELProcess"
xmlns_ora="http://schemas.oracle.com/xpath/extension"
xmlns_orcl="http://www.oracle.com/XSL/Transform/java
/oracle.tip.pc.services.functions.ExtFunc">
//PARTNERLINKS
//List of services participating in this BPEL process
myRole="BPELProcessProvider"
partnerRole="BPELProcessRequester"/>
//VARIABLES
//List of messages and XML documents used within this BPEL process
//Reference to the message passed as input during initiation
messageType="client:BPELProcessRequestMessage"/>
//Reference to the message that will be sent back to the requester during callback
messageType="client:BPELProcessResponseMessage"/>
// ORCHESTRATION LOGIC
// Set of activities coordinating the flow of messages across the
// services integrated within this business process
// Receive input from requestor.
portType="client:BPELProcess" operation="initiate"
variable="inputVariable" createInstance="yes"/>
query="/client:BPELProcessProcessRequest/client:input"/>
query="/client:BPELProcessProcessResponse/client:result"/>
//Asynchronous callback to the requester
portType="client:BPELProcessCallback" operation="onResult"
inputVariable="outputVariable"/>
Come si può vedere dal codice riportato, il processo è costituito da una sequenza di operazioni, racchiuse come detto dal tag
- Invoke, che consente l’invocazione delle operazioni esposte da un web service che partecipa al processo;
- Receive, per indicare la ricezione di un messaggio in seguito all’invocazione di un web service;
- Reply, genera la ricezione di un messaggio nell’ambito di una operazione di tipo receive-reply asincrona;
- Wait, consente al processo di essere messo in sospensione per un certo intervallo temporale;
- Assign, copia delle informazioni da una variabile all’altra;
- Throw, costituisce una sorgente di eccezione;
- Terminate, conclude l’istanza del processo;
- Empty, il processo non compie operazioni.
Le attività strutturate comprendono invece:
- Sequence, che permette di eseguire una successione di attività semplici o strutturate;
- Switch, permette di selezionare un’attività in base alla verifica di una condizione booleana;
- While, utile per la definizione di loop condizionati;
- Pick, permette di selezionare un’attività in base ad un messaggio ricevuto;
- Flow, permette l’esecuzione in parallelo di una sequenza di attività.
Le attività sopra elencate possono essere combinate per generare un processo di business complesso.
Conclusioni
In questo primo articolo si è fornita una panoramica generale su come il linguaggio BPEL costituisca uno strumento per l’orchestrazione dei servizi Web. Nei prossimi articoli si entrerà più nel dettaglio nella definizione di un processo BPEL, utilizzando uno degli strumenti visuali più diffusi per l’implementazione dei processi: Oracle BPEL Process Manager.
Riferimenti
[1] Oracle BPEL Process Manager
http://www.oracle.com/technology/products/ias/bpel/index.html
[2] Stany Blanvalet et alii, “BPEL Cookbook. Best Practices for SOA-based integration and composite applications development”, Packt Publishing Ltd, 2006
[3] Daniel Rubio, “BPEL: Web Services orchestration, hands-on with ActiveBPEL”, 2005
[4] B. Mathew – P. Sarang – M.B. Juric, “Business Process Execution Languange for Web Service”, Packt Publishing Ltd, 2006