|
Vero progresso quando i vantaggi di una nuova tecnologia diventano per tutti
|
|
| Home Page |
|
| Articoli |
|
| News |
|
| Forum |
|
| Classi |
|
|
|
|
|
WebSphere System Integration Bus (SIB) e i Web Services
By
Gabriele A. Rigamonti
6 febbraio 2008
|
 |
|
Nello scorso articolo ci siamo occupati del System Integration Bus Integration Bus di IBM WebSphere. Lo scopo di questo articolo e' di analizzare da vicino un 'altro aspetto di WebSphere Application Server, ovvero come dotare il System Integration Bus (SIB) della possibilità di interagire con i web services, ottenendo fondamentalmente due vantaggi: in primo luogo disaccopiare l'endpoint del servizio web , ovvero fare in modo che il bus si comporti come un proxy SOAP e non di meno sfruttare le potenzialità di mediazione e routing del bus. Nell’esempio che utilizzeremo lavoreremo su la versione 6.1 dell' application server (in questo articolo è stata utilizzata la versione Linux) scaricabile in versione trial.
|
|
|
La configurazione dell’ Application Server
|
top
|
Il primo passo è l'installazione, mediante uno scritp di sistema, dell’ applicazione per la gestione dello SDO (System Data Object ) repository all’ interno del quale vengono memorizzate le definizioni dei WSDL che definiscono i vari servizi.
./wsadmin.sh -f /opt/IBM/WebSphere/AppServer/bin/installSdoRepository.jacl <nodo> <server> -createDb
/opt/IBM/WebSphere/Appserver rappresenta la directory home nella quale è installato l'application server e che quindi può cambiare in funzione del sistema operativo e della scelta effettuata durante l'installazione.
Se l'installazione è avvenuta correttamente dalla console di gestione vedremo avviata un' applicazione dal nome : SDO Repository.
Per dotare il bus della capacità di interagire con i web services è necessario configurarlo mediante un resource adapter tramite il seguente script:
./wsadmin.sh -f /opt/IBM/WebSphere/AppServer/util/sibwsInstall.jacl INSTALL_RA -installRoot "/opt/IBM/WebSphere/AppServer" -nodeName <nodo>
Quello che ci rimane da fare ora è l'installazione degli endpoint listeners che permettono al bus di 'ascoltare' le richieste in arrivo dai web services.
Esistono diversi endpoint listeners a seconda del protocollo di trasporto che viene utilizzato. Nel nostro caso installeremo solamente l'endpoint per il trasporto HTTP.
./wsadmin.sh -f /opt/IBM/WebSphere/AppServer/util/sibwsInstall.jacl INSTALL_HTTP -installRoot "/opt/IBM/WebSphere/AppServer" -serverName <server> -nodeName <nodo>
(Nota: sostituire <nodo> e <server> con i valori della propria configurazione)
|
|
Outbound Service
|
top
|
Un servizio tipo Outbound rappresenta nel bus un servizio esterno richiamabile mediante protocollo SOAP. I protocolli supportati dal bus per quanto riguarda i servizi di tipo Outbound sono:
- SOAP/JMS
- SOAP/HTTP
- RMO/IIOP su un EJB
In passi:
- Il messaggio SOAP viene indirizzato alla Service Destination
- la service Destination ruota il messaggio verso la porta
- la porta consegna il messaggio SOAP al 'bus invoker'
- l' invoker della porta trasmette il messaggio SOAP verso il web service endpoint specificato all'interno del WSDL

Figura 1 : Outbound service
|
|
Inbound
|
top
|
Il servizio di tipo Inbound permette al bus di accettare un messaggio SOAP ed analogamente al Outbound e' possibile definire dei listeners per specifici protocolli (nel nostro caso utilizzeremo HTTP)
In passi:
- Il client invia un messaggio SOAP nell' endpoint listener
- il listener utilizza le informazioni all'interno dell' InboundPort e dell' InboundService per recuperare la ServiceDestination alla quale inviare il messaggio
- se il WSDL definisce un messaggio a 2 vie (anche ritorno) in questo caso viene creata una coda di risposta alla quale l'endpoint listener si mette in ascolto
- l'endpoint listener attende il messaggio di ritorno e lo inoltra al client

Figura 2 : Inbound service
|
|
La configurazione dell’ Ambiente
|
top
|
|
Per brevità non sono riportati tutti i passi da seguire ma solamente quelli ritenuti più significativi. Per ogni componente che di seguito creeremo dovremmo proseguire fino a che non apparirà nella finestra di lavoro con l'indicazione che ci avverte che è necessario salvare il lavoro eseguito fino a quel punto. La console di gestione dell’ Application Server è raggiungibile mediante un URL del tipo: http:://host:porta/admin (generalmente porta=9060) Iniziamo con la creazione di una nuova istanza del bus di integrazione. Service Integrations > Buses > New (1)
 Una volta creato il bus dobbiamo associargli il message engine: Service Integrations > Buses > WasBus > Bus Members > Add (2)

Ora ci apprestiamo a creare e configurare l'applicazione di sistema che ci fornirà l'endpoint listener associato al nostro bus di integrazione. Application Servers > server1 > Endpoint Listeners > New (3)
 (4)
 Nota: durante la creazione dell’ endpoint listener dobbiamo esclusivamente utilizzare: SOAPHTTPChannel1 e wsgwsoaphttp1. Creiamo all'interno del bus la destinazione alla quale arriveranno le richieste SOAP provenienti dal web service. Service Integrations > Buses > WasBus > Destinations > New (5)
 Inseriamo il nome della destinazione. (6)
 Prima di procedere con la definizione dei servizi Inbound e Outbound è necessario eseguire il download e il deploy del servizio web (ReverseStringEAR.ear) che utilizzeremo come test e del client per la sua verifica (ReverseStringClientEAR.ear). Ricordiamoci, dopo aver eseguito la pubblicazione di attivare da console le applicazioni. Se tutto è andato correttamente, invocando: http://localhost:9085/ReverseString/services/ReverseString/wsdl/ReverseString.wsdl dovremo vedere come risposta il codice WSDL che definisce il servizio web. (Nota: la porta potrebbe cambiare a seconda della configurazione del server) Se da console visualizziamo le applicazioni presenti avremo una situazione analoga alla seguente: (7)
 Il prossimo passo consiste nella creazione del servizio di Outbound. Service Integrations > Buses > Outbound Services > New (Nota: come location del WSDL inseriamo la URL indicata sopra)
(8)  Ridenominiamo Outbound service name , Service destination name e Port destination name con i seguenti valori:
- ReverseStringOutboundService
- ReverseStringOutboundDestination
- ReverseStringOutboundPort
(9)

Ecco il risultato, dopo aver salvato il servizio creato.
(10)
 Adesso occupiamoci all'aspetto dell' ascolto, ovvero il servizio di Inbound. Service Integrations > Buses > Inbound Services > New (11)
 Specifichiamo il nome del servizio. (12)
 Al termine del wizard vedremo il servizio Inbound creato. (13)
 Per la definizione del servizio Inbound abbiamo specificato il nome della destinazione: ReverseStringDestination alla quale arriverà il messaggio SOAP relativo alla richiesta del client, e come si vede dalla figura 3, mediante un routing statico la destinazione viene rediretta (senza effettuare nessuna mediazione) verso la ReverseStringOutboundDestination che invocherà automaticamente l'endpoint del servizio web.  Figura 3 : Diagramma semplificato nel caso di destinazione intermedia. Avremmo potuto optare anche per un' altra soluzione, ovvero utilizzare, direttamente per l' Inbound la destinazione ReverseStringOutboundDestination (la destinazione definita per l’Outbound) come si vede nella figura 4. Anche se la seconda soluzione risulta più intuitiva è consigliabile utilizzare una destinazione 'intermedia', come nel primo caso, poichè questo approccio permette di avere un maggior livello di separazione dei compiti. Figura 4 : Diagramma semplificato nel caso di singola destinazione. Eseguiamo il routing descritto precedentemente. Service Integrations > Buses > Destinations > StringReverseDestination inseriamo : WasBus:ReverseStringOutboundDestination ,ovvero ridirigi l’input , in questo caso il messaggio SOAP proveniente dal client, verso la destinazione ReverseStringOutboundDestination all’interno del bus WasBus. (14)
 Dopo aver eseguito tutti i passi sopra riportati andiamo a controllare tutte le destinazioni presenti nel bus: Service Integrations > Buses > Destinations
(15)

|
|
Il test del servizio web
|
top
|
|
Prepariamoci ora a generare, mediante il wizard, il codice WSDL riferito all’ InboundService precedentemente creato. Service Integrations > Buses > Inbound Services > ReverseStringInboundService (16)
 Salviamo il contenuto del file ZIP. (17)
 All’interno del file ZIP sono presenti I seguenti files:
- WasBusReverseStringInboundServiceBindings.wsdl
- WasBusReverseStringInboundServiceNonBound.wsdl
- WasBusReverseStringInboundServiceBindings.wsdl
- WasBusReverseStringInboundService.wsdl
Apriamo il WasBusReverseStringInboundService.wsdl : (18)
 Selezioniamo e copiamo la URL dell’endpoint (definita nel tag <soap:address> ) ovvero: http://localhost:9085/wsgwsoaphttp1/soaphttpengine/WasBus/ReverseStringInboundService/localhostNode05_server1_SOAPHTTPChannel1_InboundPort (**) Nota: Sostituiamo %2F con / Eseguiamo il test utilizzando l’applicazione client, invocandola tramite la seguente URL: http://localhost:9085/ReverseStringClient/sampleReverseStringProxy/TestClient.jsp Impostiamo l’endpoint del servizio andando sul link: setEndpoint(java.Lang.String) e copiamo la URL (**) infine rendiamo tutto effettivo premendo il bottone ‘invoke’. A questo punto non ci resta altro che invocare il servizio web vero e proprio mediante il link: reverse(java.Lang.String) ed ecco il risultato: (19)
 Come controprova togliamo dalla destinazione ReverseStringDestination la riga WasBus:ReverseStringOutboundDestination e invochiamo nuovamente il client, in questo caso non vedremo nessun risultato in quanto il messaggio SOAP del client rimane appeso alla destinazione associata al servizio in ingresso.
|
|
Conclusioni e Riferimenti
|
top
|
In questo articolo abbiamo visto come utilizzare i web services all’interno del bus di integrazione di WebSphere Application Server e questo aspetto unito e alle capacità di routing e mediazione permette per la creazione di un efficiente strato ESB.
Risorse e Bibliografia
Articolo :SIB: IBM WebSphere System Integration Bus [Rigamonti Gabriele, www.javaportal.it , settembre 2007]
WebSphere application Server Trial Version 6.1
developerWorks : IBM's resource for developers
Building an enterprise Service Bus with Websphere Application Server
|
|
|

Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons
|
|
|