Notre section de code standard pour l'utilisation de JDBC est...
Connection conn = getConnection(...);
Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rset = stmt.executeQuery (sqlQuery);
// do stuff with rset
rset.close(); stmt.close(); conn.close();
Question 1 : Lorsque l'on utilise le pool de connexion, doit-on fermer la connexion à la fin ? Si c'est le cas, le but de la mise en commun n'est-il pas perdu ? Et sinon, comment la source de données sait-elle quand une instance particulière de connexion est libérée et peut être réutilisée ? Je suis un peu perdu sur ce point, toute indication sera appréciée.
Question 2 : La méthode suivante est-elle proche de la norme ? On dirait une tentative d'obtenir une connexion à partir du pool et, si la source de données ne peut être établie, d'utiliser le bon vieux DriverManager. Nous ne sommes même pas sûrs de la partie qui est exécutée au moment de l'exécution. Je répète la question précédente : doit-on fermer la connexion qui sort d'une telle méthode ?
Merci, - MS.
synchronized public Connection getConnection (boolean pooledConnection)
throws SQLException {
if (pooledConnection) {
if (ds == null) {
try {
Context envCtx = (Context)
new InitialContext().lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
return ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}}
return (ds == null) ? getConnection (false) : ds.getConnection();
}
return DriverManager.getConnection(
"jdbc:mysql://"+ipaddy+":"+dbPort +"/" + dbName, uName, pWord);
}
Edit : Je pense que nous obtenons la connexion mutualisée puisque nous ne voyons pas de trace de pile.