Già in un’altra occasione 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:

Overview JBoss 7 Server

Clicchiamo adesso su Open launch configuration e aggiungiamo il parametro

-server-config=standalone-preview.xml

nel primo riquadro in alto chiamato Program arguments

JBoss 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:

 ...
  <extensions>
  ...
     <extension module="org.jboss.as.webservices"/>
  ...
  </extensions>
 ...
  <profile>
  ...
<subsystem xmlns="urn:jboss:domain:webservices:1.0" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:jaxwsconfig="urn:jboss:jbossws-jaxws-config:4.0">
  <wsdl-host>
    localhost
  </wsdl-host>
  <modify-wsdl-address>
    true
  </modify-wsdl-address>
  <endpoint-config>
    <jaxwsconfig:config-name>
      Standard-Endpoint-Config
    </jaxwsconfig:config-name>
  </endpoint-config>
  <endpoint-config>
    <jaxwsconfig:config-name>
      Recording-Endpoint-Config
    </jaxwsconfig:config-name>
    <jaxwsconfig:pre-handler-chains>
      <javaee:handler-chain>
        <javaee:protocol-bindings>
          ##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM
        </javaee:protocol-bindings>
        <javaee:handler>
          <javaee:handler-name>
            RecordingHandler
          </javaee:handler-name>
          <javaee:handler-class>
            org.jboss.ws.common.invocation.RecordingServerHandler
          </javaee:handler-class>
        </javaee:handler>
      </javaee:handler-chain>
    </jaxwsconfig:pre-handler-chains>
  </endpoint-config>
</subsystem>
  ...
  </profile>

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!

Libri consigliati



83 Posts

Sono un software engineer focalizzato nella progettazione e sviluppo di applicazioni web in Java. Presso OmniaGroup ricopro il ruolo di Tech Leader sulle tecnologie legate alla piattaforma Java EE 5 (come WebSphere 7.0, EJB3, JPA 1 (EclipseLink), JSF 1.2 (Mojarra) e RichFaces 3) e Java EE 6 con JBoss AS 7, in particolare di CDI, JAX-RS, nonché di EJB 3.1, JPA2, JSF2 e RichFaces 4. Al momento mi occupo di ECM, in particolar modo sulla customizzazione di Alfresco 4 e sulla sua installazione con tecnologie da devops come Vagrant e Chef. In passato ho lavorato con la piattaforma alternativa alla enterprise per lo sviluppo web: Java SE 6, Tomcat 6, Hibernate 3 e Spring 2.5. Nei ritagli di tempo sviluppo siti web in PHP e ASP. Per maggiori informazioni consulta il mio curriculum pubblico. Follow me on Twitter - LinkedIn profile - Google+