venerdì 4 novembre 2011

definire un datasource in jboss as7

Jboss as7 si stacca completamente dalla tradizione Red Hat, che voleva server monolitici e che comprendessero qualsiasi cosa, con il problema, non da poco, di essere anche molto lenti. In questo caso gli sviluppatori si sono voluti concentrare su modularità e velocità, pur mantenendo uno stack java ee 6 completo.
Questo per fare una piccola introduzione, altre info qui: http://www.jboss.org/as7 dove è anche possibile scaricare l'application server e trovare la documentazione completa.
La configurazione in jboss as 7 è demandata ad un solo file, nel nostro esempio useremo la modalita standalone, ma lo stesso metodo potrebbe anche essere applicato alla domain. Il file in questione è: $JBOSS_HOME/standalone/configuration/standalone.xml.
Prima di andare a definire il nostro datasource, però, bisogna installare i driver jdbc del dbms che ci interessa, in questo caso mysql. I driver in questione verranno installati come modulo dell'application server, anche se ci sono offerte altre possibilità (come si può vedere in una panoramica più ampia qui). Questa modalità non è consigliata nel caso si stia gestendo un dominio, per quello è consigliato il deploy diretto dei driver (che devono essere jdbc-4 compliant, anche se c'è un metodo per renderli tali) tramite cli o web console.


Prendiamo il file mysql-connector-java-5.1.18-bin.jar (o la versione che si desidera, ricordandosi di referenziarla correttamente nel module.xml) che possiamo scaricare qui e copiamolo nella cartella: $JBOSS_HOME/modules/com/mysql/jdbc/main, se non esiste va creata.

A questo punto va creato il file module.xml, nella stessa cartella dove abbiamo copiato i driver. Il file dovrà essere come di seguito:


<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql.jdbc">
  <resources>
    <resource-root path="mysql-connector-java-5.1.18-bin.jar"/>
        <!-- Insert resources here -->
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

Fatto ciò resta l'ultimo passo da fare: definire il datasource vero e proprio. Questo si deve fare nel file standalone.xml. Qui sotto la parte relativa alla configurazione definita nel sottosistema realtivo ai ds:

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="H2DS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                    <connection-url>
                     jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
                    </connection-url>
                    <driver>
                        h2
                    </driver>
                    <pool>
                        <prefill>
                            false
                        </prefill>
                        <use-strict-min>
                            false
                        </use-strict-min>
                        <flush-strategy>
                            FailingConnectionOnly
                        </flush-strategy>
                    </pool>
                    <security>
                        <user-name>
                            sa
                        </user-name>
                        <password>
                            sa
                        </password>
                    </security>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/exampleDS" pool-name="waauDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                    <connection-url>
                        jdbc:mysql://localhost:3306/example
                    </connection-url>
                    <driver>
                        mysql
                    </driver>
                    <transaction-isolation>
                        TRANSACTION_READ_COMMITTED
                    </transaction-isolation>
                    <pool>
                        <min-pool-size>
                            10
                        </min-pool-size>
                        <max-pool-size>
                            100
                        </max-pool-size>
                        <prefill>
                            true
                        </prefill>
                        <use-strict-min>
                            false
                        </use-strict-min>
                        <flush-strategy>
                            FailingConnectionOnly
                        </flush-strategy>
                    </pool>
                    <security>
                        <user-name>
                            user
                        </user-name>
                        <password>
                            password
                        </password>
                    </security>
                    <statement>
                        <prepared-statement-cache-size>
                            32
                        </prepared-statement-cache-size>
                        <share-prepared-statements/>
                    </statement>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>
                            org.h2.jdbcx.JdbcDataSource
                        </xa-datasource-class>
                    </driver>
                      <driver name="mysql" module="com.mysql.jdbc">
                        <xa-datasource-class>
                            com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
                        </xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>



Le parti relativa ad exampleDS e ai driver mysql sono quelle da aggiungere alla configurazione di base del file, ricordandosi di sostituire user e password con i dati relativi all'account e l'host con quello dove risiede il db. Ovviamente in base alle esigenze si può fare tutto il tuning desiderato cambiando i vari parametri, ma per quello vi rimando alla documentazione ufficiale.

Nessun commento:

Posta un commento