Guillaume VIEL :: java jee tomcat linux

Aller au contenu | Aller au menu | Aller à la recherche

mardi 30 novembre 2010

SOAPUI connexion JDBC

Pour réaliser des tests plus industriels, il est nécessaire que le script de test puisse accéder à une base de données. Sur la version non payante de SOAPUI

import com.eviware.soapui.*;
import groovy.sql.Sql;

def dbUrl = "jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = host1.mydomain.com)(PORT = 1523))(ADDRESS = (PROTOCOL = TCP)(HOST = host2.mydomain.com
)(PORT = 1521))(FAILOVER = false))(CONNECT_DATA =(SERVICE_NAME = MYDB.MYDOMAIN.COM)))";
def dbUser = "user";
def dbPwd = "mypassword";
def sql;
try {
sql = Sql.newInstance(dbUrl, dbUser, dbPwd, "oracle.jdbc.OracleDriver");
//def res = sql.firstRow("SELECT * FROM MA_TABLE");
//log.info res.ID + " " + res.CHAMP1;
//res.close();
sql.eachRow("SELECT * FROM MA_TABLE") {
log.info "${it.ID} / ${it.CHAMP1}"
}
sql.close();
log.info "Closed Database Connection.";
} catch (Exception e) {
log.error "Could not establish connection to the database.";
}

Voilà une première étape de franchie. On peut aller plus loin en utilisant ceci au niveau des scripts de setup et tear down d'un jeu de test.

mercredi 1 septembre 2010

Activation des traces du driver JDBC Oracle

Il est parfois utile de comprendre ce que fait le driver JDBC Oracle que les développeurs connaissent sous le nom de ojdbc14.jar. Il existe en fait un autre driver destiné au debug : ojdbc14_g.jar pour lequel il suffit d'ajouter ceci dans les JAVA_OPTS pour activer les traces

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.config.file=OracleLog.properties -Doracle.jdbc.Trace=true"

Ensuite, un fichier OracleLog.properties doit être placé avec le jar pour configurer les traces souhaitées. Il est conseillé de le modifier sinon vous allez avoir beaucoup de traces...

jeudi 1 avril 2010

Oracle native JDBC connection extractor

L'utilisation d'API Oracle Java, comme par exemple la SDO API (sdoapi.jar) ou Oracle Network Modeling (sdonm.jar) pour gérer les graphes, nécessite d'avoir une connexion native Oracle. Or les applications sont souvent configurées avec un pool de connexions gérées par le conteneur JEE. Ceci pose alors problème pour les opérations spécifiques qui nécessitent d'avoir une connexion de type oracle.jdbc.OracleConnection et non une connexion de type java.sql.Connection. Cette dernière ne pourra en effet pas être utilisée avec les méthodes des API Oracle en Java.

Il faut alors extraire la connexion native sous-jacente à la connexion du pool de connexions.

Lire la suite...

mercredi 24 mars 2010

Configuration d'un pool de connexions JDBC avec Oracle RAC

La documentation Oracle FCF (Fast Connection Failover) pour configurer un pool de connexion JDBC avec un cluster Oracle RAC 10g est plutôt obscure et manque d'exemple...

Après quelques tâtonnements et en fouillant un peu, voici une configuration sous Tomcat à mettre dans le context.xml de l'application web ou dans server.xml (déconseillé sauf en ressource globale) qui semble plaire à Oracle :

    <Resource name="jdbc/myRacDb" auth="Container"
            type="oracle.jdbc.pool.OracleDataSource"
            factory="oracle.jdbc.pool.OracleDataSourceFactory"
            description="My Oracle RAC DB"
            user="myschema" password="mypass"
            url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1.mydomain.com)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=rac2.mydomain.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myservice.mydomain.com)))"
            driverClassName="oracle.jdbc.OracleDriver"
            maxActive="10"
            maxIdle="5"
            minIdle="2"
            maxWait="5000"
            connectionCacheName="myCache"
            connectionCachingEnabled="true"
            fastConnectionFailoverEnabled="true"
            onsConfigStr="nodes=rac1.mydomain.com:4200,rac2.mydomain.com:4200"
            connectionProperties="oracle.jdbc.ReadTimeout=30000" />

Cette datasource est accessible via le JNDI sous le nom java:comp/env/jdbc/myRacDb (sous Tomcat).

Le cluster Oracle RAC est ici composé de 2 noeuds rac1.mydomain.com et rac2.mydomain.com. On travaille avec un driver Oracle thin.

Sous tomcat, il faut mettre la librairie Oracle JDBC ons.jar (Oracle Notification Services) dans le common/lib (du moins sous tomcat 5) avec les autres librairies Oracle (ojdbc14.jar et orai18n.jar notamment).

Afin de ne pas avoir d'ennuis, il est obligatoire de mettre l'attribut nodes dans l'onsConfigString et préférable qu'il soit à l'identique de la configuration Oracle (pour cela une bonne communication avec votre DBA est nécessaire).

Nous avons surtout tâtonné pour trouver le type et la factory car la documentation n'est pas orienté tomcat mais plutôt grand serveurs d'applications commerciaux (je vous laisse deviner lesquels!).

Si vous faites des déploiements à chaud sur Tomcat (déconseillé) il est préférable d'enlever le connectionCacheName pour éviter que Tomcat se plaigne de l'existence d'un cache portant le même nom (apparemment pas de nettoyage à chaud!) : vous serez alors obligé de redémarrer votre serveur Tomcat.