Hibernate connexions ne sont pas fermées, même avec C3P0 + session explicite.close()

Hibernate connexions à MySQL ma db ne sont pas de clôture. Après avoir cliqué 10 fois en 10 seconde, je reçois ce les statistiques de connexion de MySQL Workbench (dans ma machine de développement. Je suis le seul utilisateur).MySQL Workbench De L'État Du Serveur

J'ai ceux en place

  • C3P0 et en cours d'exécution (vérifiée à partir de log4j, pas de problème lié à C3P0 et semble en cours d'exécution)
  • Un ServletReqestListener qui vérifie si il y a une session ouverte et ferme en requestDestroyed() la méthode.
  • Session Hibernate objet est maintenu dans ThreadLocal, de sorte que chaque demande seulement ont une connexion, qui s'ouvre à la première requête, et se ferme en ServletRequestListener.
  • Chaque fois que j'ouvre une session et fermer une session, j'ai sortie "Session Ouverte" et "Session Fermée" du Système.comme dans l'exemple de code coup. À chaque demande, chaque rafraichissement de la page, - je obtenir "Session Ouverte" et après "Session Fermée", repectively. Donc, mon peu de logique fonctionne. Mais la connexion n'est pas fermé.

Mon hibernate.cfg.xml

<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">officenic</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/officenic</property>
<property name="hibernate.connection.username">officenic</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

<!-- configuration pool via c3p0 -->
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">100</property> <!-- seconds -->
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">100</property> <!-- seconds -->

Le code-block que j'appelle, à chaque fois, lorsque je veux fermer la session.

if (session == null)
    return;

if (session.isOpen()) {

      if (session.isDirty())
         session.flush();

    session.close();
    System.out.println("Session closed");
}

Dois-je raté quelque chose?

OriginalL'auteur Seregwethrin | 2012-03-18