domenica 14 dicembre 2014

Wildfly 9 configurare un pool verso postgresql

Configurare un pool di connessione al database sembra una operazione semplice, ma si può finire per sprecare un sacco di tempo prezioso...

Preparazione :

scaricare il driver jdbc del database:
nel mio caso : postgresql-9.3-1102.jdbc41.jar

per poter creare il pool dobbiamo creare prima un modulo per il driver:

Modulo :

sotto la cartella principale di wildfly creare il seguente percorso :
  cartellawildfly/modules/org/postgres/main/

in questa cartella copiamo il file postgresql-xxxxx.jdbc41.jar e creiamo un file di nome module.xml

il file module.xml avrà il seguente contenuto : 

<?xml version="1.0" ?>

<module xmlns="urn:jboss:module:1.1" name="org.postgres">

    <resources>
        <resource-root path="postgresql-9.3-1102.jdbc41.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>

</module>

una volta fatto questo abbiamo dato a wildfly le informazioni necessarie sul driver.

Datasource :

a questo punto andiamo a modificare un altro file per aggiungere il pool:
cartellawildfly/standalone/configuration/standalone.xml
aprendo il file con un editor di testo andiamo a cercare il punto dove sono contenute le info sui datasource, per l'esattezza i tag <datasources></datasources> li delimitano.
quindi al loro interno potremmo incollare un descrittore simile a questo :

<datasource jta="true" jndi-name="java:jboss/PostgresDSPool" pool-name="PostgresDSPool" enabled="true" use-ccm="false">
                    <connection-url>jdbc:postgresql://localhost/postgresdb</connection-url>
                    <driver-class>org.postgresql.Driver</driver-class>
                    <driver>postgres</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>5</min-pool-size>
                        <max-pool-size>20</max-pool-size>
                    </pool>
                    <security>
                        <user-name>postgresus</user-name>
                        <password>postgrespwd</password>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                    </validation>
                    <statement>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>
              
                <drivers>
              
                  
                    <driver name="postgres" module="org.postgres">
                        <driver-class>org.postgresql.Driver</driver-class>
                    </driver>
              
                </drivers>


Cercare inoltre il default-bindings se si è rimosso il contenuto del datasource di default e modificarlo come segue :

    <default-bindings context-service="java:jboss/ee/concurrency/context/default" 
                   datasource="java:jboss/PostgresDSPool" 
                   managed-executor-service="java:jboss/ee/concurrency/executor/default" 
                   managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" 
                   managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>

dove i parametri da settare a proprio piacimento sono :
nome del datasource :    java:jboss/PostgresDSPool
nome dell'host del server o ip del db : localhost

nome del database : postgresdb
nome utente : postgresus
password utente  : postgrespwd


a questo punto possiamo riavviare wildfly ed andare a testare la connessione:
per accedere al pannello di amministrazione, ammesso che il server sia su localhost :
http://localhost:9990/console
se non accede esce un messaggio che vi indica le modalità di creazione di un utente.
sulla sinistra : connector -> datasources
selezionate la riga postgresdspool, in basso connection e quindi test.
se la connessione non riesce andate a leggere i log per capire se avete sbagliato l'utente (postgresus) la password ( nell'esempio è postgrespwd ) o il database ( postgresdb ) o altro.

1 commento: