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 :

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !