Singleton / DBCP, comment configurer ?
Bonjour,
Je me lance dans le développement d'application java depuis peu. J'étais sous PHP avant, et pour me connecter à ma base de donnée, j'utilisais un singleton. Vu le fonctionnement des singletons en Java, j'ai pensé que cela pouvait poser problème.
J'ai trouvé sur ce même forum quelque chose qui évoquait DBCP que je trouvais plutôt pas mal dans le principe. Dans la pratique, j'ai quelques problèmes pour la mise en oeuvre. Je pensais avoir configuré correctement Tomcat, mais apparement, ce n'est pas le cas :x
Sur une page JSP, j'ai mis ce code (et l'import qui va bien) :
Code:
1 2 3
| <%
out.println(DataBase.getConnection());
%> |
avec ma classe DataBase :
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
| package utils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DataBase {
public static Connection getConnection(){
Context ctx = null;
try {
ctx = new InitialContext();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
return ((DataSource)ctx.lookup("java:comp/env/jdbc/Ysandra")).getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
} |
Malheureusement quand je vais sur ma page de test, j'obtiens un joli "null".
J'ai mis la configuration de ma base de donnée dans META-INF/context.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 36 37 38
| <?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/Ysandra" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/Ysandra">
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>lalala</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/ysandra_www?autoReconnext=true</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>3</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
</ResourceParams>
</Context> |
Et dans WEB-INF/web.xml j'ai ajouté ceci dans <web-app> :
Code:
1 2 3 4 5 6
| <resource-ref>
<description>Connexion MySQL</description>
<res-ref-name>jdbc/Ysandra</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref> |
Est-ce que j'aurais mal compris une étape de la configuration ? Est-ce que l'idée de la classe avec une méthode statique est mauvaise et pourquoi ?
Pour info, mon java -version (Mac OS X 10.5.6):
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06-153)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_07-b06-57, mixed mode)
Je suis sous la dernière version de Tomcat 6.
Merci d'avance ;)