Al usar un grupo de conexiones, llamar a Connection#close()
no cierra físicamente la conexión, sino que la devuelve al grupo para su futura reutilización. En otras palabras, la conexión permanece abierta y ese es el objetivo de usar un grupo.
Bueno, ese es el problema. Estás creando una SessionFactory
una y otra vez (cada uno creando su propio grupo) mientras que debe crearlo solo una vez durante el tiempo de vida de su aplicación. Si no está utilizando ningún marco en particular, esto generalmente se hace en alguna clase de utilidad (el famoso HibernateUtil
clase).
El tutorial de Hibernate tiene un ejemplo muy básico de tal clase. O consulte este que es un poco más rico.