Indice
Riassunto analitico... 4
1 Introduzione...11
1.1 Scopo del progetto...11
1.2 Contenuto del documento... 13
1.3 Convenzioni e notazioni... 13
2 Le tecnologie... 14
2.1 Java Message Service...14
2.1.1 Il modello... 14
2.1.2 Gli attori... 15
2.1.3 Il package javax.jms...16
2.1.4 Le applicazioni...20
2.1.4.1 Comunicazione tra processi Java... 20
2.1.4.2 SOAP-over-JMS...22
2.1.4.3 Integrazione con altri prodotti... 23
2.1.5 Gli strumenti... 24
2.1.5.1 Sun Java System Application Server 8...24
2.2 Business Process Execution Language... 25
2.2.1 Il linguaggio... 27
2.2.1.1 Struttura...27
2.2.1.1.1 Integrazione con il WSDL...28
2.2.1.2 Costrutti principali...33
2.2.1.2.1 Interazione con servizi web... 33
2.2.1.2.2 Variabili...34
2.2.1.2.3 Correlazione... 36
2.2.1.2.4 Visibilità, gestione degli errori e compensazione...39
2.2.1.2.5 Controllo di flusso... 42
2.2.2 Le applicazioni...44
2.2.2.1 Sviluppo di applicazioni ad hoc in ambiente distribuito... 44
2.2.2.2 Integrazione di sistemi legacy... 44
2.2.2.3 Evoluzione di processi di business da servizi esistenti... 45
2.2.3 Limiti attuali e sviluppi futuri... 46
2.2.3.1 Attributi ridondanti ed attributi mancanti...46
2.2.3.2 Web service asincroni... 48
2.2.3.3 Integrazione con altri standard W3C...53
2.2.4 Gli strumenti... 55
2.2.4.1 GlobalBiz Process Engine...55
2.2.4.2 Oracle BPEL Process Manager... 56
2.2.4.3 ActiveBPEL... 56
2.3.3 Le applicazioni...62
2.3.3.1 Client con connessione diretta...62
2.3.3.2 Connection pooling... 63 2.3.3.3 Classi proxy...65 2.3.3.4 Applicazioni server... 68 2.3.4 Sviluppi futuri... 69 3 Il progetto...70 3.1 Analisi funzionale... 70
3.2 Analisi non funzionale... 71
3.3 Architettura...72
3.3.1 Distribuzione dei moduli del sistema...73
3.3.2 Formato dei dati... 74
3.4 Implementazione...76 3.4.1 Il modulo IBRA... 76 3.4.1.1 HttpController... 77 3.4.1.2 Pop3Controller... 80 3.4.1.3 SmsController...84 3.4.1.4 RmiController...90 3.4.1.5 PrepareRequestDispatcher... 93 3.4.1.6 PrepareRequestModule... 100 3.4.2 I web service... 103 3.4.2.1 Il documento WSDL... 103 3.4.2.2 CompletePurchaseOrder...113 3.4.2.3 InsertPurchaseOrderController...115 3.4.2.4 InsertPurchaseOrder... 117 3.4.2.5 SendResponse...121 3.4.3 Il documento BPEL...123 3.4.4 L'interfaccia web... 131 3.4.5 Esempi d'uso... 133
3.4.5.1 Successo con invio via web e risposta via posta elettronica... 133
3.4.5.2 Fallimento con invio via SMS...138
4 Conclusioni...140
4.1 Sviluppi futuri di Zlatan...140
4.2 Considerazioni finali... 141
Appendice A – Apache Axis... 142
Appendice B – Installazione e configurazione di Zlatan...144
Bibliografia... 147
Note sul copyright...149
Indice delle figure
Figura 1: interazione tra attori nel modello SOA... 11
Figura 2: rappresentazione grafica del pattern JMS PTP... 14
Figura 3: rappresentazione grafica del pattern JMS PUB/SUB...15
Figura 4: class diagram di JMS con interfaccia base Connection... 16
Figura 5: class diagram di JMS con interfaccia base Destination... 16
Figura 6: class diagram di JMS con interfaccia base Session...16
Figura 7: class diagram di JMS con interfaccia base ConnectionFactory...16
Figura 8: esempio di composizione dei processi di un server distribuito... 20
Figura 9: schema di funzionamento del server distribuito...21
Figura 10: i modelli di utilizzo di SOAP-over-JMS proposti da Axis... 22
Figura 11: il pannello di amministrazione di SJSAS8...24
Figura 12: rappresentazione grafica di un flusso di processo BPEL... 42
Figura 13: esempi di SVG e di JPEG generati dal PE per lo stesso processo... 55
Figura 14: pila delle interfacce SAP-Java... 58
Figura 15: pila delle interfacce SAP-Java modificata... 65
Figura 16: server JCo come proxy tra R/3 ed un EIS legacy...68
Figura 17: schema funzionale del sistema Zlatan... 70
Figura 18: architettura generale del sistema... 72
Figura 19: icone dei moduli nella system tray ed esempio di due console... 76
Figura 20: class diagram di HttpController... 77
Figura 21: class diagram di SmsControllerThread... 85
Figura 22: class diagram di RmiController... 90
Figura 23: class diagram del dispatcher...93
Figura 24: messaggi prodotti allo startup dal dispatcher e da un modulo...98
Figura 25: messaggi prodotti allo shutdown dal dispatcher e da un modulo ...99
Figura 26: class diagram di CompletePurchaseOrder... 113
Figura 27: menu dell'interfaccia grafica di Zlatan...131
Figura 28: pagina per l'inserimento di un ordine d'acquisto via IBRA...131
Figura 29: pagina per l'invio di un messaggio SOAP diretto all'engine BPEL...132
Figura 30: risultato dell'interrogazione sullo stato di un ordine...132
Figura 31: pagina per la gestione del database di CompletePurchaseOrder... 132
Figura 32: dati inseriti dal partner 1177 all'invio dell'ordine...133
Figura 33: risposta fornita dalla web application al partner 1177... 133
Figura 34: messaggi generati dal dispatcher alla ricezione dell'ordine dal partner 1177... 134
Figura 35: messaggi generati da un modulo alla ricezione dell'ordine dal dispatcher... 134
Figura 36: lista dei processi recenti mostrata dal PE all'avvio del nuovo processo...135
Figura 37: lista dei processi recenti mostrata dal PE dopo la chiamata a InsertPurchaseOrder... 136
Figura 38: lista dei processi recenti mostrata dal PE dopo la fine del processo... 136
Indice dei listati
Listato 1: codice di JMSHelloWorld...19
Listato 2: processo BPEL echoProcess... 27
Listato 3: definizioni WSDL per il processo echoProcess...28
Listato 4: struttura di base di un documento WSDL... 30
Listato 5: utilizzo dei <partnerLink> in BPEL... 31
Listato 6: definizione di proprietà in BPEL...32
Listato 7: utilizzo di <pick> in BPEL...34
Listato 8: definizione di variabili in BPEL...35
Listato 9: assegnazione di valori alle variabili BPEL...35
Listato 10: definizione ed uso dei correlation set in BPEL... 38
Listato 11: uso di <scope> e meccanismo di gestione dei fault in BPEL...40
Listato 12: esempio di uso di <faultHandlers> internamente ad una <invoke> in BPEL...40
Listato 13: utilizzo della compensazione in BPEL... 41
Listato 14: utilizzo dei costrutti di controllo BPEL...43
Listato 15: risoluzione dell'endpoint in GlobalBiz PE... 47
Listato 16: risoluzione dell'endpoint in ActiveBPEL...47
Listato 17: definizioni WSDL per una chiamata asincrona con callback... 49
Listato 18: invocazione sincrona di un servizio in BPEL...50
Listato 19: invocazione asincrona con callback in BPEL...51
Listato 20: invocazione asincrona con callback e gestione degli errori in BPEL... 52
Listato 21: creazione di una funzione in SAP JCo... 59
Listato 22: parametri di import ed esecuzione di una funzione JCo...60
Listato 23: parametri di export e struttura RETURN in JCo... 60
Listato 24: accesso ai campi di una struttura JCo... 60
Listato 25: accesso diretto ai campi di una struttura JCo... 61
Listato 26: accesso ai campi di una tabella JCo...61
Listato 27: esempio di utilizzo di un client JCo con connessione diretta...62
Listato 28: esempio di utilizzo di un client JCo con pool di connessioni...64
Listato 29: possibile output generato da CompanyCodeConnPool... 64
Listato 30: esempio di classe proxy JCo per CompanyCode... 67
Listato 31: parte dell'output generato dal metodo main() di CompanyCode...67
Listato 32: schema del metodo hadleRequest() in un server JCo...69
Listato 33: post di esempio per il driver HTTP... 77
Listato 34: codice di HttpServlet... 79
Listato 35: messaggio di posta di esempio per il driver POP3... 80
Listato 36: codice di Pop3Controller... 83
Listato 37: codice di SmsController.SmsControllerThread.run()... 86
Listato 38: codice di MobilePhoneConnection... 89
Listato 42: codice di RegistrationController...97
Listato 43: codice di PrepareRequestDispatcher...98
Listato 44: codice di PrepareRequestModule... 102
Listato 45: definizione dei namespace nel documento WSDL...103
Listato 46: definizione dei tipi nel documento WSDL... 106
Listato 47: definizioni astratte nel documento WSDL... 108
Listato 48: esempio di definizione di un binding nel documento WSDL...109
Listato 49: definizione dei servizi nel documento WSDL... 110
Listato 50: definizione delle estensioni BPEL nel documento WSDL... 112
Listato 51: codice di CompletePurchaseOrderBindingImpl... 114
Listato 52: codice di InsertPurchaseOrderController... 116
Listato 53: codice di InsertPurchaseOrder... 120
Listato 54: esempio di post HTTP effettuato da SendResponse... 121
Listato 55: esempio di messaggio email inviato da SendResponse...121
Listato 56: esempio di messaggio SOAP inviato da SendResponse... 122
Listato 57: definizione dei namespace nel documento BPEL...123
Listato 58: definizione dei partnerLink, delle variabili e dei correlationSet nel documento BPEL... 124
Listato 59: inizio del processo BPEL... 125
Listato 60: gestori di fault del primo scope del processo BPEL... 125
Listato 61: invocazione del primo servizio nel processo BPEL... 126
Listato 62: preparazione della variabile di ingresso del secondo servizio nel processo BPEL... 128
Listato 63: invocazione del secondo servizio nel processo BPEL...129
Listato 64: invocazione del terzo servizio nel processo BPEL... 130
Listato 65: messaggio postato presso HttpController dal partner 1177...133
Listato 66: messaggio SOAP generato dal modulo per l'attivazione del processo BPEL... 135
Listato 67: messaggio SOAP inviato dal PE al servizio CompletePurchaseOrder... 135
Listato 68: risposta fornita al PE da CompletePurchaseOrder per il partner 1177... 136
Listato 69: testo del messaggio SMS inviato dall'utente non registrato... 138
Listato 70: messaggio SOAP inviato dal PE al servizio CompletePurchaseOrder... 139
Listato 71: SOAP fault generato dal servizio CompletePurchaseOrder...139