Lorsque vous utilisez un pool de connexions, appelez Connection#close()
ne ferme pas physiquement la connexion mais la renvoie au pool pour une réutilisation future. En d'autres termes, la connexion reste ouverte et c'est tout l'intérêt d'utiliser un pool.
Eh bien, c'est le problème. Vous créez une SessionFactory
encore et encore (chacun créant son propre pool) alors que vous ne devriez le créer qu'une seule fois pour la durée de vie de votre application. Si vous n'utilisez pas de framework particulier, cela se fait généralement dans une classe utilitaire (le fameux HibernateUtil
classe).
Le tutoriel Hibernate a un exemple très basique d'une telle classe. Ou consultez celui-ci qui est un peu plus riche.