[Tomcat] Pool de connexion : Cannot create JDBC driver of class ''for connect URL nul
Bonjour,
je souhaite configurer un pool de connexion sous Tomcat 4.1. Lorsque je souhaite y acceder par un getConnection() j'obtiens le message d'erreur suivant :
Citation:
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Pour arriver à ce jolie bug, j'ai procédé comme ceci :
Dans le webapps\monAppli\WEB-INF\web.xml :
Code:
1 2 3 4 5 6
| <resource-ref>
<description>Oracle Development Datasource</description>
<res-ref-name>jdbc/bioMJ</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref> |
Dans le webapps\monAppli\WEB-INF\server.xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| <Resource auth="Container" description="CDP Datasource TMA" name="jdbc/bioMJ" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/bioMJ">
<parameter>
<name>validationQuery</name>
<value>select * from P_UTILISATEUR</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>500</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>password</name>
<value>CDPTMA</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@localhost:1520:xe</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>0</value>
</parameter>
<parameter>
<name>username</name>
<value>CDPTMA</value>
</parameter>
</ResourceParams> |
Le tout encadré des balises <GlobalNamingResources>
Et ensuite j'ai édité un fichier xml à la racine de webapps :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| <!-- CDP Context -->
<Context path="/cdpApp" docBase="/cdpApp" debug="1">
<Environment name="logName" value="C:\Program Files\Apache Software Foundation\Tomcat 4.1\webapps\cdpApp\log\traceCdp"
type="java.lang.String" override="false" />
<Environment name="report/SGBDUsr" value="CDPTMA" override="false"
type="java.lang.String"/>
<Environment name="report/SGBDPwd" value="CDPTMA" override="false"
type="java.lang.String"/>
<Environment name="report/reportServerAddress" value="127.0.0.1"
type="java.lang.String" override="false"/>
<Environment name="printer/confFile"
value="C:\Program Files\Apache Software Foundation\Tomcat 4.1\webapps\cdpApp\WEB-INF\PrinterConfig.properties"
type="java.lang.String" override="false"/>
<Environment name="fr.biomerieux.cdp.ClassPeriph.2.1"
value="fr.biomerieux.cdp.bal.BalRmiTest"
type="java.lang.String" override="false"/>
<Environment name="fr.biomerieux.cdp.ClassPeriph.1.2"
value="fr.biomerieux.cdp.bal.BalRmiTest"
type="java.lang.String" override="false"/>
<Environment name="fr.biomerieux.cdp.ClassPeriph.1.4"
value="fr.biomerieux.cdp.bal.BalRmiTest"
type="java.lang.String" override="false"/>
<Environment name="fr.biomerieux.cdp.ClassPeriph.4.1"
value="fr.biomerieux.cdp.bal.BalRmiTest"
type="java.lang.String" override="false"/>
<!-- cdp database -->
<Resource auth="Container" description="CDP Datasource TMA" name="jdbc/bioMJ" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/bioMJ">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>validationQuery</name>
<value>select * from P_UTILISATEUR</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>1800</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>password</name>
<value>CDPTMA</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127.0.0.1:1521:XE</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>0</value>
</parameter>
<parameter>
<name>username</name>
<value>CDPTMA</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>600</value>
</parameter>
</ResourceParams>
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_cdp_log." suffix=".txt" timestamp="true"/>
</Context> |
Et voila mon bout de code :
Code:
1 2 3 4
| Context l_ctx = (Context) (new InitialContext()).lookup("java:comp/env");
_mPoolName = AbstractConnectionManager.nameSGBD;
_mPoolConnections = (DataSource) l_ctx.lookup("jdbc/" + _mPoolName);
Connection myConn = _mPoolConnections.getConnection(); |
Sachant que la variable "_mPoolName" me retourne bien la valeur attendu, a savoir "bioMJ".
je précise que je dispose de la version 10.2.0.1 d'oracle (de mémoire). j'ai donc copié le jar classes12.jar dans /common/lib de tomcat.
Etant donné que je ne connais pas trop le fonctionnement des pools de connexion, pouvez me renseigner d'ou pourrait provenir l'erreur ?
Merci d'avance !