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/

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...