Java e .NET Web Services Interoperability su Windows Azure
Nei mesi scorsi con un gruppo di lavoro del Prof. Carlo Maria Medaglia del CATTID (LaSapienza) abbiamo lavorato congiuntamente ad un laboratorio di interoperabilità tra Web Services con Java e .NET sfruttando Windows Azure come piattaforma per il deployment dei servizi (sia Java che .NET).
Il team del progetto, lato CATTID, è composto da Fabio Lombardi (DEV), Alessandro Marrone(DEV) e Andrea Ingrosso (PM).
In questo post Fabio, Alessandro ed Andrea illustrano passo passo la creazione di web services con JAVA, Tomcat e AXIS2 interoperabili con .NET e il successivo deployment su Windows Azure con Tomcat.
Prossimamente verrà pubblicato l’aggiornamento alle novità introdotte dal nuovo Windows Azure SDK 1.6 lato JAVA.
Introduzione
Per utilizzare gli script che stiamo andando ad elencare ed analizzare è necessario avere installato:
· Windows Azure SDK 1.4 (o superiore)
· Eclipse IDE for Java EE Developers
· Apache Tomcat Binary
· Apache Axis 2 Binary
Per comprendere come utilizzare Eclipse con Windows Azure e capire come portare Tomcat sul Cloud potete leggere la seguente guida:
Deploying a Java application to Windows Azure with Eclipse
Apprese le nozioni principali possiamo vedere come realizzare un semplice web service che offre un servizio di infomobilità:
Figura 1: Pila Software
Cos’è Axis2
Apache Axis2 è un'implementazione Java sia lato client che server del paradigma Web Service. Fornisce un'architettura modulare che rende semplice l'aggiunta di funzionalità ed il supporto di nuove specifiche per i web service.
Permette:
- l'invio di messaggi SOAP
- la ricezione ed il processamento di messaggi SOAP
- la creazione di classi sia per il server che per il client attraverso WSDL
- il recupero del WSDL di un servizio
- la creazione e l'utilizzo di Web service REST
- la creazione e l'utilizzo di web service che implementano le specifiche WS-Security, WS- ReliableMessaging, WS-Addressing, WS-Coordination e WS-Atomic Transaction
Creazione di un web service
Vediamo come creare un web service con Axis2 e portarlo sulla nuvola.
Creare con Eclipse un Dynamic Web Project da File → New → Other → Web → Dynamic Web Project (Fig.2).
Figura 2
Dalla sezione Configuration (Fig.3) clicchiamo su Modify. Impostiamo la versione del Dynamic web module alla 2.5 e selezioniamo Axis2 Web Services:
Figura 3
Creaiamo una cartella di nome WSDL nella root del progetto ed importare i file MobilityMessages.xsd e MobilityService.wsdl(Fig.4) scaricabili dai seguenti link:
https://devlab.devleap.it/MISM/MobilityService.wsdl
https://devlab.devleap.it/MISM/MobilityMessages.xsd
Figura 4
Se non è presente l'auto build, compilare il progetto.
Creiamo il Web Service (Fig. 5), selezionando il file MobilityService.wsdl, File → New → Other → Web Services → Web Service.
Figura 5
Portando la barra di scorrimento fino al livello Test Service possiamo testare il servizio creato con il tool Web Services Explorer (Fig. 6).
Figura 6
Assicurarsi che:
- Il server runtime selezionato sia Tomcat v7.0 Server,
- Come Web Service runtime sia selezionato Apache Axis2,
- Come Service project sia selezionato Axis2WSTest.
A questo punto sono state generate tutte le classi necessarie per mettere in piedi un semplice servizio di infomobilità. Nel package mobi.mism.schemas.messages.mobility, troviamo tutte le classi per i modelli dei dati e per gestire le risposte e le richieste al web service.
Nel package mobi.mism.services.mobilityservice contiene la classe MobilityServiceSkeleton che definisce gli endpoint del servizio (Fig. 7).
Figura 7
Per completare il web service dobbiamo finire di implementare gli endpoint. Di seguito una semplice implementazione:
|
|
|
Compiliamo e testiamo il progetto con il tool Web Services Explorer (Fig. 8).
Figura 8
Creare il progetto Cloud
Nella guida Deploying a Java application to Windows Azure with Eclipse abbiamo visto come creare un progetto per Windows Azure con Apache Tomcat.
Ora vedremo gli ultimi passi per importare anche il nostro progetto con axis2 sul cloud.
- Esportare il progetto come Axis2WSTest.war.
- Creare un progetto Cloud , Axis2_on_Cloud, da File New->OtheràWindows Azure Projectà Windows Azure Project (Fig. 9)
Figura 9
Copiare una versione di Tomcat, Jre e Axis2WSTest.war nella cartella approot del progetto (Fig. 10).
Figura 10
Modificare il file util\startup.cmd come segue in modo da copiare le cartelle di Tomcat e JRE ed avviarli.
|
A questo punto non resta che compilare il progetto e effettuare l’upload sulla piattaforma AZURE.
Deployment del servizio sul cloud
Se si è in possesso di un account Windows Azure, è possibile ospitare la soluzione appena implementata sul cloud. Per conoscere come testare gratuitamente il web service potete leggere 7 modi per usare o provare Windows Azure GRATIS.
Prima di tutto è necessario effettuare una modifica nel file Axis2_on_Cloud à WorkerRole1 à package.xml.
<windowsazurepackage configurationfilename="ServiceConfiguration.cscfg"
definitionfilename="ServiceDefinition.csdef" packagedir="${wapackagedir}"
packagefilename="WindowsAzurePackage.cspkg" packagetype="cloud"
projectdir="${basedir}" sdkdir="${wasdkdir}">
Si deve sostituire il valore dell’attributo packagetype, local, dell’elemento windowsazurepackage con il valore cloud, in modo tale che il package generato sarà ospitabile dal cloud invece che essere eseguito nell’ambiente di simulazione di Windows Azure (development fabric).
Successivamente si deve creare un nuovo “Hosted Service” cliccando appunto su Nuovo servizio ospitato nella home page del portale (Fig. 11).
Figura 11
Come in figura inseriamo il nome del servizio, Url, la regione, il nome della distribuzione e il percorso del pacchetto di deployment.
Il pacchetto che è stato generato dal build della soluzione Eclipse con le modifiche sopra descritte, Axis2_on_Cloud –> deploy –> WindowsAzurePackage.cspkg, ed il file di configurazione Axis2_on_Cloud –> deploy –>ServiceConfiguration.cscfg
Creazione di un web service client on-premises
Creiamo un client che chiama il web service ospitato sul cloud, File → New → Other → Web Services → Web Service Client (Fig. 12):
Figura 12
Portiamo la barra di scorrimento fino al livello Test Service e assicurarsi che come (Fig. 13):
- Server runtime sia selezionato Tomcat v7.0 Server,
- Web Service runtime sia selezionato Apache Axis2
Figura 13
Clicchiamo sul link Client Project nel box Configuration e inserisci come nome del progetto Axis2WSTestClient (Fig. 14):
Figura 14
Clicchiamo su OK e Finish. Verrà generato il package mobi.mism.services.mobilityservice che contiene le classi necessarie per far comunicare il nostro client con il web service (Fig. 15).
Figura 15
Non ci resta che implementare il client:
Creiamo il file WebContent\index.html ed inseriamo la seguente form:
|
Creiamo il file WebContent\lineDelay.jsp, che contiene la logica per dialogare con il web service:
|
MobilityServiceStub(url-servizio); l’url del servizio può essere recuperato da home_axis2àServices (Fig. 16)
Figura 16
Similmente possono essere implementati gli altri due servizi (Fig. 17/18).
Figura 17
Figura 18
Fabio, Alessandro, Andrea