JBoss 7: configurare ascolto su nomehost

Scenario:

Creando web service di test in locale, sono emersi problemi di connessione: il wsdl ritornato dal web service con una invocazione dei tipo http://localhost:8080/Prototipo/ServizioEcho?wsdl definiva l’endpoint come <soap:address location=”http://nomecomputer:8080/Prototipo/ServizioEcho”/&gt;  e questo indirizzo non veniva risolto dal web service client di test.

Problema:

Jboss è in ascolto solo su localhost.

Soluzione:

Occorre modificare il file di configurazione di JBoss ( usato in modalità standalone):

\jboss-as-.1.0.Final\standalone\configuration\standalone.xml aggiungendo altri indirizzi sui quali Jboss “ascolta”.

Le scelte sono 2: settare tutti gli indirizzi (any, equivalente al vecchio -b 0.0.0.0 delle precedenti versioni di JBoss), settare solo lo specifico IP di interesse.

Settare any:

<interfaces>
        <interface name="management">
            <inet-address value="127.0.0.1"/>
        </interface>
        <interface name="public">
            <inet-address value="127.0.0.1"/>
        </interface>

        <!-- IPv4 -->
        <interface name="any">
            <any-ipv4-address/>
        </interface>
    </interfaces>

   <!-- Use the any interface -->
    <socket-binding-group name="standard-sockets" default-interface="any">
        <socket-binding name="http" port="8080"/>
        <socket-binding name="https" port="8443"/>
        <socket-binding name="jmx-connector-registry" port="1090"/>
        <socket-binding name="jmx-connector-server" port="1091"/>
        <socket-binding name="jndi" port="1099"/>
        <socket-binding name="osgi-http" port="8090"/>
        <socket-binding name="remoting" port="4447"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
    </socket-binding-group>

Ora, richiedendo http://nomecomputer:8080/Prototipo/ServizioEcho?wsdl si ottiene correttamente il WDSL.

See more at:
https://docs.jboss.org/author/display/AS7/Interfaces+and+ports
https://community.jboss.org/message/614962
https://community.jboss.org/thread/169889
http://stackoverflow.com/questions/1032554/how-can-i-use-the-hostname-of-the-server-instead-of-localhost-with-jboss
Annunci

JBoss 7 SOAP Web Service – JAX-WS 2.2 endorset in JDK 1.6

JBoss 7 mette a disposizione JBoss WS come framework per l’implementazione di web service SOAP.

Fra le funzionalità fornite, è possibile creare l’implementazione del web service a partire dal WSDL (approccio Top Down).

Il tool suppone di default suppone la presenza di JAX-WS 2.2. Il problema nasce dall’assenza della implementazione di riferimento di JAX-WS 2.2 all’interno del Jdk 1.6. Per ovviare al problema si può effettuare l’endorset dei jar necessari dentro il jdk.

Esempio:

IDE eclipse Indigo + plug-in JBoss per web service (JBossAS Tools, JBoss WebService Tools, Hibernate Tools, JBoss JAX-RS Tools)

JDK 1.6.x

Generando il web service da WSDL si ottiene un errore di compilazione:

Errore causato dalla mancanza di JAX-WS 2.2 dentro JDK 1.6

Errore causato dalla mancanza di JAX-WS 2.2 dentro JDK 1.6

Si può risolvere il problema effettuando l’endorset del jar della versione 2.2 dentro il JDK:

  • scaricare la RI di JAX-WS 2.2
  • copiare SOLO i due jar  jaxws-api.jar e jaxb-api.jar all’interno della directory del JDK /jre/lib/endorsed.

Ora, utilizzando il wizard, si può creare il web service:

wizard_creazione_ws wizard_creazione_ws_2

 

(se persiste l’errore di compilazione…chiudere e riaprire eclipse…)

See more at:
http://www.bitspedia.com/2012/03/how-to-use-jax-ws-226-with-jdk-16.html
http://docs.oracle.com/javase/6/docs/technotes/guides/standards/index.html
http://jax-ws.java.net/2.2/docs/ReleaseNotes.html

Recuperare connection URL da JBoss e configurazione Hibernate

Durante lo sviluppo si hanno diversi ambienti di lavoro: locale per lo sviluppo, ambienti di test, pre-produzione, produzione ecc…

Può essere utile avere a disposizione una pagina dentro l’applicativo che recuperi i dati dell’ambiente di deploy corrente, in particolare la connessione alla base dati (a quale db mi sto collegando? posso inserire/cancellare/modificare dati senza fare danni??).

  1. Recuperare URL jdbc da un Datasource definito dentro JBoss:

I Datasource configurati per JBoss sono contenuti in un file xml che si trova dentro la cartella di deploy, e sono definiti in questo modo

  1. <datasources>
       <datasource jta="true" jndi-name="java:/jdbc/MyDataBaseDS" pool-name="MyPool" enabled="true"   use-ccm="false">
       <connection-url>jdbc:postgresql://nomedbserver:5432/my_db_user</connection-url>
       <driver-class>org.postgresql.Driver</driver-class>
       <driver>postgresql-jdbc4</driver>
    [..altre info]
       </datasource>
     <drivers>
       <driver name="postgresql-jdbc4" module="org.postgresql"/>
     </drivers>
     </datasources>

    Per recuperarli da codice occorre eseguire la lookup del jndi-name:

    Context context = new InitialContext();
    javax.sql.DataSource ds = (javax.sql.DataSource) context.lookup("java:/jdbc/MyDataBaseDS");
    String urlDatabase  = ds.getConnection().getMetaData().getURL();
  2. Recuperare URL di connessione per  hibernate da persistence.xml:

In questo caso l’URL di connessione è dichiarato nel file persistence.xml

   <?xml version="1.0" encoding="UTF-8"?>
   <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://   www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persis   tence/persistence_2_0.xsd">
     <persistence-unit name="MyDataBase" transaction-type="JTA">
       <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
         <properties>
           <property name="hibernate.cache.use_second_level_cache" value="true" />
           <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
           <property name="hibernate.connection.url" 
            value="jdbc:postgresql://nomedbserver:5432/my_db_user" />
 [..altre info...]
         </properties>
     </persistence-unit>
   </persistence>

per recuperarlo, conviene creare un semplice EJB che dichiari il PersistenceContext tramite annotation, da questo si recupera l’informazione

@Stateless
public class ConfigurazioneAmbienteHome {

 @PersistenceContext 
 protected EntityManager entityManager;
 
 public String getHibernateConnectionUrl() {
   String connectionUrl = entityManager.getEntityManagerFactory().getProperties()
   .get("hibernate.connection.url").toString();
   return connectionUrl;
 }

}

See more at:

http://www.html.it/pag/17188/datasource-collegarsi-a-un-database/

http://www.html.it/articoli/jboss-per-principianti-installazione-e-nozioni-di-base-3/