Università della Calabria Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Dipartimento DEIS TESI DI LAUREA Sviluppo di un sistema per la configurazione della rete “UTRAN” tramite un Enterprise Service Bus Open Source RELATORE Prof. Sergio FLESCA CANDIDATO CO-RELATORE Dott. Ciro ROMANO Francescantonio ALBANESE Indice Introduzione 4 Capitolo 1: Enterprise Application Integration 9 1.1 L‟importanza di “integrare” 9 1.2 Enterprise Application Integration 14 1.3 Dall'Enterprise Integration alle architetture orientate ai servizi 15 Capitolo 2: Service-Oriented Architecture e Web Services: concetti base 18 2.1 Service-Oriented Architecture (SOA) 18 2.2 Caratteristiche di una Service-Oriented Architecture 20 2.3 Come funziona una Service-Oriented Architecture 22 2.4 I Web Services 25 2.5 Web Services e architettura di tipo non SOA 31 2.6 Web Services e architettura SOA 35 Albanese Francescantonio, 79117 Pagina 1 Capitolo 3: Service-Oriented Architecture e gli Enterprise Service Bus 38 3.1 Enterprise Service Bus come infrastruttura di supporto ad architetture Service-Oriented 38 3.2 Perché Enterprise Service Bus? 43 3.3 Enterprise Service Bus: Funzionalità supportate 48 Capitolo 4: Una piattaforma di integrazione applicativa 51 4.1 Perché GreenVulcanoESB? 52 4.2 Componenti Base e Architettura di GreenVulcanoESB 53 4.2.1 Il Virtual Layer 53 4.2.2 Il Core 54 4.2.3 Integration Suite 55 4.2.4 Connectivity Layer 56 4.3 Amministrazione e controllo del sistema 58 4.4 VulCon 58 4.5 DataHandler 59 4.6 UDDI 60 4.7 I Vantaggi dell'utilizzo di GreenVulcanoESB 61 Albanese Francescantonio, 79117 Pagina 2 Capitolo 5: Configurazione di GreenVulcanoESB per la gestione della rete “UTRAN” 63 5.1 L‟ambiente di lavoro 63 5.2 Che cos è la rete “UTRAN”? 65 5.2.1La tecnologia “UMTS” 65 5.2.2 Architettura di base del sistema “UMTS” 71 5.3 Scenario del sistema 76 5.4 Configurazione di GreenVulcanoESB 79 Testing 106 Conclusioni 114 Bibliografia 115 Albanese Francescantonio, 79117 Pagina 3 Introduzione Tra gli obbiettivi primari di ogni azienda c‟è quello di rimanere sempre a passo con i tempi, seguendo l‟evoluzione tecnologica, in modo da poter offrire ai propri clienti nuovi servizi a prezzi competitivi. Ogni azienda pertanto ha la necessità di evolversi continuamente, riorganizzandosi periodicamente sia in termini di tecnologia utilizzata, eventualmente adottandone delle nuove, sia della propria struttura interna, fondendola in alcuni casi con quella di altre aziende evitando, allo stesso tempo, di perdere investimenti passati. Risulta indispensabile, quindi, per un‟azienda, costruire un sistema informativo che sia capace di assorbire in maniera flessibile gli impatti delle nuove tecnologie salvaguardando il patrimonio informativo esistente. Vediamo quindi che il modo migliore per fornire nuovi servizi senza cambiare le basi del corebusiness delle compagnie è l‟integrazione dei vecchi sistemi con quelli nuovi. La necessità di integrare nasce in maniera naturale nell‟evoluzione dei sistemi. Lo scopo principale di questa attività è di riuscire ad integrare sistemi informativi eterogenei e autonomi, in modo da sviluppare il business e mantenere stabilità a quanto già presente nell‟azienda. Con l‟obbiettivo di avere un integrazione ideale in cui i sistemi e gli applicativi di un‟azienda sono tutti interconnessi e i processi operativi semplificati, sono stati sviluppati software integrativi specializzati, noti come Albanese Francescantonio, 79117 Pagina 4 Enterprise Application Integration (EAI), che trasferiscono i dati da un sistema all‟altro e correlano i complessi processi operativi di un‟azienda ai sistemi informativi e al software in uso. I progetti EAI risultano però, di grandi dimensioni, complessi, non flessibili, costosi per l‟elevatissima tassa di licenza software e molti di essi non sono in grado di rispettare tempi e budget. Con l‟avvento del Web, ambiente eterogeneo per eccellenza, e lo sviluppo di standard che descrivono come i sistemi informatici debbano comunicare, il software EAI è progettato e sviluppato in modo da utilizzare questi ultimi con una netta riduzione dei costi di sviluppo e manutenzione. Nasce la necessità di avere un modo “standard” per esporre un software su una rete attraverso un‟interfaccia comprensibile da tutte quelle aziende che, volendo far interagire le proprie applicazioni con quelle di altre compagnie, riconoscono tale standard, così, si assiste alla definizione di una serie di best-practices indicate con il termine Service-Oriented Architecture (SOA, Architettura Orientata ai Servizi) e all‟ introduzione dei Web Services. Queste nuove tecnologie hanno guadagnato l‟attenzione dei leader dell‟Information Technology, dei venditori e degli analisti. L’Enterprise Service Bus (ESB) racchiude le caratteristiche migliori di queste tecnologie. Un ESB è generalmente progettato per permettere che applicazioni di diverso tipo si scambino messaggi con lo scopo di estendere le funzionalità di ciascuna applicazione con quelle fornite dalle altre applicazioni e di rendere virtuali le risorse aziendali, permettendo alla logica di business dell‟azienda Albanese Francescantonio, 79117 Pagina 5 di essere sviluppata e gestita indipendentemente dall‟infrastruttura della rete. Le applicazioni che si collegano all‟ESB, possono inserire documenti aziendali, quali fatture, andamento titoli o transizioni commerciali. Tali documenti, viaggiano attraverso il bus da un applicativo all‟altro e vengono tradotti e trasformati in modo che ciascun applicativo veda il documento in un formato e in una struttura comprensibile. L‟ESB consente un‟integrazione su vastissima scala. A differenza delle tradizionali soluzioni EAI, che richiedono un significativo esborso iniziale, l‟ESB può essere utilizzato per connettere anche due soli sistemi aziendali in modo assolutamente economico. Gli altri sistemi possono essere aggiunti anche uno alla volta, permettendo alle aziende di mantenere il controllo sulle priorità, la portata e il costo dei rispettivi progetti. Quando viene collegato all‟ESB, ogni successivo sistema si rende disponibile a tutti gli altri sistemi collegati. Questo strumento risulta essere un rivoluzionario approccio all‟integrazione applicativa. Essendo una soluzione aperta e basata su standard, offre vantaggi fondamentali rispetto alla tradizionale EAI. Le aziende possono integrare i processi con sistemi terzi e interni, possono integrare applicativi legacy, non sono "vincolate" a un particolare fornitore, possono sviluppare e gestire una soluzione ESB senza doversi affidare a consulenti esterni e possono cominciare a sviluppare piccoli progetti integrativi da ampliare successivamente, riducendo i rischi e utilizzando i budget in modo più razionale. Il basso costo di sviluppo di questa tecnologia Albanese Francescantonio, 79117 Pagina 6 basata su standard si riflette in una tassa di licenza software inferiore rispetto alla EAI. Ad oggi, diverse compagnie di Information Technology hanno realizzato o intendono realizzare un proprio prodotto ESB da proporre sul mercato, lo scopo di questa tesi è quello di proporre l‟implementazione che è stata sviluppata nell‟azienda presso la quale ho svolto il tirocinio “l‟E@I Software”, azienda operante nel campo dell'integrazione applicativa in ambito Enterprise, presentando poi un esempio di utilizzo dello strumento per mostrarne alcune funzionalità. La tesi è articolata nel modo seguente: Nel Capitolo 1 è affrontato il problema dell‟integrazione in ambito aziendale e l‟avvento delle nuove tecnologie che tentano un miglioramento del processo di integrazione, la SOA e i web services. Nel Capitolo 2 è stata fatta una panoramica sulle caratteristiche e sul funzionamento di una Service-Oriented Architecture e sui web services. Nel Capitolo 3 viene presentato l‟Enterprise Service Bus (ESB) come infrastruttura di supporto ad architetture Service-Oriented ed è messa in evidenza l‟importanza dell‟utilizzo di questo strumento come supporto alle aziende per incrementare la connettività ed aggiungere flessibilità per facilitare il cambiamento e avere un maggiore controllo sull‟utilizzo delle importanti risorse che unisce. Il Capitolo 4 è dedicato alla descrizione di GreenVulcanoESB, l‟Enterprise Service Bus prodotto dall‟azienda presso la quale ho svolto il tirocinio. Albanese Francescantonio, 79117 Pagina 7 Vengono descritti in particolare le componenti base dello strumento, l‟architettura e i vantaggi del suo utilizzo. La tesi si conclude con il Capitolo 5 in cui è descritto nei dettagli il lavoro svolto in azienda, in particolare, la configurazione del bus per sviluppare il sistema di gestione per la rete “UTRAN”. Albanese Francescantonio, 79117 Pagina 8 Capitolo 1 Enterprise Application Integration 1.1 L’importanza di “integrare” Lo sviluppo dei sistemi informativi di un‟azienda non avviene in maniera continua e omogenea: spesso, l‟avvento di nuove tecnologie e i bisogni legati al business1 producono ciclicamente la necessità di creare nuovo software. Quando questo accade, bisogna affrontare diverse problematiche sia dal punto di vista tecnologico che economico e organizzativo. L‟aspetto economico rappresenta per un‟azienda, con un sistema informativo complesso, uno dei punti primari da considerare, infatti, questa è consapevole che il cambiamento è inevitabile pertanto il suo principale obiettivo è gestirlo in modo tale da minimizzarne l‟impatto. Ciò significa evolversi conservando allo stesso tempo prodotti, tecnologie e applicazioni che già si possiedono. 1 Il termine inglese business identifica in generale un'attività economica. Approssimativamente può essere tradotto con il termine italiano affari. Albanese Francescantonio, 79117 Pagina 9 Tra le sollecitazioni che inducono all‟evoluzione del sistema informativo c‟è il business, che è in continuo e rapido cambiamento, la competizione, che diventa sempre maggiore e gli standard, che impongono alle aziende una sempre maggiore reattività e apertura del sistema informativo. Oltre a queste sollecitazioni “esterne”, ce ne possono essere altre, di varia natura, come ad esempio il raggiungimento di obiettivi legati alla ottimizzazione dei processi aziendali, oppure, la necessità di integrare applicazioni esistenti. L‟obiettivo delle aziende è di rispondere sempre più velocemente a queste continue sollecitazioni, costruendo un sistema informativo capace di assorbire in maniera flessibile gli impatti delle nuove tecnologie, salvaguardando il patrimonio informativo esistente. La necessità di effettuare attività di integrazione nasce, quindi, in maniera naturale nell‟evoluzione dei sistemi con lo scopo principale di riuscire ad integrare sistemi informativi eterogenei e autonomi, per sviluppare il business e mantenere stabilità a quanto già presente nell‟azienda. Nel corso degli anni, infatti, i sistemi informativi si sono evoluti in una stratificazione di prodotti, tecnologie e architetture eterogenee, data la presenza congiunta di soluzioni differenti, magari sviluppate in tempi e con prospettive differenti e ogni ambiente informatico risulta essere caratterizzato da un‟ampia eterogeneità e quindi, quasi inevitabilmente, da svariati problemi di interoperabilità e integrazione tra i diversi componenti. Albanese Francescantonio, 79117 Pagina 10 Con lo sviluppo della rete è diventato concreto il problema dell‟integrazione a livello business, cioè la creazione di processi Business to Business (B2B) 2 ottenuti componendo funzionalità esposte da organizzazioni differenti. Possiamo quindi parlare di integrazione “interna”, normalmente legata a una estensione dei sistemi con nuove o vecchie tecnologie e integrazione “esterna”. Il problema è, quindi, molto complesso e va affrontato da un punto di vista architetturale, pertanto è necessario fare una classificazione delle strategie architetturali che è possibile utilizzare per l‟integrazione. Possiamo supporre di avere un sistema informativo a layer (“strati”) che sia possibile suddividere in: Data Layer Business Layer Presentation Layer Le strategie di integrazione sono classificabili in base al layer su cui vanno ad agire. Possiamo quindi pensare di integrare a livello di presentazione (presentation), a livello di logica applicativa (business) oppure a livello di dati (data). 2 Business to Business (letteralmente "azienda-verso-azienda"), spesso indicato con l'acronimo B2B, è un termine comunemente utilizzato per descrivere le transazioni commerciali elettroniche tra imprese. Albanese Francescantonio, 79117 Pagina 11 La scelta del livello su cui effettuare l‟integrazione dipende da molti fattori e spesso non è consapevole, perché guidata da considerazioni più di natura tecnologica che architetturale (esempio tipico: bisogna utilizzare un determinato strumento e/o prodotto e/o tool. La classificazione che è possibile fare sulle strategie di integrazione è: 1. Portal Integration (PI) costruita a livello di interfaccia utente. Questo tipo di strategia è molto comune dato che è semplice da implementare, non è invasiva nei confronti delle applicazioni integrate e permette di effettuare in maniera semplice e rapida l‟aggregazione di sistemi molto eterogenei tra loro. Mentre l‟integrazione a livello di logica di business aggrega elaborazione di sistemi diversi, l‟integrazione a livello di portale visualizza in una singola finestra le informazioni provenienti da sorgenti multiple e differenti. Quello che viene realizzato è quindi un “accorpamento” di diverse applicazioni su un‟interfaccia comune. Ad esempio, è possibile pensare di integrare un‟applicazione di customer-care e un‟applicazione di gestione di dati bancari: l‟operatore può visualizzare sulla stessa schermata il conto corrente associato a un utente (sulla “zona” dedicata all‟applicazione di customercare) e effettuare delle operazioni sul conto corrente di questo utente sulla seconda applicazione (sull‟altra zona). Il portale diventa di fatto il punto centrale di accesso per un insieme eterogeneo di applicazioni. 2. Enterprise Information Integration (EII) è un approccio incentrato sull‟integrazione a livello dati. Si basa sul concetto che in alcune organizzazioni il problema è legato non tanto alla condivisione della logica, Albanese Francescantonio, 79117 Pagina 12 quanto ad avere una modalità di accesso ai dati centralizzata, omogenea e condivisa. In questo caso si ritiene che l‟integrazione a livello di logica applicativa non sia necessaria: l‟obiettivo è avere applicazioni che agiscono sugli stessi dati, che devono essere quindi accessibili in maniera omogenea. 3. Enterprise Application Integration (EAI) con questo termine si indicano tutte quelle strategie focalizzate sull‟integrazione della logica applicativa; lo scopo è la condivisione della business logic3 tra applicazioni diverse o la composizione, in processi nuovi, di “pezzi” di logica già sviluppati. Al contrario della PI, dove sia i dati che la logica possono vivere indipendentemente, in questo caso parte della logica di business è necessariamente condivisa. È importante notare che i tre approcci descritti, Portal Integration (PI), Enterprise Application Integration (EAI) e Enterprise Information Integration (EII), non sono in assoluta alternativa ma possono essere complementari: l‟EII può ad esempio essere posta al servizio di soluzioni di portale fornendo ad esse un accesso unificato a diverse sorgenti dati, con una semplificazione nella costruzione delle soluzioni stesse. Per lo scopo di questa tesi, ci soffermeremo in maniera più dettagliata sull‟Enterprise Application Integration. 3 Business Logic è un termine che si riferisce a tutta quella logica applicativa che rende operativa un'applicazione. Il business logic racchiude in sé regole cosiddette di "business", piuttosto che regole ed elementi legati alla visualizzazione delle informazioni (vista o interfaccia grafica) o alla memorizzazione dei dati (es. database, ecc.). Albanese Francescantonio, 79117 Pagina 13 1.2 Enterprise Application Integration Possiamo classificare le strategie di integrazione EAI secondo vari approcci. Il primo approccio prevede la realizzazione di collegamenti peer-to-peer (P2P)4 che permettano di avere connessioni dirette tra le applicazioni da integrare, ognuna delle quali può chiamare l'altra mediante specifiche Application Programming Interfaces (APIs)5 e gestire singolarmente i problemi di comunicazione e di mapping dei dati. Il vantaggio principale dell‟approccio peer-to-peer è che in questo modo si crea una connessione “stretta” e sincrona tra le due applicazioni, con la possibilità di integrare all‟interno del codice non solo le necessarie conversioni dei dati, ma anche le regole di business. Lo svantaggio principale è che tale codice può essere complesso da sviluppare e va generato per ogni coppia di applicazioni. All‟aumentare delle applicazioni da integrare crescono anche le connessioni da implementare e l‟accoppiamento tra di esse, con evidenti impatti sui costi di sviluppo e soprattutto di manutenzione. Per evitare i problemi sopra descritti, è opportuno definire nell‟architettura uno strato centrale di integrazione che permetta di isolare le applicazioni gestendone le interconnessioni. Questo tipo di architettura può essere 4 Per peer-to-peer (o P2P) si intende una rete di computer o qualsiasi rete informatica che non possiede nodi gerarchizzati come client o server fissi (clienti e serventi), ma un numero di nodi equivalenti (pari, in inglese peer appunto) che fungono sia da cliente che da servente verso altri nodi della rete. 5 Le Application Programming Interface API (Interfaccia di Programmazione di un'Applicazione), sono ogni insieme di procedure disponibili al programmatore, di solito raggruppate a formare un set di strumenti specifici per un determinato compito. Albanese Francescantonio, 79117 Pagina 14 realizzata tramite un approccio diretto (Server-Based), oppure tramite l‟utilizzo di un middleware6 di appoggio. L‟approccio diretto (Server-Based), prevede di utilizzare una qualche tecnologia di connessione e comunicazione, demandando allo strato applicativo le ulteriori problematiche di integrazione. Con l‟approccio basato sull‟utilizzo di un middleware che agisce da intermediario, si definisce nell‟architettura uno specifico strato di integrazione che permette di centralizzare la gestione delle interconnessioni, evitando di affidare questo problema alle specifiche applicazioni. 1.3 Dall'Enterprise Integration alle architetture orientate ai servizi Con l‟avvento del Web, ambiente eterogeneo per eccellenza, i tradizionali approcci all‟integrazione di applicazioni non sono più utilizzabili. Questo è dovuto, oltre che all‟eterogeneità del campo di sviluppo, anche al fatto che il controllo dell‟elaborazione non è più in mano ad una singola azienda, dato che l‟interazione avviene tra applicazioni appartenenti a differenti compagnie. Vi è quindi la necessità di avere un modo “standard” per esporre un software su una rete attraverso un‟interfaccia comprensibile da tutte quelle aziende che, volendo far interagire le proprie applicazioni con quelle di 6 Con il termine middleware si intende un insieme di programmi informatici che fungono da intermediari tra diverse applicazioni. Sono utilizzati come supporto per applicazioni distribuite complesse. Albanese Francescantonio, 79117 Pagina 15 altre compagnie, riconoscono tale standard. Di conseguenza, per superare le limitazioni di middleware e piattaforme EAI, sono state definite una serie di best-practices che globalmente vengono indicate con il termine ServiceOriented Architecture (SOA, Architettura Orientata ai Servizi) e sono stati introdotti i Web Services. La Service-Oriented Architecture è un nuovo paradigma architetturale che risolve i problemi tradizionalmente legati all'integrazione, poiché nell'architettura che ne deriva, applicazioni software scritte in diversi linguaggi di programmazione e implementate su diverse piattaforme hardware possono interagire e scambiare informazioni e processi sotto forma di servizi indipendentemente dalle singole logiche di business che li generano. Essa pone delle specifiche condizioni che i componenti del sistema devono rispettare e le caratteristiche che tale sistema deve necessariamente avere. I Web Services sono invece una nuova tecnologia, che si basa su standard specifici, quali eXtensible Markup Language (XML), Simple Object Access Protocol (SOAP), Web Services Description Language (WSDL), Universal Description, Discovery and Integration (UDDI), di cui parleremo più avanti, la quale fornisce un facile metodo di interfacciamento tra le applicazioni. Questa tecnologia non è legata all‟architettura orientata ai servizi ma, ha molti punti di contatto con essa e i sistemi che utilizzano i Web Services, sfruttando tutte le loro potenzialità, implementano esattamente un‟architettura di tale tipo. Web Services e SOA cercano di fornire una Albanese Francescantonio, 79117 Pagina 16 soluzione al problema dell‟interoperabilità e le fondamenta per lo sviluppo di applicazioni distribuite su larga scala. Molti dei principi di SOA si sposano quindi alla perfezione con le problematiche di integrazione e discendono direttamente dalla consapevolezza che, se il sistema che si sviluppa ha successo, in futuro occorrerà estenderlo/integrarlo, oppure dal fatto che si ritiene necessario conservare gli asset7 dell'organizzazione a fronte di una evoluzione tecnologica, in questo caso facendo esplicitamente integrazione. Fare integrazione con SOA significa cercare di trasformare le funzionalità già presenti in servizi. Questa evoluzione è indice di una maggiore maturità architetturale delle organizzazioni che si rendono conto dei costi che derivano da un‟errata applicazione dell'integrazione. 7 Gli Asset coincidono con il complesso di hardware, software conoscenze e abilità operative consolidate di proprietà dell'impresa. Albanese Francescantonio, 79117 Pagina 17 Capitolo 2 Service-Oriented Architecture e Web Services: concetti base 2.1 Service-Oriented Architecture Una Service-Oriented Architecture (SOA, Architettura Orientata ai Servizi) è un modello architetturale per la progettazione di sistemi residenti su una rete che focalizza l‟attenzione sul concetto di servizio. Il presupposto che guida la SOA è la considerazione che conviene sviluppare sistemi già pensando all'integrazione (il cambiamento è inevitabile) piuttosto che adattarli volta per volta. Un sistema costruito seguendo la filosofia SOA è costituito da applicazioni, chiamate servizi, ben definite ed indipendenti l‟una dall‟altra, che risiedono su più computer all‟interno di una rete (ad esempio la rete interna di una azienda o una rete di connessione fra più aziende che collaborano). Ogni servizio mette a disposizione una certa funzionalità e può utilizzare quelle che gli altri servizi hanno reso disponibili, Albanese Francescantonio, 79117 Pagina 18 realizzando, in questo modo, applicazioni di maggiore complessità. Inoltre, in una Service-Oriented Architecture è possibile modificare rapidamente questi servizi, combinarli, aggiungerne di nuovi, modificare i processi per rispondere alle specifiche esigenze di business e utilizzare i servizi in modo illimitato e personalizzato: il processo di business, in questo modo, non è più vincolato da una specifica piattaforma o da una applicazione ma può essere considerato come un componente e quindi riutilizzato o modificato. SOA è una forma particolare di Distributed System, la cui definizione è la seguente: Un Distributed System (Sistema distribuito) consiste di vari agenti software distinti che devono lavorare insieme per svolgere alcuni compiti, inoltre, gli agenti in un sistema distribuito non operano nello stesso ambiente di calcolo, pertanto devono comunicare per mezzo di stack di protocolli hardware/software su una rete. Questo significa che le comunicazioni in un sistema distribuito sono meno veloci e affidabili rispetto a quelle che utilizzano invocazione diretta del codice e memoria condivisa e ha importanti implicazioni architetturali, perché i sistemi distribuiti richiedono che gli sviluppatori (di infrastruttura e applicazioni) considerino la latenza, fattore imprevedibile dell‟accesso remoto, e tengano presente questioni relative alla concorrenza e la possibilità di fallimenti parziali. Albanese Francescantonio, 79117 Pagina 19 2.2 Caratteristiche di una Service-Oriented Architecture Con la Service-Oriented Architecture (SOA) sono definite alcune proprietà, orientate al riutilizzo e all‟integrazione in un ambiente eterogeneo, che devono essere rispettate dai servizi che compongono il sistema. In particolare un servizio dovrà: • essere ricercabile e recuperabile dinamicamente. Un servizio deve poter essere ricercato in base alla sua interfaccia e richiamato a tempo di esecuzione. La definizione del servizio in base alla sua interfaccia rende quest‟ultima (e quindi l‟interazione con altri servizi) indipendente dal modo in cui è stato realizzato il componente che lo implementa. • essere auto-contenuto e modulare. Ogni servizio deve essere ben definito, completo ed indipendente dal contesto o dallo stato di altri servizi. • essere definito da un‟interfaccia ed indipendente dall‟implementazione. Deve cioè essere definito in termini di ciò che fa. Questo determina l‟indipendenza del servizio non solo dal linguaggio di programmazione utilizzato per realizzare il componente che lo implementa ma anche dalla piattaforma e dal sistema operativo su cui è in esecuzione: non è necessario Albanese Francescantonio, 79117 Pagina 20 conoscere come un servizio è realizzato ma solo quali funzionalità rende disponibili. • essere debolmente accoppiato con altri servizi (loosely coupled). Un‟architettura è debolmente accoppiata se le dipendenze fra le sue componenti sono in numero limitato. Questo rende il sistema flessibile e facilmente modificabile. • essere reso disponibile sulla rete attraverso la pubblicazione della sua interfaccia (in un Service Directory) ed accessibile in modo trasparente rispetto alla sua allocazione. Essere disponibile sulla rete lo rende accessibile da quei componenti che ne richiedono l‟utilizzo e l‟accesso deve avvenire in maniera indipendente rispetto all‟allocazione del servizio. La pubblicazione dell‟interfaccia deve rendere noto anche le modalità di accesso al servizio. Deve mettere a disposizione un basso numero di operazioni, cioè poche funzionalità, in modo tale da non dover avere un programma di controllo complesso. Deve interagire con gli altri servizi attraverso lo scambio di messaggi. Per questo motivo e per il fatto che i servizi possono trovarsi su sistemi operativi e piattaforme diverse è necessario che i messaggi siano composti utilizzando un formato standard largamente riconosciuto. I dati che vengono trasmessi attraverso i messaggi possono essere costituiti sia dal risultato dell‟elaborazione di un certo servizio sia da informazioni che più servizi si scambiano per coordinarsi fra loro. • essere realizzato in modo tale da permetterne la composizione con altri. Albanese Francescantonio, 79117 Pagina 21 Nell‟architettura SOA le applicazioni sono il risultato della composizione di più servizi. È per questo motivo che ogni servizio deve essere indipendente da qualsiasi altro, in modo tale da ottenere il massimo della riusabilità. La creazione di applicazioni o di servizi più complessi attraverso la composizione dei servizi di base viene definita Service Orchestration. La composizione può essere definita con riferimento a linguaggi specializzati come BPEL (BPEL4WS, Business Process Execution Language for Web Services). Queste sono le caratteristiche di un sistema di tipo SOA, di cui adesso passiamo a descriverne il funzionamento. 2.3 Come funziona una Service-Oriented Architecture Focalizzando l‟attenzione sul concetto di servizio, i principali attori in causa sono il fornitore e il richiedente, come nella tipica interazione client server. Attraverso la Service-Oriented Architecture (SOA) questa interazione viene arricchita con un ulteriore attore il Service Directory o Service Broker che si inserisce all‟interno della comunicazione tra fornitore e fruitore del servizio. Di seguito è riportata una descrizione del ruolo di ognuno dei tre attori coinvolti in un sistema SOA: Albanese Francescantonio, 79117 Pagina 22 • Service Provider Entità che realizza e mette a disposizione un qualche servizio. Tale servizio, per poter essere trovato da altre entità che vogliono utilizzarlo, deve essere reso visibile sulla rete, in termine tecnico Pubblicato. A tal fine il Service Provider descrive il suo servizio usando Web Service Description Language (WSDL) e successivamente lo comunica al Service Registry che la memorizza nella directory dei servizi. Il Sevice Provider resta quindi, in attesa, che un utente richieda i servizi pubblicati. • Service Directory o Service Broker Questo componente gestisce la directory dei servizi, permettendo a chi ha necessità, di ricercare un servizio sulla base delle caratteristiche con le quali è stato definito e memorizzato. Il Service Directory possiede quindi le informazioni, come URL e modalità di accesso, di tutti i servizi disponibili. • Service Consumer o Service Requester Rappresenta un potenziale utente che richiede un servizio. A tale scopo il Service Consumer interagisce con il Service Directory per ottenere il servizio più adatto ai propri obbiettivi. Una volta individuato si collega al Service Provider corrispondente per fruire del servizio. In figura 2.1 sono riportate le interazioni fra le entità appena descritte. Albanese Francescantonio, 79117 Pagina 23 Figura 2.1: Esempio di Architettura SOA. Tutte queste interazioni passano attraverso quella che viene genericamente definita Rete di Comunicazione, la quale in un‟implementazione reale di una SOA può essere costituita sia da Internet sia da una Intranet. SOA definisce, dunque, le caratteristiche che i componenti facenti parte di un sistema devono avere al fine di poter definire quest‟ultimo un‟architettura orientata ai servizi. Ai tre ruoli si va ad aggiungere un‟altra entità: il Service Contract, che definisce il formato per la richiesta di un servizio e per relativa risposta. Poiché i servizi devono essere ricercati e recuperati dinamicamente, il Service Contract deve essere pubblicato su un Service Broker dal Service Provider. Albanese Francescantonio, 79117 Pagina 24 Va notato che quest‟entità coinvolte in un sistema SOA, possono essere distribuite sul territorio e possono utilizzare piattaforme differenti, con l‟unico vincolo di dover utilizzare tutte e tre un canale trasmissivo comune. Rimanendo sul mezzo trasmissivo, questo risulta essere un parametro dell‟architettura, quindi l‟approccio adottato dalle SOA ha il vantaggio di potersi integrare con diversi ambienti quali il Web, la telefonia mobile e altri permettendo di realizzare applicazioni multi canale, fruibili attraverso dispositivi di natura molto diversa. 2.4 I Web Services I Web Services sono un nuovo tipo di applicazioni web che cooperano fra loro, indipendentemente dalla piattaforma sulla quale si trovano, attraverso lo scambio di messaggi. Ognuna di queste applicazioni viene chiamato Web Service (Servizio Web), o più semplicemente servizio, del quale il Web Services Architecture Working Group (del W3C8) dà la seguente definizione: Un Web Service è un‟applicazione software identificata da un Uniform Resource Identifier (URI)9, le cui interfacce pubbliche e 8 Il World Wide Web Consortium (universalmente noto come W3C) è una organizzazione che sviluppa gli standard ufficiali (specifiche, linee guida, software e strumenti) usati nell’ambito di Internet. Questo consorzio, nato nel 1994 con l’obiettivo di sviluppare il potenziale del World Wide Web, è neutrale rispetto ai venditori. 9 Uniform Resource Identifier (URI, acronimo più generico rispetto ad "URL") è una stringa che identifica univocamente una risorsa generica che può essere un indirizzo Web, un documento, un'immagine, un file, un servizio, un indirizzo di posta elettronica, ecc. L'URL è un URI, o più comunemente chiamato indirizzo web. Albanese Francescantonio, 79117 Pagina 25 collegamenti sono definiti e descritti come documenti eXtensible Markup Language (XML), nello specifico WSDL. La sua definizione può essere ricercata da altri agenti software situati su una rete, i quali possono interagire direttamente con il Web Service, con le modalità specificate nella sua definizione, utilizzando messaggi basati su XML (SOAP), scambiati attraverso protocolli Internet (tipicamente HTTP). Gli standard utilizzati dai Web Services, alcuni citati nella definizione, si basano tutti su XML, e sono: • XML Schema (eXtensible Markup Language Schema), è un linguaggio di descrizione del contenuto di un file XML. Il suo scopo è definire qual è la costruzione legale di un documento XML, in particolare, gli elementi permessi, quali tipi di dati sono ad essi associati e la loro relazione gerarchica, permettendone la validazione, ovvero la verifica che i suoi elementi siano in accordo con la descrizione in linguaggio XML Schema. • SOAP (Simple Object Access Protocol), è un protocollo di trasmissione di messaggi tra componenti software in formato XML. SOAP mette a disposizione un meccanismo semplice, ma allo stesso tempo solido, che permette ad una applicazione di mandare un messaggio XML ad un‟altra applicazione. SOAP è un protocollo di alto livello ed è completamente Albanese Francescantonio, 79117 Pagina 26 indipendente dal protocollo di trasmissione sottostante, che può essere indifferentemente HTTP (Hypertext Transfer Protocol), JMS (Java Message Service), SMTP (Simple Mail Transfer Protocol), MIME (Multipurpose Internet Message Encapsulation) o altri. Tra questi il più usato è HTTP. SOAP è diventato un nome, e non più un acronimo; tuttavia: Service Oriented Architecture Protocol: un messaggio SOAP rappresenta l'informazione necessaria per invocare un servizio o riflette il risultato dell'invocazione di un servizio e contiene l' informazione specificata nella definizione dell'interfaccia del servizio. Simple Object Access Protocol: meccanismo per invocare oggetti remoti, serializzando la lista degli argomenti che deve essere trasportata dall'ambiente locale a quello remoto. • WSDL (Web Services Description Language), è un linguaggio formale basato XML, utilizzato per descrivere, in modo completo, un web service. Più precisamente un documento WSDL fornisce informazioni riguardanti l‟interfaccia del Web Service in termini di: servizi offerti dal Web Service URL ad essi associato modi per l‟invocazione Albanese Francescantonio, 79117 Pagina 27 argomenti accettati in ingresso e modalità con cui debbono essere passati formato dei risultati restituiti formato dei messaggi In altre parole si può dire che un file WSDL fornisce la descrizione relativa ad un Web Service in termini di: cosa fa come comunica dove si trova Attraverso tale file si può quindi conoscere tutti i dettagli per poter invocare correttamente un servizio. • UDDI (Universal Description, Discovery and Integration), è un registry (ovvero una base dati ordinata ed indicizzata), basato su XML e che utilizza SOAP per le comunicazioni da e verso l‟esterno. UDDI è indipendente dalla piattaforma hardware e definisce un meccanismo comune per pubblicare e trovare informazioni sui Web Services, in base alle loro descrizioni WSDL. Ciò che UDDI mette a disposizione è un registro nel quale si possa accedere, attraverso specifiche funzioni, per: pubblicare servizi che un‟azienda rende disponibili cercare aziende che mettono a disposizione un certo tipo di servizio Albanese Francescantonio, 79117 Pagina 28 avere informazioni “Human Readable”, cioè comprensibili all‟utente, circa indirizzi, contatti o altro relativi ad una azienda avere informazioni tecniche “Machine Readable”, cioè interpretabili ed utilizzabili dalla macchina, relative ad un servizio in modo tale da potersi connettere Un registro UDDI è costituito, in realtà, da un database distribuito, cioè da molti registri distribuiti sulla rete, ognuno dei quali si trova sul server di una azienda che contribuisce allo sviluppo di questo archivio pubblico, e connessi fra loro. Il sistema mantiene una centralizzazione virtuale, cioè l‟informazione che viene registrata su uno dei nodi (registri) del sistema viene propagata e resa disponibile su tutti gli altri tramite una loro sincronizzazione. Questo, oltre che ad alleggerire il carico di lavoro che un singolo nodo deve sopportare, contribuisce alla protezione del sistema contro possibili situazioni di failure del database, grazie alla ridondanza dei dati. Attraverso l‟utilizzo di questi ed altri standard i Web Services rendono possibile la comunicazione e la cooperazione, attraverso il web, di più applicazioni (servizi) che mettono a disposizione alcune funzionalità e, allo stesso tempo, utilizzano quelle rese disponibili da altre. Si può cioè ricercare e invocare servizi che possono essere composti per formare un‟applicazione per l‟utente finale, per abilitare transazioni di business o per creare nuovi Web Services. Albanese Francescantonio, 79117 Pagina 29 Di queste tecnologie, XML ha dato un contributo molto importante alla nascita dei Web Services. Linguaggio a marcatori, tag, creato e gestito dal World Wide Web Consortium (W3C) e derivato dallo Standard Generalization Markup Language (SGML)10, l‟XML è utilizzato per la memorizzazione di informazione in maniera strutturata. XML è un formato indipendente dalle varie piattaforme; ciò è dovuto, oltre che all‟essere universalmente riconosciuto come standard, anche al fatto che tale tecnologia si basa sul formato testo e quindi un documento XML può essere letto chiaramente su qualsiasi sistema operativo. Questa indipendenza lo rende la soluzione ideale per lo scambio di informazioni attraverso il Web. I vantaggi offerti dai Web Services sono: Indipendenza dalla piattaforma: i Web Services possono, infatti, comunicare fra loro anche se si trovano su piattaforme differenti Indipendenza dall‟implementazione del servizio: l‟interfaccia che un Web Service presenta sulla rete è indipendente dal software che implementa tale servizio. In futuro tale implementazione potrà essere sostituita o migliorata senza che l‟interfaccia subisca modifiche e quindi senza che dall‟esterno (da parte di altri utenti o servizi sulla rete) si noti il cambiamento 10 Standard Generalized Markup Language (SGML), è uno standard per la descrizione logica dei documenti. Albanese Francescantonio, 79117 Pagina 30 Riuso dell‟infrastruttura: per lo scambio di messaggi si utilizza SOAP che fa uso di HTTP, grazie al quale si ottiene anche il vantaggio di permettere ai messaggi SOAP di passare attraverso sistemi di filtraggio del traffico sulla rete, quali “Firewall” Riuso del software: è possibile riutilizzare software implementato precedentemente e renderlo disponibile attraverso la rete Il concetto di Web Services implica quindi un modello di architettura ad oggetti distribuiti (oggetti intesi come applicazioni), che si trovano localizzati in punti diversi della rete e su piattaforme di tipo differente. Il legame con l‟architettura Service-Oriented Architecture (SOA) sta nel fatto che, sfruttando al meglio tutte le caratteristiche della tecnologia dei Web Services, il sistema che si ottiene implementa proprio un‟architettura orientata ai servizi. Ad oggi i Web Services rappresentano la soluzione migliore per la realizzazione di una SOA su larga scala, ovvero su Internet. 2.5 Web Services e architettura di tipo non SOA Bisogna specificare, che parlare di Web Services, non implica necessariamente parlare di Service-Oriented Architecture (SOA). Si può ad esempio utilizzare i Web Services per aggiungere ad un‟architettura esistente una funzionalità basata sui servizi al fine di ottenere un certo Albanese Francescantonio, 79117 Pagina 31 requisito richiesto dal progetto che si sta realizzando. Oppure si può realizzare un sistema privato, interno ad una azienda, basato sulle tecnologie dei Web Services (fig. 2.3). Figura 2.3: Utilizzo di Web Services in un’architettura di tipo non SOA. In questi casi, come in altri, non è detto che si possa definire il sistema realizzato un‟architettura orientata ai servizi; questo perché, per il Albanese Francescantonio, 79117 Pagina 32 particolare utilizzo che si fa dei Web Services all‟interno di un certo sistema software, può non essere necessario soddisfare alcuni requisiti richiesti dal modello di architettura SOA. Poniamo, ad esempio, il caso di una rete interna ad una azienda in cui sono state realizzate applicazioni che fanno uso della tecnologia dei Web Services; se si prevede che le modifiche che verranno apportate nel tempo al sistema non sono in misura elevata, si può ad esempio pensare di memorizzare le informazioni riguardanti tutti i servizi nella configurazione di ognuno di essi, escludendo perciò dal progetto la presenza di un Service Registry, entità prevista invece dal modello di architettura SOA. Un altro possibile utilizzo, molto interessante, dei Web Services è il loro impiego nel processo di integrazione di applicazioni fra più aziende o fra più sedi della stessa azienda, attraverso il Web. Ad esempio si possono avere due aziende partner interessate a mettere a disposizione l‟una dell‟altra specifici servizi che si trovano sui propri server, mantenendone però la gestione dell‟implementazione. I Web Services rendono questo possibile senza doversi preoccupare della compatibilità fra piattaforme, sistemi operativi o linguaggi di programmazione, grazie alla totale indipendenza che questa tecnologia ha rispetto all‟implementazione del servizio. Albanese Francescantonio, 79117 Pagina 33 Figura 2.4: Esempio di comunicazione fra Web Service implementati su piattaforme diverse. Un esempio è schematizzato in figura 2.4 dove si ha una cooperazione fra Web Service realizzati su due piattaforme diverse, le due oggi più importanti J2EE (Java 2 Platform, Enterprise Edition) e .NET (Microsoft .NET). Il vantaggio di una collaborazione di questo tipo fra più aziende non è solo quello di poter avere accesso diretto attraverso la rete a servizi Albanese Francescantonio, 79117 Pagina 34 implementati e gestiti da altri ma anche di poterli comporre fra loro, siano essi in locale o in remoto, in modo tale da ottenerne di nuovi che mettano a disposizione nuove funzionalità o che riescano a risolvere problemi di complessità maggiore. Abbiamo visto come possono essere utilizzati i Web Services per interconnettere servizi situati in punti diversi della rete e con caratteristiche differenti. L‟esempio che abbiamo descritto riferendoci alla figura 2.3 fa uso di riferimenti agli altri servizi di tipo statico; il Client (o Consumer) conosce già l‟indirizzo (URL) al quale poter trovare un certo servizio (Provider). Si può invece desiderare di non dover conoscere, al momento dell‟implementazione di un servizio, gli URL di altri servizi di cui farà uso, lasciando ad un‟ulteriore agente il compito di fornire, a tempo di esecuzione, questa ed altre informazioni. Stiamo parlando del Service Registry ed introduciamo così l‟utilizzo dei Web Services nella realizzazione di un‟architettura Service-Oriented. 2.6 Web Services e architettura SOA La presenza del Service Registry (o anche Service Directory o Service Broker), di cui abbiamo già parlato nel capitolo 2.5, è ciò che rende il sistema, nell‟esempio di utilizzo dei Web Services visto precedentemente (in figura 2.3), un‟architettura Service-Oriented (SOA). Albanese Francescantonio, 79117 Pagina 35 Per implementare il Service Registry i Web Services fanno uso di UDDI, Universal Description, Discovery and Integration. UDDI è un servizio di registro pubblico in cui le aziende possono registrare (pubblicare) e ricercare Web Services. Esso mantiene informazioni relative ai servizi come l‟URL e le modalità di accesso. Anche UDDI è un Web Service, il quale mette a disposizione due operazioni: Publish, per la registrazione Inquiry, per la ricerca Si ottiene così quella che, allo stato attuale, è da molti considerata la migliore soluzione per l‟implementazione di un sistema con architettura Service Oriented. In figura 2.5 è riportata la schematizzazione del funzionamento di un sistema con architettura SOA, realizzato attraverso l‟uso dei Web Services. Albanese Francescantonio, 79117 Pagina 36 Figura 2.5: Sistema con architettura Service-Oriented realizzato con la tecnologia dei Web Services. Albanese Francescantonio, 79117 Pagina 37 Capitolo 3 Service Oriented Architecture e gli Enterpise Service Bus 3.1 Enterprise Service Bus come infrastruttura di supporto ad architetture Service-Oriented Con le architetture orientate ai servizi, il patrimonio informativo aziendale non è più un insieme di applicazioni tra loro isolate e che comunicano attraverso tecnologie d‟ integrazione di applicazioni, è, invece, organizzato in una collezione di “servizi” intesi come funzionalità di business realizzate tramite "componenti" che rispettano un'interfaccia standard. La Service-Oriented Architecture promette notevoli miglioramenti nell‟allineamento dell‟Information Technology (IT) con le esigenze aziendali ma necessita di un‟infrastruttura in grado di connettere le Albanese Francescantonio, 79117 Pagina 38 risorse IT indipendentemente da dove siano implementate, in particolare, necessita di un‟infrastruttura che offra flessibilità e affidabilità, in grado di riassemblare facilmente i servizi senza interruzioni. Quest‟infrastruttura è l’Enterprise Service Bus (ESB). Un ESB è un‟infrastruttura software che opera tra le applicazioni ed il sistema operativo (middleware) e che fornisce servizi di supporto ad architetture Service-Oriented (SOA). Il compito principale di un ESB è fornire un layer di comunicazione tra i servizi, coerentemente con i principi architetturali SOA, e permettere l‟invocazione dei servizi su sistemi eterogenei, risolvendo problematiche legate all‟integrazione come per esempio il supporto a chiamate sincrone e asincrone basate su messaggi, il routing intelligente dei messaggi, trasformazione e validazione dei dati, integrazione con diversi protocolli, gestione dell‟affidabilità e sicurezza. È facile, quindi, osservare che queste funzionalità si sovrappongono parzialmente a quelle fornite usualmente dai tradizionali middleware di integrazione da cui, in parte, derivano. Per comprendere pienamente i vantaggi forniti dagli ESB, occorre partire dalle differenze che questi presentano rispetto ai tradizionali sistemi di integrazione basati sull‟utilizzo di un middleware, di cui rappresentano un‟evoluzione in senso SOA. In tali architetture denominate Hub-and-Spoke (cosiddetto “a stella”), le operazione di routing dei messaggi e trasformazione dei dati sono Albanese Francescantonio, 79117 Pagina 39 centralizzate nell‟Hub e svolte dall‟Integration Broker, il componente centrale del sistema di integrazione. Da un punto di vista architetturale, l‟Integration Broker rappresenta l‟interfaccia unica attraverso cui transita ogni richiesta di comunicazione tra sistemi applicativi disomogenei che devono interoperare. In questo modo, tutte le problematiche e le operazioni di integrazione risultano essere centralizzate, riusabili e facilmente amministrabili. Gli svantaggi di un simile approccio nascono dal fatto che l‟hub rappresenta un potenziale collo di bottiglia, un potenziale single point of failure e presenta difficoltà di scalabilità. Inoltre, gran parte delle suite di integrazione presenti sino ad oggi sul mercato sono state sviluppate in tempi in cui o non esistevano “standard” per la definizione dei processi operativi o dello scambio dati, oppure questi non erano sufficientemente maturi e stabili. I fornitori software hanno così sviluppato soluzione proprietarie per risolvere le problematiche tipiche dell‟ integrazione. Il risultato di tale investimento da parte dei fornitori dell‟Enterprise Application Integration (EAI) erano software altamente funzionali ma terribilmente costosi e non flessibili. Anche oggi, questo tipo di software richiede un‟elevatissima tassa di licenza e un investimento in servizi di consulenza cinque volte superiore rispetto alla tassa di licenza software, per assicurarne il funzionamento. In molti casi, le competenze Albanese Francescantonio, 79117 Pagina 40 necessarie per lo sviluppo e la gestione di tali soluzioni EAI sono quindi garantite quasi unicamente dal fornitore del prodotto: vi è quindi un chiaro svantaggio tecnico ed economico dovuto non solo al costo delle licenze, ma soprattutto alle necessità per la manutenzione e la consulenza sul prodotto. In passato, l‟adozione di tali suite ha comportato problemi in termini di costi, manutenzione e interoperabilità. Figura 3.1: Integration Middleware: architettura Hub-andSpoke Albanese Francescantonio, 79117 Pagina 41 Figura 3.2: Integration broker: centralizzazione delle funzionalità d’integrazione Con l‟avvento degli Standard Internet vengono descritti come i sistemi informatici debbano connettersi gli uni agli altri, la semantica delle conversazioni tra questi e come i dati debbano essere rappresentati in tali conversazioni ed è proprio tutto questo che ha cambiato il mondo della EAI. Il software EAI comincia ad essere progettato e sviluppato in modo da utilizzare questi standard ad un costo minore rispetto alle soluzioni Albanese Francescantonio, 79117 Pagina 42 proprietarie. Lavorare con questa nuova generazione di software significa semplicemente ricercare gli standard opportuni e decidere la migliore modalità di implementazione in ambito aziendale. E, dato che le soluzioni sono conformi agli standard, le competenze informatiche necessarie per sviluppare e gestire il software risultano ampiamente disponibili. 3.2 Perché Enterprise Service Bus? “Un ESB aiuta le aziende a sfruttare il valore dell’architettura SOA incrementando la connettività, aggiungendo la flessibilità che facilita il cambiamento e fornendo maggiore controllo sull’utilizzo delle importanti risorse che unisce.” Mike Gilpin, Vice President e Research Director “What Is An Enterprise Service Bus?” Forrester Research, Inc. , Agosto 2004 La nascita delle nuove tecnologie che tentano di migliorare i risultati del processo di integrazione, come la Service Oriented Architecture (SOA), l‟Enterprise Application Integration (EAI) e i servizi web, hanno guadagnato l‟attenzione dei leader dell‟ Information Tecnology, dei venditori e degli analisti. L‟Enterprise Service Bus (ESB) racchiude le caratteristiche migliori di tutte queste tecnologie. Un ESB è generalmente progettato per permettere che applicazioni di diverso tipo si scambino messaggi con lo scopo di estendere le funzionalità di ciascuna applicazione con quelle fornite dalle altre Albanese Francescantonio, 79117 Pagina 43 applicazioni e di rendere virtuali le risorse aziendali, permettendo alla logica di business dell‟azienda di essere sviluppata e gestita indipendentemente dall‟infrastruttura della rete, e dalla fornitura di questi servizi. Un ESB è un prodotto per l‟integrazione basato su standard di mercato, che raccoglie le novità introdotte dallo stile architetturale orientato ai servizi e che fornisce le funzionalità tipiche dei tradizionali Integration Broker di cui ne rappresenta l‟evoluzione, con due fondamentali differenze. La prima è tecnologica: gli ESB espongono tramite “standard” quelle funzionalità che i tradizionali Integration Broker fornivano tramite tecnologie proprietarie. Esempi di standard ampiamente utilizzati sono: Java DataBase Connectivity (JDBC)11, Java Message Service (JMS) 12, Web Services Description Language (WSDL)13 e altri. 11 JDBC (Java DataBase Connectivity), è un connettore per database che consente l'accesso alle basi di dati da qualsiasi programma scritto con il linguaggio di programmazione Java, indipendentemente dal tipo di DBMS utilizzato. 12 JMS (Java Message Service) è un insieme di API che consente alle applicazioni Java presenti in una rete di scambiarsi messaggi tra loro e definisce lo standard di affidabilità per l'Enterprise Messaging (messaging per imprese), il quale è universalmente riconosciuto come una parte essenziale del sistema di applicazioni delle imprese. 13 Web Services Description Language (WSDL) è un linguaggio formale in formato XML utilizzato per la creazione di "documenti" per la descrizione di Web Service. Albanese Francescantonio, 79117 Pagina 44 Figura 3.3: Architettura Enterprise Service Bus La seconda differenza è architetturale: un ESB non si basa su un‟architettura “monolitica” di tipo Hub-and-Spoke, ma su di una architettura distribuita a bus condiviso SOA oriented. In altre parole, in un‟infrastruttura ESB, tutte le applicazioni sono integrate e operano come “servizi”. Albanese Francescantonio, 79117 Pagina 45 Figura 3.4: Enterprise Service Bus: scenario d'integrazione La logica d‟integrazione non è più centralizzata in un hub, ma è distribuita lungo gli endpoint connessi al bus. Decentralizzando la logica di integrazione lungo il bus si migliora la scalabilità ed è possibile Albanese Francescantonio, 79117 Pagina 46 effettuare il deploy delle funzionalità d‟integrazione strettamente necessarie (selective-deployment14). L‟utilizzo degli standard permette di ridurre le soluzioni proprietarie chiuse e costose tipiche dei tradizionali prodotti EAI riducendo l‟acquisto di soluzioni proprietarie e i costi legati alle consulenze specialistiche e alle licenze. Risulta evidente che l‟aumento di interoperabilità dato dall‟uso di protocolli e tecnologie standard, riduce i rischi aziendali dovuti dall‟adozione di un middleware, rendendolo in teoria sostituibile. Ad esempio, se ESB utilizza i Web Services, è possibile disaccoppiare l‟interfaccia del servizio (Web Services Description Language (WSDL)) dall‟implementazione del servizio stesso. L‟ESB permette, in linea con le best practices SOA, un'integrazione "incrementale": è possibile infatti integrare in momenti differenti le varie parti di un sistema attraverso un approccio cosiddetto Leave-and-layer: si lascia inalterato l'insieme dei servizi Legacy e di applicazioni esistenti riconciliando le loro differenze (logica e dati) in un nuovo layer (in questo caso, appunto, l‟ESB). Gli ESB quindi, rispetto ai prodotti tradizionali di integrazione, dovrebbero ridurre i costi di licenze e manutenzione e permettere una maggiore garanzia di portabilità del codice e di interoperabilità. Ad oggi, praticamente quasi tutti i principali 14 Con il termine inglese deployment indica la messa in campo o in atto (letteralmente, lo "spiegamento") di una soluzione. In informatica, in particolare, l'espressione può avere diversi significati a seconda del contesto. Albanese Francescantonio, 79117 Pagina 47 produttori di Software hanno realizzato o intendono realizzare un proprio prodotto ESB da proporre sul mercato. Da un lato società che proponevano broker di integrazione tradizionali (es: IBM e SeeBeyond) hanno affiancato alla loro suite d'integrazione anche dei prodotti ESB, dall'altro le società di dimensioni più limitate (come Sonic o Fiorano) che proponevano sistemi di comunicazioni a messaggi hanno migliorato il loro prodotto aggiungendo nuove caratteristiche. Altri venditori hanno riadattato le loro integration suite effettuando di fatto una riproposizione del loro prodotto al fine di ridurre i costi (licenze e manutenzione), altri ancora hanno fornito una versione "light" del prodotto Integration Broker in veste di ESB. 3.3 Enterprise Service Bus: Funzionalità supportate Generalmente gli Enterprise Service Bus (ESB) utilizzano come dorsale infrastrutturale un sistema a scambio di messaggi come puro supporto alla comunicazione, integrando poi nel suo stack le funzionalità e i meccanismi che permettono integrazione a livello enterprise. Le funzionalità che un ESB deve implementare e che lo rendono un prodotto di successo, sono: Trasformazione (sintattica e semantica), divisione, aggregazione e arricchimento dei messaggi XML. Questo permette di riconciliare rapidamente incompatibilità tra formati dati utilizzati da servizi Albanese Francescantonio, 79117 Pagina 48 che interoperano, fondere dati provenienti da diverse fonti ed estendere le funzionalità dei servizi. Delivery dei messaggi con autenticazione, autorizzazione, non ripudio; in generale deve essere garantito il supporto Middleware alla comunicazione asincrona. Mediazione del modello di trasporto, protocollo e interazione. È possibile integrare facilmente servizi che rappresentano tecnologie diverse, senza modificare le applicazioni sottostanti o introdurre interdipendenze. Supporto a diverse modalità conversazionali: sincrona e asincrona. Gestione avanzata del routing dei messaggi, per esempio sulla base del contenuto del messaggio stesso che permette a un servizio di mandare un messaggio senza conoscerne la destinazione. Funzionalità di amministrazione per la gestione e la configurazione del bus. Esposizione di servizi middleware di supporto alla logica di business (per esempio la gestione delle transazioni). Supporto di più protocolli di comunicazione (tramite appositi Adapter15) per facilitare l‟integrazione. 15 Con il nome Adapter (in italiano adattatore) si denota un design pattern ovvero "una soluzione progettuale generale a un problema ricorrente" utilizzato in informatica nella programmazione orientata agli oggetti. Albanese Francescantonio, 79117 Pagina 49 Supporto per permettere la composizione dei servizi (orchestration) in processi di business. Gestione del monitoring del management per la gestione delle configurazione, del ciclo di vita dei componenti, e per operazioni di log, tracking e verifica dei servizi. Gestione del Service registry e dei metadata per permettere la catalogazione, la memorizzazione e la relativa ricerca. Gestione della sicurezza nelle comunicazioni, per permettere operazioni di autorizzazione, identificazione e di creazione regole e policy. Parte di queste funzionalità possono essere fornite da un middleware che supporti la comunicazione asincrona a messaggi: rispetto a questo un ESB è l'evoluzione da un puro supporto alla comunicazione ad un sistema integrato di composizione di servizi. Si può affermare che gli ESB realizzano la parte di middleware richiesta da architetture SOA utilizzando sistemi a scambio di messaggi. Albanese Francescantonio, 79117 Pagina 50 Capitolo 4 Una piattaforma di Integrazione Applicativa: GreenVulcanoESB "Oltre la metà delle grandi aziende disporranno di un enterprise service bus entro la fine del 2006 (0.7 probabilità)" Roy Schulte, Vice President Presentazione: “The Future of Application Integration” Gartner, Inc., Novembre 2004 Abbiamo visto che l‟integrazione rappresenta un imperativo aziendale, un passaggio obbligato per generare maggiore efficienza operativa e che l‟Enterprise Service Bus (ESB) rappresenta la pratica architetturale migliore per implementare un‟architettura Service-Oriented (SOA). A tutt‟oggi diverse compagnie di Information Tecnology hanno sviluppato un‟implementazione dell‟ESB, lo scopo di questa tesi è quello di proporre l‟implementazione che è stata sviluppata nell‟azienda presso la quale ho svolto il tirocinio “l‟E@I Software”, azienda operante nel campo dell'integrazione applicativa in ambito Enterprise, presentando poi un esempio di utilizzo dello strumento per configurare la rete “UTRAN”. Albanese Francescantonio, 79117 Pagina 51 4.1 Perché GreenVulcanoESB? GreenVulcanoESB è una piattaforma di Integrazione Applicativa, in grado di interfacciarsi a svariati sistemi di natura eterogenea. La sua architettura a plug-in ne permette l'espansione e la personalizzazione, al fine di soddisfare le esigenze più diverse. E' sviluppato interamente nel linguaggio Java, ed è un sistema Enterprise Application Integration (EAI) molto flessibile, semplice ed efficace. I punti di forza sono: Si basa su standard aperti Utilizza un qualsiasi Application Server J2EE16 compliant Utilizza una architettura a plug-in Ha un costo competitivo Presenta un‟architettura “pluggable” con possibilità di realizzare altri adapter a seconda delle esigenze del cliente. 16 J2EE (Java 2 Enterprise Edition) è la versione enterprise della piattaforma java. Essa è costituita da un insieme di specifiche che definiscono le caratteristiche e le interfacce di un insieme di tecnologie pensate per la realizzazione di applicazioni di tipo enterprise. Chiunque può realizzare una implementazione di tali specifiche e produrre application server compatibili con le specifiche J2EE (chiamati , proprio per questo, “J2EE compliant”). Albanese Francescantonio, 79117 Pagina 52 Figura 4.1: Componenti base e Architettura di GreenVulcanoESB 4.2.1 Il Virtual Layer Permette l‟indipendenza dall‟Application Server J2EE adottato non utilizzando meccanismi proprietari dell‟Application Server, impiegando invece concetti “virtuali” come operazioni di dequeue, enqueue, forward e Albanese Francescantonio, 79117 Pagina 53 call, e meccanismi di code al suo interno (es: JMS) per permettere la comunicazione tra i componenti, assicurando, così, un buon livello di disaccoppiamento e di presa in carico dei messaggi. 4.2.2 Il Core Costituisce la parte centrale del sistema e contiene i componenti ed i servizi dei quali il cliente necessita. Alcune funzionalità principali sono il workflow, dispatching, data transformation, data compression & decompression, data crypting etc. Workflow Supporta flussi sia short-time che long-time. La persistenza dei dati è assicurata mediante l‟impiego di una base dati e l‟attivazione avviene mediante “eventi” (esempio: arrivo di un file, invocazione Web Service, evento schedulato). Interamente sviluppato con tecnologia J2EE. La creazione e la modifica dei flussi avviene tramite console o plug-in di Eclipse. Dispatcher E‟ il componente responsabile del dispatching dei messaggi. Tramite delle regole configurabili effettua intelligent routing. Comunica direttamente con il Data transformation. La configurazione delle regole avviene tramite la console o plug-in di Eclipse. Albanese Francescantonio, 79117 Pagina 54 Data crypting Utilizzabile in presenza di dati “sensibili”, fa uso di una chiave configurabile nel sistema e utilizza metodi di crypting standard. È altamente performante. Data transformation Pensato come modulo generico di trasformazione dei dati. Adotta una sua architettura di tipo “pluggable” ed ha la possibilità quindi di estendere la capacità di trasformazione. Può eseguire molteplici trasformazioni in “cascata” e assicura l‟integrazione tra contesti applicativi tecnologicamente differenti. Data compression & decompression Modulo pensato per agevolare il transito di messaggi di grandi dimensioni. Esso è in grado di comprimere e decomprimere tutto il messaggio o parti del dato (esempio: in caso di Web Service). 4.2.3 Integration Suite L‟Integration Suite è l‟insieme delle funzionalità offerte dall‟Application Server sottostante. Sono supportati tutti gli Application Server purché siano J2EE compliant, come ad esempio: BEA WebLogic Server Albanese Francescantonio, 79117 Pagina 55 JBOSS SeeBeyond SAP NetWeaver 4.2.4 Connectivity Layer Lo strato di connettività permette di integrare applicazioni via file, Database, Web Services, oppure creare nuovi adapter a seconda delle esigenze del cliente. Nello specifico, consente di far comunicare il Core e tutti componenti contenuti con i sistemi esterni. Al suo interno troviamo già una serie di adapter: SIO (SAP Interface Object), connettore J2EE Connection Architecture (JCA) con caratteristiche sofisticate che permette molteplici configurazioni con sistemi SAP. DB Adapter, plugin che da la possibilità di intergrarsi con database remoti File Adapter, strumento versatile per leggere, scrivere e trasferire file. È in grado di: Apprendere da un XML di configurazione la struttura di un generico file da trattare Albanese Francescantonio, 79117 Pagina 56 Leggere e scrivere il contenuto, partendo appunto dal suo XML associato Eventualmente trasferire su un sistema remoto, via FTP, il file generato WebService Adapter, ideato per integrare GreenVulcanoESB in un contesto SOA del cliente. In grado di: Acquisire a run-time il WSDL del servizio da invocare Invocare WebServices per interagire con servizi già presenti nella realtà del cliente Essere invocato in modalità WebService, e quindi offrire servizi per gli altri sistemi JARAD (Java-ARS Remedy Adapter), connettore JCA con caratteristiche architetturali sofisticate, che comunica con l‟esterno mediante messaggi XML. FileNET Adapter, un connettore JCA con caratteristiche architetturali sofisticate. Permette di inserire, modificare e cancellare item documentali ed attributi all‟interno di FileNET. Albanese Francescantonio, 79117 Pagina 57 4.3 Amministrazione e controllo del sistema Per quanto riguarda la parte di Amministrazione e Controllo, Il sistema da la possibilità di monitorare sia le risorse del sistema che l‟esecuzione dei flussi di integrazione. Dispone di Console di Amministrazione che consente di visualizzare e ripristinare vecchie configurazioni, il controllo degli accessi, creazione e design dei workflow, avviare e arrestare i servizi (singolarmente o in gruppo), configurazione dei vari moduli (es: SIO, Dispatcher, Data transformation etc). 4.4 VulCon (plug-in per Eclipse) L‟Enterprise Service Bus di GreenVulcano mette anche a disposizione, nella sua versione Enterprise, un plug-in per l‟ Integrated Development Environment (IDE) Eclipse. VulCon (GreenVulcano Console) è un designer sofisticato per la progettazione e l‟implementazione di flussi di business, che permette di realizzare flussi, sia semplici che complessi, in maniera semplice e intuitiva e senza dover modificare “a mano” i file di configurazione. Albanese Francescantonio, 79117 Pagina 58 4.5 DataHandler Uno dei principali plugin del ESB è il DataHandler: è un componente altamente performante e configurabile, che si occupa di eseguire operazioni di CRUD verso i principali RBMS17 che sono in commercio utilizzando le API JDBC18. Questo componente è disponibile esclusivamente nella versione Enterprise. Il DataHandler attraverso mappe di trasformazione, elabora l'XML ricevuto in input viene normalizzato in un altro XML, che definisce tipi di dati e valori, necessari a eseguire l'operazione sul database. In seguito, il DataHandler esegue le operazioni sul database configurate per il servizio. In base al tipo di operazione configurata, il DataHandler restituisce un output composto di un report che descrive il risultato dell'operazione, e un XML che, attraverso una mappa di trasformazione, è convertito in un secondo XML definito da uno XSD. La configurazione di questo componente avviene in tre step: 1. Definizione degli XSD di input e output del servizio 17 Il Relational Database Management System (RDBMS) (sistema per la gestione di basi di dati relazionali) è un database management system basato sul modello relazionale. 18 JDBC (Java DataBase Connectivity), è un connettore per database che consente l'accesso alle basi di dati da qualsiasi programma scritto con il linguaggio di programmazione Java, indipendentemente dal tipo di DBMS utilizzato. È costituita da una API, raggruppata nel package “java.sql”, che serve ai client per connettersi a un database. Fornisce metodi per interrogare e modificare i dati. È orientata ai database relazionali ed è Object Oriented. Albanese Francescantonio, 79117 Pagina 59 2. Definizione delle mappe di conversione dal formato definito negli XSD creati e viceversa 3. Composizione delle select/update/calls in linguaggio SQL per il ritrovamento/modifica dei dati sul database Il linguaggio utilizzato per le mappe di trasformazione è XSLT 1.0. 4.6 UDDI UDDI (Universal Description Discovery and Integration) costituisce l‟elemento fondamentale in un‟architettura Enterprise Service Bus. E‟ un registro XML-based che permette il discovery dei servizi da parte di un utente o di una applicazione. E‟ interrogabile tramite invocazione Web Service e restituisce un servizio. Albanese Francescantonio, 79117 Pagina 60 4.7 I Vantaggi dell'utilizzo di GreenVulcanoESB L‟ESB GreenVulcano offre molti vantaggi, tra i principali: 1. ESB configurabile e adattabile ad ogni esigenza del cliente 2. Possibilità di modificare i servizi configurati senza bloccare le attività del cliente, grazie all‟hot deploy (lettura della configurazione a caldo) che GreenVulcanoESB offre. Albanese Francescantonio, 79117 Pagina 61 3. Grazie al plugin Vulcon è molto intuitiva la configurazione dei servizi, ciò permette un notevole risparmio in termini di effort e costi. 4. Grazie al vasto numero di plugin e adapter si può integrare con sistemi diversi anche per tecnologia di sviluppo. Albanese Francescantonio, 79117 Pagina 62 Capitolo 5 Configurazione di GreenVulcanoESB per la gestione della rete “UTRAN” 5.1 L’ambiente di lavoro Il lavoro svolto per questa tesi riguarda lo sviluppo di un particolare caso d‟utilizzo di GreenVulcanoESB per mostrare come è possibile, con questo strumento, centralizzare la gestione delle interconnessioni tra applicazioni, evitando di demandare questo problema alle applicazioni stesse, far comunicare in modo sicuro rapido e affidabile i servizi web esposti da sistemi disparati, creare una composizione di servizi, tenere sincronizzati fra di loro diversi database e discriminare in base ad una particolare esigenza l‟inserimento in un database piuttosto che in un altro. In particolare si è sviluppato un sistema per la configurazione e la gestione della rete “UTRAN”. Prima di illustrare il caso d‟utilizzo sviluppato ed analizzare la relativa configurazione di GreenVulcanoESB, occorre fare una panoramica sulle Albanese Francescantonio, 79117 Pagina 63 tecnologie e gli strumenti di sviluppo utilizzati, per comprendere meglio l‟ambiente di lavoro. Come base di dati è stata utilizzata Oracle19. Il sistema gestisce la progettazione della rete “UTRAN”; per tale motivo sono stati creati due schemi: 1. Uno schema di progetto con il requisito di memorizzare tutti i dati creati durante la fase di progettazione 2. Uno schema che memorizza i dati che la rete possiede Come application server20, sul quale far girare l‟ESB, è stato utilizzato Jboss. Jboss è un application server open source basato sulla tecnologia Java di Sun. Come IDE (Integrated Development Environment) di sviluppo è stato utilizzato Eclipse con un plugin di GreenVulcano (VulCon) che permette di configurare servizi di integrazione in modo rapido ed efficiente. Eclipse è stato un valido strumento anche per sviluppare una piccola applicazione web, la quale veniva utilizzata dall‟utente finale per configurare la rete “UTRAN”. Tale applicazione web al suo interno contiene solo la logica di MVC (Model View Controller), per la configurazione della rete, mentre tutta la logica di Business è stata inserita nei servizi di GreenVulcanoESB. 19 Oracle è uno dei più famosi database management system (DBMS), cioè sistema di gestione di basi di dati, ed è scritto in linguaggio C. Oracle fa parte di quei database detti RDBMS (Relational DataBase Management System), ovvero di quei sistemi di database basati sul Modello Relazionale. 20 Un application server è un software che fornisce l'infrastruttura e le funzionalità di supporto, sviluppo ed esecuzione di applicazioni e componenti server in un contesto distribuito. Si tratta di un complesso di servizi orientati alla realizzazione di applicazioni per il web. Albanese Francescantonio, 79117 Pagina 64 Come sistema operativo del server sul quale girerà l‟applicazione è stato usato Sun Solaris 10. Solaris è un sistema operativo Unix, scritto in linguaggio C, che è molto conosciuto e utilizzato per la sua scalabilità e per l‟introduzione di molte caratteristiche innovative come DTrace, ZFS e Time Slider21. 5.2 Che cos è la rete “UTRAN”? Per capire a fondo le caratteristiche dell‟ambiente dove si va ad attestare il sistema che è stato sviluppato, facciamo prima una panoramica sulla tecnologia che sta alla base della rete “UTRAN”. 5.2.1 La tecnologia “UMTS” Il sistema UTMS (Universal Mobile Telecommunication System), è un sistema di telecomunicazione radiomobile di “terza generazione (3G)”. Attualmente, il sistema UMTS, ormai caratterizzato da standard quasi mondiali che definiscono le principali proprietà, è in una fase di sviluppo tale, grazie al lancio commerciale in Europa di alcuni gestori, da permettere 21 DTrace è una funzione che offre capacità di osservazione pervasiva e sicura sui sistemi di produzione per velocizzare lo sviluppo e l’ottimizzazione di applicazioni basate sullo stack AMP/MARS. ZFS è un file system open source noto per la sua alta capacità e per l’integrazione di diversi concetti presi da vari file system in un unico prodotto. Time Slider è una funzione che permette di effettuare il backup automatico dei dati sullo stesso disco utilizzando le caratteristiche uniche del file system ZFS. Albanese Francescantonio, 79117 Pagina 65 di poter usufruire dei servizi offerti dalla nuova tecnologia con un‟affidabilità pari a sistemi globalmente diffusi, quali il GSM e il GPRS. Un Sistema Radiomobile è un sistema che permette una connessione tra due terminali, di cui almeno uno può essere in movimento. E‟ possibile, per l‟utente, eseguire e ricevere chiamate in qualunque zona coperta dal sistema stesso con un elevato grado di qualità. La copertura dell‟area da parte della rete radiomobile è effettuata attraverso dei punti d‟accesso chiamati Stazioni Radio Base (SRB). Ogni SRB fornisce l‟accesso alla stazione mobile, è possibile instaurare un collegamento radio con il mobile stesso, se e solo se è disponibile almeno un canale radio libero. I primi sistemi radiomobili (anni „20 - ‟30) facevano uso delle frequenze più basse dello spettro radioelettrico, trasmettendo nella gamma MF (Media Frequenza: 0.3 ÷ 3 MHz). L‟incremento della conoscenza dei fenomeni elettromagnetici e l‟evoluzione della tecnologia hanno permesso di utilizzare una sempre più ampia porzione dello spettro, potendo così passare alle gamme di frequenza superiori, giungendo oggi all‟uso della banda UHF (300 MHz ÷ 3 GHz) e delle Microonde. Negli Stati Uniti, in Giappone, e in Europa sono introdotti i primi sistemi commerciali (come AMPS, TACS e NMT). Tutti questi sistemi sono basati su tecniche d‟accesso e d‟accesso multiplo a divisione di frequenza (FDMA – Frequency Division Multiple Access) (FDD – Frequency Division Duplex). Con questa tecnica è assegnata una determinata frequenza per le trasmissioni verso la SRB (Uplink), ed una frequenza diversa per le trasmissioni verso il Albanese Francescantonio, 79117 Pagina 66 terminale mobile (Downlink). Trasportando esclusivamente servizi voce, la modulazione utilizzata era di tipo analogico (FM) e la banda utilizzata per ciascun canale era di circa 30 KHz. I problemi che questi sistemi incontravano erano prevalentemente dovuti ad effetti di fading (effetto di evanescenza del segnale) e d‟interferenza tra gli altri utenti, i quali erano risolti con la trasmissione del segnale a potenze relativamente alte, e con il riutilizzo delle stesse frequenze nelle celle non adiacenti. Le difficoltà incontrate nei sistemi della prima generazione hanno fatto crescere l'interesse per lo sviluppo dei sistemi di seconda generazione. Con questi sistemi è introdotto l'uso delle tecniche digitali per la trasmissione del segnale, abbinando alle tecniche di codifica della voce anche sistemi per la correzione d‟errore e la sicurezza nelle comunicazioni. Ecco quindi che intorno agli anni '90 si affaccia sul mercato la seconda generazione (2G) dei sistemi per telefonia mobile: GSM, D-AMPS, PCS e PDC. Utilizzando tecniche digitali di modulazione s‟introducono i vantaggi di una maggiore efficienza spettrale e la possibilità di combinare le trasmissioni dati insieme alle trasmissioni di tipo vocale. I primi sistemi sviluppati negli Stati Uniti utilizzavano tecniche d‟accesso a divisione di tempo (TDMA- Time Division Multiple Access), dove ciascuna portante di 30 KHz era divisa in tre Time-Slot, e ciascuno di questi costituiva un canale d‟utente. In Europa era standardizzato il GSM che, utilizzando tecniche di modulazione GMSK, consente di dividere una portante di 200 KHz in 8 Time Slot, con conseguente aumento degli utenti che possono essere connessi Albanese Francescantonio, 79117 Pagina 67 contemporaneamente con una sola cella. Per far fronte alle esigenze di maggiori velocità nella trasmissione dati, in questi anni la seconda generazione si è evoluta verso la generazione 2,5. Un esempio è l'introduzione del GPRS sulle reti GSM, il quale consente una maggiore velocità di trasmissione dati, e una più vasta gamma di servizi offerti (Packet Data). Con questo sistema è ora possibile realizzare delle trasmissioni dati fino a 171 Kbit/s in modalità Always On (sempre connesso). Questo è reso possibile dalla possibilità di adattare il traffico di tipo Packet Data Switched sull‟attuale reteGSM, che per sua natura è di tipo Circuit Data Switched. La differenza consiste nel fatto che, rispetto al sistema GSM tradizionale, un collegamento dati GPRS utilizza le risorse di rete solamente quando i dati sono effettivamente trasmessi, ed un utente potrà quindi avere tariffe più orientate verso la quantità dei dati trasmessi indipendentemente dal tempo effettivo della connessione. Nel 1992 la WARC (World Administrative Radio Conference) ha individuato la banda dei 2 GHz per l'utilizzo dei sistemi della terza generazione, e dal 1997 i sistemi che vi operano sono standardizzati da uno specifico gruppo di lavoro in ambito ITU prendendo il nome di IMT-2000. UMTS è il nome dei sistemi di terza generazione. Le bande utilizzate nei vari paesi sono pressoché le stesse, ma l'idea originale di realizzare un‟unica interfaccia radio standardizzata a livello mondiale non ha avuto seguito, pertanto, anche se i sistemi di questa generazione presentano in ogni caso Albanese Francescantonio, 79117 Pagina 68 molte similitudini, più che uno standard, l‟IMT-2000, è da considerarsi come una famiglia di sistemi alla quale l‟UMTS appartiene. Le bande individuate dal WARC verranno utilizzate in Europa e in Asia con tecniche W-CDMA (Wideband Code Division Multiple Access) e TD- CDMA (Time Division - Code Division Multiple Access), mentre negli USA queste bande sono già utilizzate dal sistema PCS, pertanto gli operatori dovranno condividere con questo sistema le risorse radio disponibili. L‟UMTS inizialmente è standardizzato in Europa dall‟ETSI fino al 1998, poi nasce il 3GPP (3rd Generation Partnership Project), associazione dei maggiori enti di standardizzazione internazionali (europei, giapponesi, americani, coreani, ecc.). L'UMTS sarà allocato nelle bande di frequenza simmetriche (per il duplex) di 1920¸ 1980 MHz per l'Uplink, e 2110¸ 2170 MHz per il Downlink (modo FDD – Frequency Division Duplex), nonché nelle bande asimmetriche da 1900 ÷ 1920 MHz e 2010 ÷ 2025 MHz (modo TDD – Time Division Duplex). In entrambi i casi, le bande sopra riportate sono suddivise in portanti da 5 MHz. In particolare in Italia le frequenze assegnate ad H3G (3), primo gestore di telefonia mobile ad aver lanciato in Europa la rete UMTS a livello commerciale, sono le seguenti: - 1900¸ 1905 per la banda asimmetrica (TDD) - 1955¸ 1970 per la banda simmetrica in Uplink (FDD) - 2145¸ 2160 per la banda simmetrica in Downlink (FDD) Albanese Francescantonio, 79117 Pagina 69 La decisione di utilizzare modalità diverse per l'accesso radio comporta la necessità per i terminali mobili di dover supportare i differenti standard. I primi terminali UMTS supportano anche il sistema di seconda generazione GSM e solo in futuro potranno supportare anche le altre reti 3G. La possibilità per i terminali di potersi collegare anche alle reti della seconda generazione consentirà una maggiore mobilità, specialmente nelle prime fasi d‟implementazione della rete UMTS giacché non sarà coperta da subito la totalità del territorio. I servizi che un utente sottoscrive con un operatore saranno mantenuti anche in condizione di mobilità verso altri operatori UMTS (servizio chiamato roaming), sfruttandone le capacità di "Virtual Home Environment" (VHE). È inoltre allo studio una modalità di trasmissione a più portanti che consentirà di creare una compatibilità tra i sistemi UMTS e quelli CDMA2000. L'introduzione della tecnica W-CDMA, combinata alle tecniche di codifica variabile (OVSF) utilizzate per le canalizzazioni e all'utilizzo di opportuni algoritmi per il controllo della potenza (Power Control), consentono di realizzare delle connessioni a differenti velocità per ciascun utente, e sarà possibile utilizzare servizi multipli in contemporanea, garantendo la qualità del servizio in ogni momento della connessione pur utilizzando un‟unica risorsa fisica (Bearer Channel). L'obiettivo è in ogni modo quello di poter realizzare connessioni a 128 Kbit/s in condizioni di mobilità veicolare (fino a 500 Km/ora), connessioni Albanese Francescantonio, 79117 Pagina 70 a 384 Kbit/s in condizioni di mobilità pedestre, per arrivare fino a 2 Mbit/s in condizioni di ridotta mobilità. Per rendere più flessibili i servizi che una rete UMTS può offrire, le interconnessioni dei vari elementi di rete saranno realizzate con la tecnica ATM (interfacce Iu e Iur). Questa soluzione consente di interfacciare la rete ad accesso radio con la rete centrale in modo molto dinamico, e darà la possibilità di introdurre futuri cambiamenti nella struttura della rete senza dover intervenire direttamente sull'UTRAN (UMTS Terrestrial Radio Access Network), permettendo così uno sviluppo graduale ed in linea con le varie strategie adottate dai singoli operatori. 5.2.2 Architettura di base del sistema “UMTS” La rete UMTS utilizza la stessa architettura già impiegata da tutti i sistemi di seconda generazione e da alcuni di prima generazione. Dal punto di vista funzionale gli elementi di rete sono raggruppabili nell‟UTRAN, che gestisce tutte le funzionalità radio, e nella Core Network (CN) responsabile della commutazione e dell‟instradamento delle chiamate e delle connessioni con le reti esterne. Albanese Francescantonio, 79117 Pagina 71 Per completare la panoramica dei sistemi occorre considerare gli apparati d‟utente (User Equipment– UE) che s‟interfacciano tra l‟utente e la rete d‟accesso. Dal punto di vista delle specifiche e degli standard, sia gli apparati d‟utente sia la rete UTRAN implementano protocolli assolutamente nuovi, progettati sulla tecnologia d‟accesso radio UMTS; al contrario, la definizione ed i protocolli della CN sono in gran parte mutuati dal GSM. Questa caratteristica consente ai sistemi dotati delle nuove interfacce radio di poter essere integrati con una tecnologia di CN già matura, conosciuta e consolidata, favorendo la rapidità d‟introduzione delle nuove tecnologie e il roaming globale. L‟UE si suddivide in due parti: - Il Mobile Equipment (ME) è il terminale utilizzato per le comunicazioni radio sull‟interfaccia Uu. - L‟UMTS Subscriber Identity Module (USIM) è la smartcard che immagazzina e gestisce l‟identità del sottoscrittore, esegue gli algoritmi d‟autenticazione, memorizza le chiavi d‟autenticazione e crittografia ed altre specifiche funzionalità necessarie al normale funzionamento del terminale. L‟UTRAN è formata dai seguenti nodi di rete: - Il Nodo B, che converte il flusso di dati tra le interfacce Iub e Uu e coopera nella gestione delle risorse radio (il termine Nodo B ha significato analogo al termine più generico Stazione Radio Base - SRB). - Il Radio Network Controller (RNC), che gestisce e controlla le risorse radio del proprio dominio (i Nodi B si connettono a quest‟elemento); il nodo RNC costituisce il punto d‟accesso di tutti i servizi che l‟UTRAN fornisce alla Albanese Francescantonio, 79117 Pagina 72 CN come, ad esempio, la connessione ai terminali d‟utente (UE). S‟interfaccia con la CN (di solito con un MSC e un SGSN) e termina il protocollo RRC (Radio Resource Control) che definisce i messaggi e le procedure tra il terminale mobile e la rete UTRAN. Corrisponde, logicamente, al nodo BSC del GSM. L‟insieme di un Radio Network Controller (RNC) e più Nodi B forma il Radio Network Sub-System (RNS). - HLR (Home Location Register): base dati installata presso la rete home che memorizza i profili di servizio degli utenti. Il profilo d‟utente è creato nel momento in cui il nuovo cliente sottoscrive il servizio e rimane memorizzato finché la sottoscrizione è attiva. Per supportare l‟instradamento verso il mobile dei servizi da esso terminati (chiamate entranti o messaggi) l‟HLR memorizza anche la posizione dell‟UE a livello di MSC/VLR e/o SGSN dal quale il terminale è servito. - MSC/VLR (Mobile Services Switching Centre / Visitor Location Register): sono, rispettivamente, la centrale di commutazione (MSC) e la base dati (VLR) che supportano l‟UE, nella sua attuale posizione, per i servizi a commutazione di circuito (Circuit Switched – CS). La funzionalità principale dell‟MSC è di commutare le chiamate mentre il VLR memorizza i profili d‟utente dei sottoscrittori ospiti (ovvero sotto la copertura radio servita dal MSC/VLR) e informazioni più precise quali la posizione dell‟utente all‟interno della copertura radio. La parte di rete alla quale si accede tramite MSC/VLR è definita spesso come “Dominio a Commutazione di Circuito” o CS (Circuit Switched). Albanese Francescantonio, 79117 Pagina 73 - GMSC (Gateway MSC): è il nodo di commutazione che interfaccia la PLMN (Public Land Mobile Network) UMTS con le altre reti esterne a commutazione di circuito. Tutte le connessioni, entranti e uscenti, di tipo CS passano attraverso il GMSC. - SGSN (Serving GPRS Support Node): funzionalmente simile all‟MSC/VLR ma utilizzato per servizi a commutazione di pacchetto (Packet Switched – PS). - GGSN (Gateway GPRS Support Node): funzionalmente simile al GMSC ma utilizzato per i servizi PS. Si osservi, inoltre, che reti esterne di tipo CS possono essere la rete ISDN (Integated Service Digital Network) o la rete PSTN (Public Switched Telephone Network), mentre reti PS possono essere reti come Internet. Gli standard UMTS sono strutturati in modo che le funzionalità interne degli elementi di rete non siano specificate in dettaglio, mentre lo sono le interfacce tra gli elementi logici di rete. Le interfacce aperte specificate dallo standard per la rete d‟accesso sono le seguenti: - Interfaccia Cu. Interfaccia elettrica tra la smartcard USIM ed il ME, realizzato conformemente agli standard per smartcard. - Interfaccia Uu. E‟ l‟interfaccia radio W-CDMA attraverso la quale il terminale d‟utente accede alla parte fissa dell‟architettura di rete. Si tratta dell‟interfaccia aperta più importante dell‟UMTS. - Interfaccia Iu. Connette l‟UTRAN alla CN. Questa interfaccia aperta permette agli operatori di acquistare UTRAN e CN da manifatturiere diverse. Albanese Francescantonio, 79117 Pagina 74 E‟ basata su trasporto ATM (Asynchronous Transfer Mode). Il livello fisico di questa interfaccia è realizzato in fibra ottica, collegamento radio o cavo in rame. - Interfaccia Iur. Questa interfaccia aperta consente il soft handover tra gli RNC di diverse manifatturiere ed è, quindi, complementare rispetto all‟interfaccia Iu. Anche questa interfaccia è basata su un livello di trasporto ATM. - Interfaccia Iub. Connette i Nodi B all‟RNC. L‟UMTS è il primo sistema radiomobile commerciale dotato d‟interfaccia completamente aperta tra il nodo di controllo e le stazioni radio base. Questo per permettere maggiore competizione tra le diverse manifatturiere impegnate nella realizzazione di Nodi B. Come l‟interfaccia Iur anche la Iub implementa un livello di trasporto su ATM. Particolare caratteristica della rete UTRAN è quella relativa alle funzionalità logiche del nodo RNC. L‟RNC che controlla il Nodo B (ovvero che termina l‟interfaccia Iub proveniente dal Nodo B) è detto Controlling RNC (CRNC) del Nodo B. Il CRNC è responsabile della gestione del traffico e delle situazioni di congestione delle proprie celle. Nel caso in cui una connessione mobile UTRAN utilizzi le risorse appartenenti a più di un RNC (condizione di Soft Handover Inter RNC) gli RNC coinvolti hanno due ruoli distinti: 1. Serving RNC. L‟SRNC di un terminale mobile è l‟RNC che termina il collegamento Iu per il trasporto dei dati utente e la corrispondente segnalazione verso la CN. Un UE può avere sempre un solo SRNC. Albanese Francescantonio, 79117 Pagina 75 2. Drift RNC. Il DRNC è un qualunque RNC, diverso e distinto dall‟SRNC, che controlla le celle utilizzate dal terminale mobile. Il DRNC non esegue le elaborazioni del livello 2 (trasporto) ma instrada in maniera trasparente i dati tra le interfacce Iub e Iur. Un UE può avere nessuno, uno o più DRNC. 5.3 Scenario del sistema Il sistema creato tramite l‟ESB GreenVulcano per configurare e gestire la rete “UTRAN” è un sistema molto complesso ed è stato sviluppato in un team di progetto diviso in tre sezioni. Una sezione si è dedicata allo sviluppo della parte database e store procedures; un‟altra sezione si è dedicata allo sviluppo della web application e della console di interfaccia; infine un'altra sezione, cui il sottoscritto ha fatto parte, si è dedicata alla configurazione dei servizi sull‟ESB. Per il sistema sono stati previsti due database, uno che gestisce le informazioni riguardanti la rete nel suo complesso e uno che gestisce i progetti dei vari utenti e gli elementi di rete da essi manipolati. La console web messa a disposizione dell‟utente espone varie funzionalità di gestione della rete “UTRAN”; tra le principali ci sono tutte le operazioni Albanese Francescantonio, 79117 Pagina 76 riguardanti la configurazione della rete eseguibili da un‟ area di “progetto” che è divisa in varie “action”. Le action sono le funzionalità principali e sono a loro volta divise in “task”. I task sono le operazioni effettive che un utente può fare all‟interno del suo progetto. Esempi di task sono: Creazione e cancellazione di nuovi elementi di rete come Node B, Celle e Configurazione Trasmissiva Creazione e cancellazione di Servizi, Coverage e Adiacenze tra Celle Cambio di parametri di ogni elemento di rete e servizio Rehoming Al fine di sfruttare al meglio le potenzialità dell‟ESB si è scelto di non aggiungere alcuna logica di Business sulla web application, sviluppandola tutta all‟interno di GreenVulcanoESB. L'ESB, avendo anche capacità di orchestrazione dei servizi (e quindi funzionalità di Business Process Management22 (BPM)), può esporre un servizio composto che effettua operazioni (inserimenti, cancellazioni, chiamata a store procedure, etc.) sulle tabelle di tutti i database dei sistemi coinvolti, rendendoli sincronizzati. Grazie alla sua capacità di orchestrazione 22 Il Business Process Management è l’insieme di attività necessarie per definire, ottimizzare, monitorare e integrare i processi aziendali, al fine di creare un processo orientato a rendere efficiente ed efficace il business dell’azienda. Albanese Francescantonio, 79117 Pagina 77 (attraverso il workflow engine di cui ogni ESB è dotato) l'ESB riesce anche a discriminare su quale sistema operare. Le interazioni tra sistemi avviene tramite delle ws-call, che sono un tipo di Virtual Middleware Operation23 che l‟ESB mette a disposizione. Tutta la configurazione dei servizi di GreenVulcanoESB è scritta in file XML; tra i più importanti ci sono: 1. GVCore: contiene tutte le operazioni e l‟ordine con cui devono essere eseguite. In particolare contiene le configurazioni dei servizi, dei sistemi che invocano i servizi, dei plugin e delle trasformazioni XSL utilizzate. 2. GVAdapters: contiene le configurazioni dei vari DataProvider, dei WebServices e dei driver JDBC con i relativi DataSource. 3. GVSupport: contiene le configurazioni dei file di log con i relativi livelli di logging (“info”, “debug”, “error”) per ogni componente, plugin o adapters. 23 Le Virtual Middlware Operation sono le chiamate in uscita dal bus, rappresentano il dialogo verso l’esterno e possono essere sia chiamate a DB_call (per esempio una insert direttamente dal bus senza un servlet container per far girare i web services e quindi senza passaggi intermedi con ws_call), operazioni sul file system o semplici ws call (chiamate a servizio Web). Albanese Francescantonio, 79117 Pagina 78 5.4 Configurazione di GreenVulcanoESB La figura 5.2 mostra la configuration console di GreenVulcanoESB accessibile all‟indirizzo http://localhost:8080/gvconsole24, ovvero, la schermata principale del BUS. Questa console rappresenta l‟interfaccia di configurazione del bus. Da qui, è possibile eseguire le seguenti operazioni: 1. Esportare tutta la configurazione di GreenVulcano 2. Cambiare la configurazione di qualsiasi servizio deployato sull‟ESB 3. Fare operazioni di monitoraggio di servizi, log, RAM busy, etc. 4. Eseguire test di qualsiasi servizio deployato 5. Ricaricare nuove configurazioni Figura 5.2: Schermata principale della console di GreenVulcanaESB 24 http://localhost:8080/gvconsole corrisponde a http://<server>:<port>/gvconsole dove <server> è l’indirizzo IP del server o il nome del server che ospita l’applicazione, in questo caso localhost si riferisce al sistema in uso e <port> è la porta di ascolto del server. Albanese Francescantonio, 79117 Pagina 79 Oltre a poter configurare l‟ESB da console di amministrazione è possibile, come già detto in precedenza, farlo in maniera molto più semplice e intuitiva tramite il plug-in VulCon di Eclipse. La figura 5.3 mostra la schermata generale di VulCon con le sezioni dedicate alla configurazione dei tre file principali dell‟ESB: Core, Adapters e Variables. Figura 5.3: Schermata generale di VulCon Albanese Francescantonio, 79117 Pagina 80 I servizi creati e configurati sull‟ESB per il sistema realizzato, sia tramite plug-in VulCon che tramite console, sono moltissimi. Le operazioni effettuate dai servizi chiamano la loro relativa configurazione che avviene nell‟area dei sistemi (per “sistema” si intende un sistema esterno con il bus comunica per invocare servizi web o operazioni sul database), come si può vedere dalla figura 5.3. In GreenVulcanoESB bisogna dichiarare i sistemi coinvolti nell'espletamento dei vari servizi. Ogni sistema avrà uno o più canali di comunicazione all'interno del quale vengono raggruppate le Virtual Middleware Operation (VMO). Per questo progetto è stato configurato un solo sistema, “DAMA” con due canali di comunicazione, “CHANNEL_LOADER” e “CHANNEL_WEBGUI”. Ora verrà mostrato, come esempio, uno dei workflow più complessi e andremo ad analizzarlo nel dettaglio. Export Project: input: Identificativo del progetto output: OSS file Albanese Francescantonio, 79117 Pagina 81 Figura 5.4: Activity Diagram per il servizio EXPORT_PROJECT La figura 5.4 mostra l‟Activity Diagram UML dal quale si è partiti per la realizzazione del servizio che andremo ora a descrivere. Albanese Francescantonio, 79117 Pagina 82 Figura 5.5: Workflow per il servizio EXPORT_PROJECT Servizio EXPORT_PROJECT: La figura 5.5 mostra la configurazione del servizio EXPORT_PROJECT. Questo servizio è stato realizzato per rendere effettive e permanenti le modifiche effettuate alla rete che l‟utente ha realizzato nella sua area di progetto. In pratica l‟utilizzatore configura le modifiche in “locale”, nel senso che sono visibili solo nella sua area di progetto; poi una volta terminate, grazie a questo servizio, le rende effettive nella rete. Questo perché il servizio genera tutti i file xml che leggerà l‟ “OSS”, creando, cancellando o modificando realmente elementi della rete “UTRAN”. Naturalmente i servizi Albanese Francescantonio, 79117 Pagina 83 dell‟ESB GreenVulcano, unitamente alla configurazione dei database, forniscono ampia garanzia di gestione sicura dei dati condivisi, nel senso che due utenti non possono agire sugli stessi elementi di rete contemporaneamente. Andando più in dettaglio nel workflow vediamo che i nodi rappresentano operazioni diverse effettuate dall‟ESB e ognuna di esse riceve un input rappresentato da un buffer che viaggia all‟interno del bus. Dopo aver elaborato il suo processo, in base al tipo di operazione, ogni nodo restituisce un output, rappresentato sempre da un buffer che può essere anche lo stesso dell‟input, che sarà l‟input dell‟operazione successiva e così via fino alla fine del servizio. Inoltre ci sono alcuni nodi di “check” che servono a controllare il risultato dell‟elaborazione precedente e nel caso effettuare operazioni diverse se si è verificata un‟eccezione. Il servizio EXPORT_PROJECT riceve in input, dalla web gui, l‟identificativo, inteso come chiave primaria del database, del progetto che si vuole esportare. Il primo nodo del flusso, “select_actions”, effettua un‟operazione di “select” sul database tramite il DataHandler; in pratica seleziona tutte le azioni effettuate in quel progetto. Il passo successivo è quello di andare a controllare il risultato dell‟operazione effettuata dal DataHandler tramite il nodo di check, che in caso di eccezione la cattura e ritorna alla WebGui così che l‟utente possa essere a conoscenza di ciò che accade e perché. Come si può vedere dalla figura 5.4 tutti i nodi di check del workflow convergono in un unico nodo, “set_exception_property”; questo nodo è un Albanese Francescantonio, 79117 Pagina 84 nodo del tipo “ChangeGVBuffer” sul quale viene agganciato uno script ognl25 che cattura l‟eccezione e la setta come property del buffer dell‟ESB. Script OGNL: #exc=#environment.get('LAST_GV_EXCEPTION'), #sw=new java.io.StringWriter(), #pw=new java.io.PrintWriter(#sw), #exc.printStackTrace(#pw), #pw.close(), property['EXCEPTION_STACK']=#sw.toString(), object='<root/>' Se il check va a buon fine si passa al nodo “export_for_single_action”. Questo è un nodo particolare, perché è un “IteratorCoreCall”, cioè appunto un nodo che itera in base a un Collection Data Provider e per ogni iterazione effettua una chiamata a un altro servizio, il quale riceverà nel buffer di input una property settata tramite un Object Data Provider. Inoltre è stata settata una “condition” per uscire dall‟iterazione in caso di eccezione. Per comprendere la funzionalità del Collection Data Provider va spiegato che il DataHandler, per effettuare le sue operazioni, riceve i parametri in ingresso e restituisce l‟output in file XML che sono nel seguente formato: 25 L’ Object-Graph Navigation Language (OGNL) è un linguaggio open-source per Java, che, anche utilizzando semplici espressioni, permette di impostare e ottenere property ed eseguire metodi di classi Java. Albanese Francescantonio, 79117 Pagina 85 <RowSet> <data> <row> <col>VALORE</col> … … </row> … … </data> </RowSet> I Data Provider si settano sul file XML di configurazione “GVAdapters” o nella sezione “Adapters” di VulCon come si può vedere dalla figura 5.3. Quindi il nostro Collection Data Provider è stato configurato con l‟applicazione di una espressione xpath26 che naviga nei nodi del file XML di output del DataHandler e seleziona le singole azioni restituite dalla select effettuata. 26 XPath (XML Path Language ) è un linguaggio parte della famiglia XML che permette di individuare i nodi all'interno di un documento XML. Le espressioni XPath, a differenza delle espressioni XML, non servono a identificare la struttura di un documento, bensì a localizzarne con precisione i nodi. Albanese Francescantonio, 79117 Pagina 86 Collection Data Provider XPATH Expression: /RowSet/data/row/col/text() L‟Object Data Provider che setta la property del buffer è stato, invece, configurato con un‟espressione ognl. Object Data Provider OGNL Expression: property['ACTION_ID']=object.nodeValue Una volta che finiscono le iterazioni e le elaborazioni dei servizi chiamati (che vedremo più avanti), viene controllato il tutto da un altro nodo di check e, se tutto è andato a buon fine, viene elaborato il nodo “create_zip_file”. Questo nodo è sempre un nodo del tipo ChangeGVBuffer al quale viene applicata un‟espressione ognl che crea un file ZIP contenente tutti i file ZIP restituiti dal servizio EXPORT_ACTION. Script OGNL: #[email protected]@createTempFile('DAMA_PRJ','.zip'), property['ZIP_PRJ_FILE_NAME']=#tempFile.getCanonicalPath(), #outStream=new java.io.FileOutputStream(#tempFile,true), #zos=new java.util.zip.ZipOutputStream(#outStream), object.{ (#this instanceof java.lang.String) && ( Albanese Francescantonio, 79117 Pagina 87 #fileName=#this, #inStream=new java.io.FileInputStream(#fileName), #byteArray=new byte[2048], #zipEntry= new java.util.zip.ZipEntry(#fileName.substring(#fileName.lastIndexOf('/'))), #zos.putNextEntry(#zipEntry), #loop = :[#this>-1 && (#zos.write(#byteArray,0,#this), #loop(#inStream.read(#byteArray)))], #loop(#inStream.read(#byteArray)), #zos.closeEntry(), new java.io.File(#fileName).delete() ) }, #zos.close(), #outStream.close() Dopo aver creato il file ZIP e controllato che tutto sia andato a buon fine, viene invocata l‟operazione di lettura del file nel nodo “read_zip_file”, che utilizza l‟operazione “filereader” sempre definita nel canale CHANNEL_WEBGUI del sistema DAMA. Dopodiché, se tutto è andato bene, si passa al nodo “prepare_for_dh”, che è un nodo ChangeGVBuffer che, tramite espressione ognl, costruisce il file XML da dare in input al DataHandler. Albanese Francescantonio, 79117 Pagina 88 Script OGNL: property['ZIP_PRJ_FILE_DELETED']=new java.io.File(property['ZIP_PRJ_FILE_NAME']).delete(), property['DH_SERVICE_NAME']='DAMA::EXPORT_PROJECT_SAVE_ZIP', #prjID=property['PRJ_ID'], #[email protected]@encodeBase64S tring(object), #xmlString = "<RowSet><data><row id='1'></row><row id='2'/><row id='3'/></data></RowSet>", #[email protected]@parseDOM_S(#xmlString), #docEl=#root.documentElement, #data=#docEl.getFirstChild(), #row=#data.getFirstChild(), #col=#root.createElement('col'), #col.appendChild(#root.createTextNode(#prjID)), #row.appendChild(#col), #col=#root.createElement('col'), #col.setAttribute('type', 'base64'), #col.appendChild(#root.createTextNode(#stringEncode)), #row.appendChild(#col), #col=#root.createElement('col'), Albanese Francescantonio, 79117 Pagina 89 #col.appendChild(#root.createTextNode('export_' + #prjID + '.zip')), #row.appendChild(#col), object=#root Se tutto è andato a buon fine si passa al nodo “save_attachment”, che effettua il salvataggio del file ZIP sul database tramite il DataHandler. Infatti il DataHandler può effettuare qualsiasi tipo di operazione sul database e nel caso in questione effettua una chiamata a una “store procedure” passandogli i parmetri in ingresso che abbiamo definito nell‟XML di input. Alla fine, se anche l‟operazione di salvataggio è andata a buon fine, si passa al nodo “call_check_result”, che è un nodo del tipo “CoreCall”, cioè che effettua una chiamata singola a un altro servizio. Vediamo ora questo servizio che è un servizio generico richiamato anche dal nodo che setta la property di eccezione e da altri servizi del sistema realizzato. Albanese Francescantonio, 79117 Pagina 90 Servizio CHECK_RESULT: Figura 5.5: Workflow per il servizio CHECK_RESULT Questo servizio è stato implementato per generare un XML che verrà restituito alla WebGui, la quale ne legge alcune property e, a seconda del loro valore, all‟utente verrà mostrato un messaggio di esito positivo o negativo dell‟export. In caso di esito negativo, poiché tutto il flusso EXPORT PROJECTS è in un‟unica transazione, avverrà una “RollBack” totale che permetterà all‟utente di mantenere l‟integrità dei dati sul DataBase, come erano prima dell‟invocazione del servizio. Andiamo ad analizzarlo nel dettaglio: Albanese Francescantonio, 79117 Pagina 91 il primo nodo è un nodo di check come abbiamo già visto nel servizio precedente, solo che in questo caso, oltre a gestire i due casi di default ed eccezione, gestisce anche un ulteriore caso di routing. Per effettuare ciò è stata settata una condition, agganciata alla freccia di connessione del nodo di check, che verifica se la property del buffer “EXCEPTION_STACK” è valorizzata con l‟eccezione o meno. In caso di verifica positiva della condition si passa al nodo “operation_error” che è un nodo ChangeGVBuffer sul quale è agganciata una Trasformazione XSL27 che crea l‟XML di output nel caso si sia verifica un‟eccezione. In caso che la condition non si verifichi il nodo di check intraprende l‟opzione di default e passa al nodo ChangeGVBuffer “operation_correct”, che sempre grazie a una Trasformazione XSL crea l‟XML di output di successo dell‟operazione. Torniamo ora al servizio EXPORT_PROJECT e andiamo ad analizzare il servizio chiamato da quest‟ultimo, cioè EXPORT_ACTION. Servizio EXPORT_ACTION: input: Identificativo dell‟action 27 L'XSLT (eXtensible Stylesheet Language Transformations) è il linguaggio di trasformazione dell’XML; deriva direttamente dal linguaggio XSL, infatti i file di questo formato sono essenzialmente file di testo, contengono elementi ed attributi ed hanno l'estensione ".xsl". L'XSLT è diventato uno standard web con una direttiva (Recommendation) W3C del 16 Novembre 1999. L'obiettivo principale per cui l'XSLT è stato creato è rendere possibile la trasformazione di un documento XML in un altro documento anche XML. Albanese Francescantonio, 79117 Pagina 92 output: File .ZIP Figura 5.6: Activity Diagram per il servizio EXPORT_ACTION La figura 5.6 mostra l‟Activity Diagram dal quale si è partiti per la realizzazione del servizio Export Action che ora vedremo. Albanese Francescantonio, 79117 Pagina 93 Figura 5.7: Workflow per il servizio EXPORT_ACTION Questo servizio riceve in input l‟identificativo della action, passatogli dal servizio chiamante tramite property del buffer. Il primo nodo “select_tasks” effettua una select sul database tramite DataHandler e recupera tutti i task con i relativi task_type effettuati da quella action. Una volta fatto ciò e controllato che l‟operazione è andata a buon fine si passa a un altro nodo del tipo IteratorCoreCall come visto per il servizio EXPORT_PROJECT, il quale è sempre configurato con un Collection Data Provider e un Object Data Provider. Albanese Francescantonio, 79117 Pagina 94 Collection Data Provider XPATH Expression: /RowSet/data/row Object Data Provider OGNL Expression: property['TASK_ID'][email protected]@get_S(object, 'col[1]/text()'), property['TASK_TYPE_ID'][email protected]@get_S(object, 'col[2]/text()') Il risultato dell‟elaborazione del servizio chiamato viene controllato da un nodo di check e passato al nodo ChangeGVBuffer “array_to_xml”, il quale trasforma ciò che gli arriva nel buffer in input che è un array in un file XML e setta una property booleana in base a se ci sono o meno dati da esportare, il tutto tramite uno script ognl. Script OGNL: #[email protected]@parseDOM_S("<root/>"), #docEl=#root.documentElement, #exportDataExists = 'false', object.{ #this.{ #this.{ Albanese Francescantonio, 79117 Pagina 95 #currentNode = (#this instanceof org.w3c.dom.Document ? #this.documentElement : #this), #newNode = #root.importNode(#currentNode, true), #docEl.appendChild(#newNode), #exportDataExists = 'true' } } }, property['EXPORT_DATA_EXISTS'] = #exportDataExists, [email protected]@serializeDOMToByteArray_S(#roo t) In seguito si passa a un nodo di check che effettua routing su tre diverse possibilità; infatti, oltre al solito discorso sull‟eccezione, il nodo prevede una condition in base alla property booleana settata nel nodo precedente. Se questa property è „false‟ il flusso termina, altrimenti continua e si passa al nodo “map”. Questo nodo è un ChangeGVBuffer al quale è agganciata una Trasformazione XSL che realizza una fusione di tutti i frammenti di EXPORT XML. Infine si passa al nodo “create_zip_file” che realizza un file ZIP dei file XML creati tramite script ognl. Script OGNL: #[email protected]@createTempFile('DAMA','.zip'), Albanese Francescantonio, 79117 Pagina 96 property['ZIP_FILE_NAME']=#tempFile.getCanonicalPath(), #outStream=new java.io.FileOutputStream(#tempFile,true), #zos=new java.util.zip.ZipOutputStream(#outStream), #[email protected]@getParserInstance(), #index=1, #nlDEL=#xml.selectNodeList(object, "/root/lock[modifier='delete']"), #nlDEL==null || ( #loop = :[ #this<#nlDEL.length && ( #byteArray=#xml.serializeDOMToByteArray(#nlDEL.item(#this)), #zipEntry= new java.util.zip.ZipEntry(#index + '_' + 'DELETECONFIG' + '.xml'), #zos.putNextEntry(#zipEntry), #zos.write(#byteArray,0,#byteArray.length), #zos.closeEntry(), #index=#index +1, #loop(#this+1) )], #loop(0) ), #nlRNC=#xml.selectNodeList(object, '/root/cnf:bulkCmConfigDataFile'), #loop = :[ #this<#nlRNC.length && ( #byteArray=#xml.serializeDOMToByteArray(#nlRNC.item(#this)), #RNCName=#xml.get(#nlRNC.item(#this),'*/*/*/*/@id'), Albanese Francescantonio, 79117 Pagina 97 #zipEntry= new java.util.zip.ZipEntry(#index + '_' + #RNCName + '_' + @java.lang.System@currentTimeMillis() + '.xml'), #zos.putNextEntry(#zipEntry), #zos.write(#byteArray,0,#byteArray.length), #zos.closeEntry(), #index=#index +1, #loop(#this+1) )], #loop(0), #nlCREATE=#xml.selectNodeList(object, "/root/lock[modifier='create']"), #nlCREATE==null || ( #loop = :[ #this<#nlCREATE.length && ( #byteArray=#xml.serializeDOMToByteArray(#nlCREATE.item(#this)), #zipEntry= new java.util.zip.ZipEntry(#index + '_' + 'CREATECONFIG' + '.xml'), #zos.putNextEntry(#zipEntry), #zos.write(#byteArray,0,#byteArray.length), #zos.closeEntry(), #index=#index +1, #loop(#this+1) )], #loop(0) ), #zos.close(), #outStream.close(), Albanese Francescantonio, 79117 Pagina 98 @it.greenvulcano.util.xml.XMLUtils@releaseParserInstance(#xml), object=property['ZIP_FILE_NAME'] Passiamo ora a descrivere il servizio chiamato da EXPORT_ACTION e cioè EXPORT_SINGLE_TASK. Servizio EXPORT_SINGLE_TASK: Figura 5.7: Activity Diagram per il servizio EXPORT_SINGLE_TASK Albanese Francescantonio, 79117 Pagina 99 La figura 5.7 mostra il semplice Activity Diagram dal quale si è partiti per la realizzazione del servizio. Figura 5.8: Workflow per il servizio EXPORT_SINGLE_TASK Questo semplice servizio riceve in input le property settate nel buffer dal servizio chiamante e nel primo nodo realizza una select sul database per recuperare alcune informazioni utili. In seguito si passa al nodo “export_for_single_entity” che è un altro nodo del tipo IteratorCoreCall che Albanese Francescantonio, 79117 Pagina 100 chiama un altro servizio sempre utilizzando un Collection Data Provider e un Object Data Provider. Collection Data Provider XPATH Expression: /RowSet/data Object Data Provider OGNL Expression: property['DB_ENTITY_TYPE_ID'][email protected]@get_S(o bject, '@key_1'), property['EXTRA_PARAM_ID'][email protected]@get_S(obj ect, '@key_2'), #extraParam=property['EXTRA_PARAM_ID'], property['DH_SERVICE_NAME']='DAMA::EXPORT_'+property['TASK_TYPE_ID' ]+'_'+property['DB_ENTITY_TYPE_ID']+(#extraParam=='' ? '' : '_' + #extraParam), object In particolare l‟Object Data Provider setta una property molto interessante, che è “DH_SERVICE_NAME”. Infatti il DataHandler decide quale configurazione applicare in base a questa property se è settata, altrimenti in base a uno standard: NOME_SERVIZIO::NOME_SISTEMA. Albanese Francescantonio, 79117 Pagina 101 Vediamo ora il servizio chiamato dal servizio appena descritto. Servizio EXPORT_SINGLE_ENTITY: input: Elementi coinvolti nell‟action output: Frammento XML Figura 5.9: Activity Diagram per il servizio EXPORT_SINGLE_ENTITY Albanese Francescantonio, 79117 Pagina 102 Figura 5.10: Workflow del servizio EXPORT_SINGLE_ENTITY Questo servizio viene chiamato per ogni entità coinvolta nell‟action. Per ogni elemento coinvolto esso crea un frammento di XML; tale frammento farà parte dell‟export dei file di output. EXPORT_SINGLE_ENTITY riceve in input gli elementi selezionati nel servizio chiamante e, in base a questi, e alla property “DH_SERVICE_NAME” realizza una query sul database differente tramite il DataHandler. In seguito, dopo aver controllato che l‟operazione è andata a buon fine, si passa al nodo ChangeGVBuffer “choose_export_map”, il quale applica una Trasformazione XSL al file XML restituito dalla chiamata Albanese Francescantonio, 79117 Pagina 103 al DataHandler. Questa trasformazione realizza un altro file XML che contiene il nome o i nomi delle trasformazioni successive da chiamare e i dati estrapolati dal database. Infine, se tutto è andato a buon fine, si passa al nodo “create_export_fragment”, un altro nodo di tipo IteratorCoreCall che però questa volta è configurato solo con il Collection Data Provider. Collection Data Provider XPATH Expression: /OssMaps/map Andiamo ora ad analizzare l‟ultimo servizio della serie chiamato. Servizio EXPORT_SINGLE_OSS: Figura 5.9: Workflow del servizio EXPORT_SINGLE_OSS Albanese Francescantonio, 79117 Pagina 104 Questo semplice servizio riceve in input il file XML generato dal servizio chiamante e il nodo ChangeGVBuffer “create_export_fragment” applica la Trasformazione XSL corretta. Infatti essendo tutto molto dinamico la trasformazione corretta da applicare viene definita dal nome che abbiamo settato nel servizio chiamante, il quale viene letto tramite uno script ognl. Script OGNL: ognl{{@it.greenvulcano.util.xml.XMLUtils@get_S(object, '@call-map')}} dove “@call-map” è l‟attributo del tag “map” che contiene il nome della trasformazione. Albanese Francescantonio, 79117 Pagina 105 Testing Terminata la fase di analisi, e sviluppo si è passati ai test di unità (Unit Test). Lo “unit testing” è una procedura usata per verificare singole parti di un codice sorgente. Lo scopo dello unit testing è quello di verificare il corretto funzionamento di parti di programma permettendo così una precoce individuazione dei bug e degli errori. Uno unit testing accurato può dare una prova certa se un pezzo di codice funziona correttamente, con importanti vantaggi: Semplifica le modifiche Lo unit testing facilita la modifica del codice del modulo in momenti successivi (“refactoring”) con la sicurezza che il modulo continuerà a funzionare correttamente. Il procedimento consiste nello scrivere test case per tutte le funzioni e i metodi, in modo che se una modifica produce un fallimento del test, si possa facilmente individuare la modifica responsabile. Albanese Francescantonio, 79117 Pagina 106 Unit test già predisposti semplificano la vita al programmatore nel controllare che una porzione di codice stia ancora funzionando correttamente. Un buon unit testing produce test case che coprono tutti i percorsi del codice dell'unità, con particolare attenzione alle condizioni nei cicli (test sugli “if”, “while”, “for”). In sistemi con unit testing continuo, tali test sono in grado di garantire l'automatica integrità del codice ad ogni modifica. Semplifica l'integrazione Lo unit testing semplifica l'integrazione di moduli diversi perché limita i malfunzionamenti dovuti a problemi nell'interazione tra i moduli e non nei moduli stessi, rendendo i test di integrazione più semplici. Un argomento molto dibattuto è quello della non necessità di test di integrazione manuali, in caso si sia organizzata una procedura di unit testing sufficientemente completa. In realtà spesso un elaborato sistema di unit testing fornisce una falsa sicurezza e un test di integrazione gestito da esseri umani è in genere ugualmente necessario. Probabilmente la reale necessità del fattore umano nella procedura di test dipende dalle caratteristiche del sistema nel quale si sviluppa e soprattutto dalla disponibilità di risorse. Albanese Francescantonio, 79117 Pagina 107 Supporta la documentazione Lo unit testing fornisce una documentazione "viva" del codice, perché è intrinsecamente un esempio di utilizzo dell'API del modulo. I test case incorporano le caratteristiche critiche per il successo di un'unità di codice. Tali caratteristiche indicano l'uso appropriato dell'unità e i comportamenti errati che devono essere identificati nel suo funzionamento. Pertanto lo unit testing documenta tali caratteristiche, sebbene in molti ambienti questi non possono costituire la sola documentazione necessaria. In compenso, la tradizionale documentazione diventa spesso obsoleta a causa di successive modifiche del codice non documentate. Separazione dell'interfaccia dall'implementazione Poiché alcune classi possono far riferimento ad altre, il test di una classe spesso si propaga alle altre. Un esempio è una classe che interagisce con un database: testare la classe spesso implica la scrittura del codice che interagisce con il database. Questo è un problema perché lo unit test non dovrebbe mai varcare i confini della classe. La conseguenza è che il programmatore, nel progettare lo unit testing, impara ad isolare la classe da analizzare, individuando l'interfaccia con il database ed implementandola con un “mock object”, Albanese Francescantonio, 79117 Pagina 108 una simulazione dell'oggetto reale che può essere effettuata in condizioni controllate. L'effetto è un test più approfondito e quindi uno unit testing di qualità più elevata. Limitazioni dello unit testing In generale il testing non riesce ad identificare tutti gli errori in un programma e lo stesso vale per lo unit testing che, analizzando per definizione le singole unità, non può identificare gli errori di integrazione, problemi legati alla performance e altri problemi legati al sistema in generale. Lo unit testing è più efficace se utilizzato in congiunzione con altre tecniche di testing del software. Come ogni forma di testing, anche lo unit testing non può individuare l'assenza di errori ma può solo evidenziarne la presenza. Il testing del software è un problema di matematica combinatoria. Per esempio, ogni test booleano richiede almeno due test, uno per la condizione di "true" e uno per quella di "false". Si può dimostrare che, per ogni linea di codice funzionale, siano necessarie dalla 3 alle 5 linee di codice per il test. È quindi irrealistico testare tutte le possibili combinazioni di input di qualsiasi codice non banale senza un tool apposito di generazione di casi di test. Albanese Francescantonio, 79117 Pagina 109 Per ottenere gli sperati benefici dallo unit test, è richiesto un rigoroso senso di disciplina durante tutto il processo di sviluppo. È essenziale mantenere traccia non solo dei test che sono stati sviluppati ed eseguiti, ma anche di tutte le modifiche effettuate al codice funzionale dell'unità in esame e di tutte le altre. L'uso di un sistema di controllo di versione è essenziale. Se una versione successiva di una unità fallisce un test che aveva passato in precedenza, il sistema di controllo di versione permette di evidenziare le modifiche al codice intervenute nel frattempo. Per eseguire lo unit test si è utilizzato il framework JUnit28. Di seguito la configurazione junit del servizio Export_Project 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. package it.greenvulcano.dama.tests; import static org.junit.Assert.fail; import it.greenvulcano.gvesb.buffer.GVBuffer; import it.greenvulcano.gvesb.core.ejb.J2EEGreenVulcano; import it.greenvulcano.gvesb.core.ejb.J2EEGreenVulcanoHome; import it.greenvulcano.util.xml.XMLUtils; import java.io.File; import javax.naming.Context; import javax.naming.InitialContext; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; public class Test { private static J2EEGreenVulcano greenVulcano; 28 JUnit è un unit test framework per il linguaggio di programmazione Java, che ha segnato l’inizio dell’evoluzione dell’idea di sviluppo guidato da test (test-driven development). Albanese Francescantonio, 79117 Pagina 110 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. @test public static startExportProject(String args[]){ try{ GVBuffer input = new GVBuffer("DAMA", "EXPORT_PROJECT"); File file = new File("..\\..\\TestApply.xml"); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(file); input.setObject(XMLUtils.serializeDOMToByteArray_S(doc)); GVBuffer result = executeService(input); if(result.getRetCode()!= 1) fail("APPLY_PROJECT execute with error"); }catch(Exception e){ e.printStackTrace(); } } /* ExecuteService chiama il servizio EXPORT_PROJECT /* protected static GVBuffer executeService(GVBuffer input) throws Exception{ GVBuffer response = getGreenVulcano().requestReply(input); XMLUtils xml = XMLUtils.getParserInstance(); String retCode = "-1"; try { Object object = response.getObject(); if (object instanceof Node) { Node node = (Node) object; retCode = xml.get(node, "/response/retCode", "-1"); } else { retCode = "1"; } } finally { XMLUtils.releaseParserInstance(xml); } boolean ret = "1".equals(retCode); response.setRetCode(Integer.parseInt(retCode)); return response; } Albanese Francescantonio, 79117 Pagina 111 75. /* Questo metodo, che serve per prendersi il riferimento dell’EJB dall’albero JNDI dell’application server, è stato creato come un Singleton in modo di avere un’unica istanza della classe J2EEGreenVulcano /* 76. 77. private static synchronized J2EEGreenVulcano getGreenVulcano() throws Exception{ 78. 79. if (greenVulcano == null) { 80. Context initialContext = new InitialContext(); 81. J2EEGreenVulcanoHome home = (J2EEGreenVulcanoHome) initialContext.lookup("gvesb/core/GreenVulcano"); 82. greenVulcano = home.create(); 83. } 84. return greenVulcano; 85. } 86. 87. } 88. Il metodo Junit startExportProject legge il file TestApply.xml dal file system, lo parsa, e lo setta nel buffer di GreenVulcanoESB. La riga “GVBuffer result = executeService(input);” invoca il servizio sull‟ESB. Se L‟ESB ritorna con “retCode” uguale a 1 l‟esecuzione del servizio è in “success” altrimenti va in “failure”. L‟esempio riportato non rispetta del tutto lo standard Unit test, infatti lo standard richiederebbe di scrivere singoli unit test per tutte le singole procedure che compongono il servizio. Per ragioni di tempo si è scelto di fare un singolo Unit Test per l‟intero Servizio di Export. Albanese Francescantonio, 79117 Pagina 112 File TestApply.xml <response> <actions> <id>975</id> <configRBS>false</configRBS> <rnc> <numberFile>0</numberFile> <rncId>53246</rncId> <rncName>111</rncName> </rnc> <ran>false</ran> <cn>false</cn> <TN>false</TN> <actionname>Add node</actionname> </actions> </response> Albanese Francescantonio, 79117 Pagina 113 Conclusioni Nello svolgimento di questa tesi è stata presentata una possibile applicazione dell‟Enterprise Service Bus e sono state messe in risalto solo alcune delle funzionalità di questo strumento quali la composizione di servizi, il routing intelligente dei messaggi e la trasformazione dei dati, ma ce ne sono tante altre e tutte molto utili nel campo dell‟integrazione applicativa. L‟ESB è un concetto di tecnologia aperta basata su standard che stanno rivoluzionando l‟informatica. L‟ESB emergerà come backbone dell‟infrastruttura distribuita all‟interno dell‟azienda informatica, poiché, oltre a consentire il mantenimento e l‟implementazione dei sistemi business-critical in uso, permetterà all‟utente di introdurre nuove applicazioni in funzione delle proprie necessità. Credo che l‟integrazione applicativa sia uno dei principali fattori di innovazione dell‟industria software e che l‟ESB abbia trasformato il mondo dell‟integrazione con una soluzione basata su standard che riduce i costi, impedisce qualsiasi vincolo nei confronti di un singolo fornitore, assicura flessibilità e scalabilità. Albanese Francescantonio, 79117 Pagina 114 Bibliografia 1. David A. Chappel, “Enterprise Service Bus”, O'Reilly, 2004 2. Mike Gilpin, Vice President e Research Director, “What Is An Enterprise Service Bus?”, 2004 3. Roy Schulte, Presentazione: “The Future of Application Integration”, Gartner, 2004 4. Nicolai M. Josuttis, “SOA in Practice – The Art of Distributed System Design”, O'Reilly, 2007 5. MokaByte: Articoli. On line at: http://www.mokabyte.it/ 6. MokaByte: Service-Oriented Architecture. On line at: http://www.mokabyte.it/2004/09/soa.htm 7. W3C: Web Services Architecture. On line at: http://www.w3.org/TR/wsarch 8. W3C: Web Services Architecture Requirements. On line at: http://www.w3.org/TR/wsa-reqs 9. Web Services e Service-Oriented Architecture: Documentazione. On line at: http://www.service-architecture.com 10. Web Service Description Language: Documentazione. On line at: http://www.w3.org/TR/wsdl Albanese Francescantonio, 79117 Pagina 115 11. eXtensible Markup Language: Documentazione. On line at: http://www.xml.com 12. UDDI: Documentazione. On line at: http://www.uddi.org 13. SUN: Java. On line at: http://java.sun.com 14. Apache Axis: Sito ufficiale. On line at: http://ws.apache.org/axis/ 15. Simple Object Access Protocol: Documentazione. On line at: http://www.w3.org/TR/soap 16. S. Davis, T. Marrs, “JBoss at work: A Pratical Guide”, O‟Reilly, 2005 17. JBoss: Sito ufficiale. On line at: http://www.jboss.org 18. Eclipse: Sito ufficiale. On line at: http://www.eclipse.org 19. The Java Web Services Tutorial. Sun Microsystems, 2003 20. Italian Wikipedia. On line at: http://it.wikipedia.org/wiki/Pagina_principale Albanese Francescantonio, 79117 Pagina 116