lundi 25 février 2013

Closing a connection for you. Please close them yourself

Voici un message souvent rencontré sur les projets type JEE.
Que veut dire ce mystérieux message ? Qui l'écrit ?

Tout d'abord, sachez que se message est produit par JBoss, pour être exact, ce message est écrit par le CachedConnectionManager de JBoss, qui encapsule Hibernate.
Il s'agit d'un pool de connexion aux bases de données.

Il écrit ce message, lorsqu'il supprime une connexion de son pool parce qu'elle n'est plus utilisée alors qu'elle est encore ouverte (ce qui est contradictoire donc).

Le code suivant ne pose aucun problème, car on ferme tout :
Connection aConnection = null; /* Connexion à la base de données */
Statement aStatement = null; /* La requête */
ResultSet aResultSet = null; /* résultat de la requête */

try
{
    aConnection = getConnectionDansArbreJndiJBoss() ;
    aStatement = aConnection.prepareStatement(requete) ;
    aResultSet = aStatement.executeQuery(requete);
}
catch (SQLException e)
{
  ...
}
finally
{
    aResultSet.close(); // aResultSet != null !!!!
    aStatement.close(); // aStatement != null !!!!
    aConnection.close(); // aConnection != null !!!!
}

mais enlevez la aConnection.close() et vous verrez apparaître le message !

La difficulté avec ce message est d'identifier l'élément posant problème.

Aucun commentaire:

Enregistrer un commentaire