Già in abbiamo avuto modo di parlare delle novità introdotte dall’architettura modulare di JBoss AS 7 e dal comportamento del ClassLoader: a fronte di maggior sicurezza e isolamento dei componenti, nel migrare una applicazione dalla versione 6 alla 7.0.2 di JBoss possiamo incorrere in problemi inattesi. E’ il caso, per esempio, di applicazioni che espongono Servizi Web SOAP: a differenza di servizi REST, quelli SOAP hanno bisogno che venga abilitato il modulo opportuno affinché funzionino, probabilmente perché ancora il solo profilo Web del server è compliant Java EE 6. Vediamo come fare.
I profili
Chi era abituato a lavorare con JBoss 6, migrando alla nuova versione sarà un po’ spaesato perché non troverà più la cartella server con la miriade di profili già configurati. Adesso invece si fa distinzione tra due modalità con cui è possibile gestire il server, ognuna delle quali può essere avviata a piacimento con un set di moduli già attivi, che in qualche modo ricalcano i vecchi profili. Come prima per gli MBean, per ogni configurazione è possibile abilitare o disabilitare il caricamento di certi moduli, mantenendo l’alta configurabilità che distingueva i diversi profili.
In pratica, è possibile avviare il server in due modalità:
- standalone
-
Ogni istanza di JBoss che viene creata è un processo indipendente. In questa modalità, è possibile avviare il server con le seguenti configurazioni:
- standalone.xml: è quella di default. Abilita i moduli necessari ad un profilo Web certificato Java EE 6, compreso JCA, servizi REST (JAX-RS) e OSGi.
- standalone-preview.xml: fa riferimento alla “preview” del profilo completo certificato Java EE 6. Ricordiamo che la versione 7.0.2 NON è totalmente certificata Java EE 6, ad esclusione del profilo Web. Oltre ai servizi del profilo di default, abilita i servizi SOAP (JAX-WS) e JMS.
- standalone-ha.xml: al profilo di default aggiunge le potenzialità del cluster.
- standalone-preview-ha.xml: al profilo completo Java EE 6 aggiunge le potenzialità del cluster.
La versione 7.1, prevista in uscita il 7 febbraio, sarà compliant Java EE 6, per cui le cose saranno un po’ diverse: stando alla versione 7.1 CR1b al momento disponibile infatti, i servizi SOAP saranno già attivi nel profilo di default e standalone-preview sarà sostituito dal standalone-full.
- domain
-
Possibilità di gestire più istanze di JBoss da un unico punto di controllo, chiamato Domain Controller. L’insieme di istanze è definito “domain” e dialoga con il controller principale tramite Host Controllers.
In questo caso, sono disponibili solo le configurazioni:- standalone.xml (default)
- standalone-preview.xml
Da notare che le modalità domain e standalone differiscono per il modo in cui i server sono gestiti, e non per le funzionalità che forniscono.
Abilitiamo i Servizi Web!
Abbiamo visto le configurazioni possibili con cui possiamo avviare JBoss 7: di default quindi, la configurazione standard NON prevede i servizi web SOAP (JAX-WS). Vediamo allora come abilitarli! Possiamo scegliere di avviare il server con un’altra configurazione, oppure di attivare i moduli necessari nella configurazione di default.
Impostare la configurazione “Java EE 6 Preview” all’avvio
Se decidiamo di avviare il server da riga di comando con la configurazione *-preview.xml, che come abbiamo detto abilita JAX-WS, in ambiente Unix è sufficiente digitare dalla cartella $JBOSS_HOME/bin:
./standalone.sh --server-config=standalone-preview.xml
per la modalità standalone oppure
./domain.sh --server-config=domain-preview.xml
per la modalità domain.
Nel caso in cui invece stiamo sviluppando dentro Eclipse, possiamo passare la configurazione desiderata al “Launch Configuration“. All’interno di Eclipse, nel tab “Servers”, cliccando due volte sul nome del server (che solitamente si chiama JBoss 7.0 Runtime Server), si aprirà una breve “Overview” di configurazione:
Clicchiamo adesso su Open launch configuration e aggiungiamo il parametro
-server-config=standalone-preview.xml
nel primo riquadro in alto chiamato Program arguments
Se avevamo già deployato l’applicazione, vedremo dal log che i nostri servizi web verranno caricati correttamente, insieme a HornetQ per la gestione delle code JMS, presente nella configurazione caricata.
Abilitare i moduli alla configurazione corrente
Se vogliamo invece modificare la configurazione di default e abilitare solo il modulo per i servizi web (che è l’unico che ci interessa), possiamo prendere spunto per esempio dal file standalone-preview.xml che si trova nella cartella $JBOSS_HOME/standalone/configuration e modificare standalone.xml come segue:
...... ...... ... ... localhost true Standard-Endpoint-Config Recording-Endpoint-Config ##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM RecordingHandler org.jboss.ws.common.invocation.RecordingServerHandler
Conclusioni
Per abilitare i servizi SOAP quindi basta aggiungere il modulo giusto nella configurazione di default o passare alla preview del profilo completo enterprise. Come accennato per il servizi REST invece non è necessario, forse perché percepiti come legati più strettamente al profilo web. Fortunatamente nella versione 7.1 sembra non sia più necessario questo intervento, essendo certificata Java EE 6!