web-dev-qa-db-fra.com

Pool de connexions de base DB avec Java et Tomcat 7

J'essaie de créer mon premier pool de connexion. Je crée une application Web Java avec Tomcat 7 et une base de données MySQL, et j'aimerais créer le pool de connexions le plus simple possible. J'ai consulté plusieurs tutoriels, mais ce n'est pas vraiment clair pour moi. J'aimerais donc que vous me confirmiez si je vais bien.

J'ai écrit la classe suivante en tant que gestionnaire de pool de connexions:

package dao.mysql;

import Java.sql.Connection;
import Java.sql.SQLException;
import org.Apache.Tomcat.jdbc.pool.DataSource;
import org.Apache.Tomcat.jdbc.pool.PoolProperties;

public class MySQLConnectionPool {

    private static DataSource datasource;
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/mydb";
    private static String username = "user";
    private static String password = "password";

    public MySQLConnectionPool() {
        datasource = new DataSource(configurePoolProperties(driver, url, username, password));
    }

    private PoolProperties configurePoolProperties(String driver, String url, String username, String password) {
        PoolProperties properties = new PoolProperties();
        properties.setDriverClassName(driver);
        properties.setUrl(url);
        properties.setUsername(username);
        properties.setPassword(password);
        return properties;
    } 

    public static synchronized Connection getConnection() {
        Connection connection = null;
        try {
            connection = datasource.getConnection();
        } catch (SQLException ex) {
            System.out.println("Error while getting a connection from the pool! \nSQL state:" + ex.getSQLState() + "\nMESSAGE" + ex.getMessage());
        }
        return connection;
    }
}

Je ne suis pas sûr des propriétés static ni du synchronized .

Et je ne suis pas sûr des classes "clientes" du pool. Je comprends qu’ils n’ont qu’à se connecter en utilisant

Connection con = MySQLConnectionPool.getConnection();

et enfin fermez cette connexion en utilisant

con.close();

Et c'est tout? Et aussi, y a-t-il un moyen plus simple ou meilleur de faire cela?

Merci beaucoup!

13
MikO

C'est la mauvaise façon de le faire. 

Tomcat dispose déjà d'un pool de connexions et vous pouvez configurer sans aucun code via le context.xml du répertoire conf

Une fois qu'il est défini ici, tout ce que vous avez à faire est de rechercher le JNDI DataSource dans votre code. Coder en dur tout cela (et réinventer la roue) est une très mauvaise idée.

Pour apprendre à configurer une source de données JNDI, consultez le manuel: http://Tomcat.Apache.org/Tomcat-7.0-doc/jndi-datasource-examples-howto.html

Le manuel Tomcat contient également un exemple sur la façon d’obtenir une connexion à partir du pool:

InitialContext cxt = new InitialContext();
DataSource ds = (DataSource) cxt.lookup( "Java:/comp/env/jdbc/dsname" );

dsname est le nom que vous avez fourni dans le context.xml

18

Consultez le JNDI DataSource HOW-TO et le Tomcat JDBC Connection Pool Documentation de Tomcat. Laisser Tomcat le faire est préférable, car cela évite les fuites du chargeur de classes.

1
Philippe Marschall