Plus de connection dans le pool JDBC

Publié le 1 Mars 2010

Si vous utilisez un pool de connection JDBC et qu'après un certain temps, vous vous retrouvez à court de connexions, c'est certainement que vos connexions ne sont pas fermées convenablement.

En effet après avoir utilisé une connexion pour accéder à la base de données, il faut la fermer pour que celle-ci retourne automatiquement dans le pool.

Si vous oubliez de fermer votre connexion, celle-ci ne retournera pas dans le pool et lors du prochain traitement vous récupérerez une nouvelle connexion. Après un certain temps (dépendant de la fréquence des traitements et de la taille du pool) vous allez très certainement être à court de connexions.

C'est une erreur qui survient souvent lors d'une mauvaise gestion des exceptions. En effet il ne faut pas oublier de fermer la connexion même lorsqu'une exception survient.

C'est pour cela qu'il est judicieux de fermer les connexions dans un bloc finally qui sera toujours exécuter.

Voilà donc comment utiliser un pool de connexion (ici avec Oracle):

Connection connection = null;

try{
   connection = connectionPool.getConnection();
   /**
    * Utilisation de la connection
    * pour accéder aux données
    */

}
catch (SQLException ex){
   /**
    * traitements des erreurs (logs, etc)
    */

}
finally{
   /**
    * Penser à fermer les statements ou ResultSet qui peuvent
    * être encore ouvert avant de fermer la connection
    */

   if(connection != null){
      try{
         connection.close();
      }
      catch (SQLException ex){
         /**
          * Echec de la fermeture de la connection
          * Log éventuel ...
          */

      }
   }
}


Bien sûr il ne faut pas oublier de fermer tout objet (statement, result set, etc) qui utilise la connexion. Ceci devrait vous éviter pas mal de problème. Car une fois confronter à ce genre de problème ce n'est pas toujours facile de localiser la source du problème.

Rédigé par Bliz

Publié dans #Java

Repost 0
Commenter cet article