Le organizzazioni complesse implicano applicazioni, piattaforme e processi che necessitano di comunicare, anche se spesso utilizzano formati e protocolli di trasporto incompatibili. Oltre ai problemi interni, poi, c‘è l‘esigenza di interfacciarsi con i sistemi IT esterni e i processi di business dei partner. Gli Enterprise Service Bus hanno semplificato l‘integrazione rendendo disponibile un‘unica infrastruttura.
Introduzione
Nel precedente articolo è stato mostrato come implementare un service provider in grado di esporre un servizio SOAP/HTTP, di implementare un workflow mediante pattern di integrazione e di invocare service provider in maniera sincrona e asincrona utilizzando le librerie disponibili con FUSE Mediation Router (http://fusesource.com/products/enterprise-cxf). Nel presente articolo vedremo come eseguire il deployment dei servizi su FUSE ESB (http://fusesource.com/products/enterprise-servicemix4) e implementare facilmente un front-end web-based per l’invocazione dei service provider.
Nel corso di questo articolo mostreremo come generare bundle OSGi a partire dal codice implementato, come eseguire il deployment dei bundle su FUSE ESB e come implementare facilmente il codice JavaScript necessario all’interfaccia grafica per invocare il service mediator, partendo da un’istanza in esecuzione del servizio stesso.
L’obiettivo è quello di implementare la seguente architettura, dove FUSE ESB è utilizzato come container per il service mediator e i service provider dell’agenzia di credito e delle banche espongono esternamente i propri servizi in SOAP/HTTP.
Figura 1 – Architettura di deployment.
L’invocazione del servizio del service mediator reso disponibile da FUSE ESB mediante binding HTTP può avvenire tramite interfaccia web-based, in particolare sarà utilizzato un iPhone per accedere al servizio.
FUSE ESB, versione certificata di Apache ServiceMix distribuita da Progress Software all’URL http://fusesource.com/products/enterprise-servicemix4, è l’Enterprise Service Bus Open Source più diffuso ed è in grado di supportare standard di integrazione largamente adottati come Java Business Integration (JBI) e JMS, assicurando anche il supporto dei nuovi standard emergenti quali Open Services Gateway initiative (OSGi) e JBI 2.0. L’ultima release di FUSE ESB rende disponibile un’unica piattaforma che facilita l’implementazione di pattern d’integrazione utilizzando il modello di programmazione preferito dallo sviluppatore.
Di seguito viene descritto il processo per l’installazione di FUSE ESB tramite GUI. Il caso in esame prevede l’installazione su piattaforma Microsoft Windows, ma FUSE ESB è disponibile anche per le seguenti piattaforme:
- Red Hat Enterprise Linux Advanced Server 4.0;
- SuSE Linux Enterprise Server 9;
- Ubuntu Linux 7.04;
- Solaris 8, 9 e 10 (32-bit e 64-bit);
- HP-UX 11i;
- Macintosh OS X Tiger (10.4);
e le modalità di installazione sono:
- tramite GUI;
- mediante consolle;
- in maniera “silenziosa”.
Dopo aver eseguito il download di FUSE ESB all’URL http://fusesource.com/downloads, aver lanciato il comando fuse-esb-4.x.x.x-windows.exe e aver visionato le informazioni introduttive, apparirà la maschera illustrata in figura 2.
Figura 2 – Installazione di FUSE ESB: licence agreement.
Selezionare l’opzione “I accept the terms of the Licence Agreement” e confermare con il pulsante “Next”. Nelle successive maschere, illustrate di seguito, è possibile selezionare la directory di installazione e la destinazione delle icone. Da notare che l’avvio di FUSE ESB, così come anche l’avvio delle restanti soluzioni Open Source FUSE, avviene da riga di comando; pertanto le icone conterranno solo i collegamenti alla documentazione e all’avvio della disinstallazione.
Figura 3 – Installazione di FUSE ESB: directory di installazione.
Figura 4 – Installazione di FUSE ESB: destinazione icone.
L’ultima maschera prima di avviare l’installazione è quella relativa al salvataggio della configurazione per automatizzare eventuali ulteriori installazioni.
Figura 5 – Installazione di FUSE ESB: salvataggio configurazione.
Per avviare FUSE ESB al termine dell’installazione è sufficiente aprire una shell, posizionarsi sulla directory bin del percorso di installazione e invocare il comando servicemix.bat. L’interfaccia visualizzata è illustrata in figura 6.
Figura 6 – Interfaccia di FUSE ESB: schermata di avvio.
L’elenco dei comandi utilizzabili tramite questa interfaccia sono elencati tramite l’esecuzione del comando help.
Figura 7 – Interfaccia di FUSE ESB: lista comandi.
Il comando features consente di accedere al gruppo di funzionalità disponibili, visualizzabile con il comando list.
Figura 8 – Interfaccia di FUSE ESB: elenco funzionalità.
Al momento dell’installazione le seguenti funzionalità sono in stato “unistalled”:
[uninstalled] [ 0.0.0] cxf-osgi [uninstalled] [ 0.0.0] camel-osgi [uninstalled] [ 0.0.0] camel-jxpath [uninstalled] [ 0.0.0] camel-velocity [uninstalled] [ 0.0.0] camel-cxf
Per installarle occorre eseguire, nell’ordine, i seguenti commandi dopo essersi posizionati su features:
features install cxf-osgi addUrl mvn:org.apache.servicemix.camel/org.apache.servicemix.camel.features /4.0.0.2-fuse/xml/features install camel-osgi install camel-jxpath install camel-velocity install camel-cxf
Il kernel di FUSE ESB può essere installato sulla maggior parte delle piattaforme e utilizza il framework OSGi per semplificare la componentizzazione delle applicazioni. Il framework OSGi è uno standard tornato recentemente a suscitare attenzione nel mondo Java, in grado di gestire facilmente la dipendenza tra i componenti delle applicazioni e di fornire un meccanismo per tenere sotto controllo il ciclo di vita di questi ultimi.
FUSE ESB è in grado di interagire con altre infrastrutture che espongono servizi mediante diversi protocolli di trasporto e formati di messaggio. Tra i protocolli supportati ci sono JMS, HTTP, HTTPS, FTP, XMPP, ed è possibile estendere le possibilità di integrazione utilizzando componenti conformi ai modelli OSGi e JBI.
FUSE ESB è composto da tre parti principali:
- una consolle di commando;
- un runtime container;
- un message bus standard.
La consolle di comando consente di gestire le instanze del runtime container, sia locali che remote, e il codice rilasciato mediante diverse shell dedicate a specifiche funzionalità, fra cui:
- OSGi
- JBI
- ActiveMQ
- features
- remote
Il runtime container è un implementazione OSGi per il deployment e la gestione dei bundle in grado di fornire strumenti per il logging, la configurazione dinamica e il provisioning. I benefici derivanti dall’utilizzo di OSGi includono:
- l’hot deployment degli artifact;
- la gestione di versioni multiple di package, class e bundle;
- il caricamento dinamico di codice;
- un footprint leggero;
- diverse opzioni di packaging.
Il message bus è analogo al Normalized Message Router (NMR) in JBI e fornisce un’interfaccia standard mediante la quale tutti i servizi all’interno di FUSE ESB interagiscono. Il message bus normalizza i messaggi e assicura il delivery al corretto destinatario.
Deployment del service mediator su FUSE ESB
La generazione del bundle da utilizzare per il deployment del servizio su FUSE ESB avviene a partire dalla root della directory del servizio in questione, in questo caso da C:com.iona.fuse.mokabytearticolo3 roker, eseguendo il seguente comando:
mvn clean install
che genera il bundle demo3.broker-1.0.0.jar all’interno della directory target.
Per eseguire il deployment del bundle occorre digitare osgi nell’interfaccia di FUSE ESB (da notare che la navigazione verso la parent directory avviene con il comando exit) ed eseguire il seguente comando:
install -s mvn:com.iona.fuse.mokabyte/demo3.broker/1.0.0/jar
il risultato dell’invocazione è l’installazione del bundle e la visualizzazione dell’ID del bundle in questione.
Figura 9 – Interfaccia di FUSE ESB: ID del bundle.
Eseguendo il comando list è possibile visualizzare i bundle installati. Come illustrato in figura 10, il bundle appena installato è nello stato “installed”, ma non è ancora attivo.
Figura 10 – Interfaccia di FUSE ESB: elenco bundle
Per attivarlo è necessario eseguire il comando start seguito dall’ID del bundle. In questo caso il comando sarà
start 151
e il bundle apparirà nello stato “active”, come indicato di seguito
[ 151] [Active ] [ 50] Demo Articolo 3 Broker :: CXF OSGi (1.0.0)
Dopo aver installato il bundle relativo al broker, è opportuno forzare FUSE ESB ad utilizzare la corretta TransformerFactory. Questo può essere fatto uscendo da FUSE ESB e aggiungendo la seguente riga al file system.properties presente nella directory etc.
javax.xml.transform.TransformerFactory =com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
Generazione del codice JavaScript per la web application
FUSE Service Framework rende disponibile un comando per la generazione automatica del codice JavaScript necessario all’invocazione di un web service da una web application. Questa funzionalità semplifica il processo di implementazione di applicazioni web based che devono integrarsi con web service consentendo al programmatore di non occuparsi della componente di codice relativa all’invocazione dei servizi e lasciandolo libero di concentrarsi sugli aspetti applicativi dell’interfaccia grafica.
Per generare il codice JavaScript da utilizzare nella web application è necessario avviare il servizio, ad esempio in standalone con il comando
mvn exec:java -Dexec.mainClass=com.iona.fuse.mokabyte.articolo3.broker.LoanBroker
e invocare dal browser il seguente URL:
http://localhost:9008/loanBroker?js
Il risultato visualizzato sul broker sarà il codice JavaScript da utilizzare per l’invocazione del servizio dalla web application.
Esecuzione del processo completo
Per avviare i service provider delle banche e dell’agenzia di credito è sufficiente eseguire i seguenti comandi dalle rispettive directory:
mvn exec:java -Dexec.mainClass=com.iona.fuse.mokabyte.articolo3.bank.MainWS mvn exec:java -Dexec.mainClass=com.iona.fuse.mokabyte.articolo3.credit.MainWS
ed è sempre consigliabile ricompilare il tutto con i seguenti comandi:
mvn clean mvn compile
A questo punto è possibile eseguire il deployment del bundle del broker all’interno di FUSE ESB utilizzando, in alternativa al precedente, il comando
osgi install -s mvn:com.iona.fuse.mokabyte/demo3.broker/1.0.0/jar
che avvia il bundle senza la necessità di eseguire il commando start.
È possibile verificare che i servizi siano correttamente in esecuzione invocando i seguenti URL da un browser:
http://localhost:9001/bank1?wsdl http://localhost:9002/bank2?wsdl http://localhost:9003/bank3?wsdl http://localhost:9006/creditAgency?wsdl http://localhost:9008/loanBroker?wsdl
Per invocare il servizio è possibile utilizzare il file index.html presente nella directory
C:com.iona.fuse.mokabytearticolo3 rokerweb
Le figure di seguito mostrano le varie schermate ottenute utilizzando un iPod Touch per l’invocazione del servizio.
Figura 11 – Interfaccia di FUSE ESB: elenco bundle
Figura 12 – Interfaccia di FUSE ESB: elenco bundle
Figura 13 – Interfaccia di FUSE ESB: elenco bundle
All’interno della directory C:com.iona.fuse.mokabytearticolo3 rokerweb è presente anche il file client.html che fornisce un’interfaccia per invocare il servizio configurando direttamente il file in formato XML.
Conclusioni
In questo e nei precedenti articoli abbiamo visto come, partendo da uno use case di business, sia possibile utilizzare le soluzioni presenti nel bundle FUSE (FUSE Services Framework, FUSE Message Broker, FUSE Mediation Router e FUSE ESB) per implementare, configurare ed eseguire il deployment di servizi in ambito SOA.
L’ultimo componente della famiglia FUSE, distribuito gratuitamente alla sottoscrizione del supporto, è FUSE HQ. FUSE HQ è basato sulla versione commerciale di Hyperic HQ Enterprise e consente di tenere sotto controllo, sia da un punto di vista sistemistico che applicativo, i servizi distribuiti all’interno dell’organizzazione. La capacità di eseguire il discovery automatico, integrare e gestire diverse tecnologie, consente di controllare facilmente i servizi che supportano processi di business critici.
Riferimenti
[1] Codice sorgente dei 3 articoli
http://www.iona.com/FUSE_EIP/articolo_1.zip
http://www.iona.com/FUSE_EIP/articolo_2.zip
http://www.iona.com/FUSE_EIP/articolo_3.zip
[2] FUSE Services Framework
http://fusesource.com/products/enterprise-cxf
[3] FUSE Message Broker
http://fusesource.com/products/enterprise-activemq
[4] FUSE Mediation Router
http://fusesource.com/products/enterprise-camel
[5] FUSE ESB
http://fusesource.com/products/enterprise-servicemix4
[6] Gregor Hohpe – Bobby Woolf, “Enterprise Integration Patterns”, The Addison-Wesley Professional, 2003
[7] Maven Project
[8] Spring Framework
http://www.springframework.org/
Paolo Palazzini è nell'organico di IONA Technologies da gennaio 2006 con l'obiettivo di supportare i clienti nella progettazione di soluzioni in ambito Service Oriented Architecture. Dopo aver conseguito la laurea in Ingegneria Elettronica presso l'Università “La Sapienza” di Roma, ha lavorato in diverse aziende operanti come System Integrator, Information Security Consulting e Application Service Provider. Nel corso della carriera professionale si è occupato del settore ICT del mercato finanziario, delle telecomunicazioni, della pubblica amministrazione e della difesa, e ha collaborato a stretto contatto con i principali Vendor di tecnologia. Lavorando sia in Italia che negli Stati Uniti, si è occupato di progetti mission-critical per clienti Enterprise.
Luca Ceppelli è nato a Bolzano 13/09/1977. Nel luglio 2002 ha conseguito la laurea in Ingegneria Elettronica (specializzazione microelettronica) presso il Politecnico di Milano.
Dal luglio del 2004 è dipendente di Iona Technologies come Senior Consultant. Ha maturato esperienze nazionali e internazionali nel campo dell‘integrazione software e delle architetture distribuite presso aziende finanziarie, TelCo e nel settore della pubblica amministrazione.