Dette skyldes, at du bruger en forbindelsespulje, som blev oprettet, så snart du byggede SessionFactory, men forbindelserne erhverves kun, når du åbner en session. Nu lukker du sessionen, på grund af hvilke forbindelser frigives, men ikke lukkes og holdes oppe af poolen. Nu opretter du igen en SessionFactory, derfor opretter du en ny pulje, får derefter en session, og skaber derfor en ny forbindelse og så videre.. som til sidst vil nå det maksimale antal tilladte forbindelser.
Det, du skal gøre, er at bruge én forbindelsespulje (ved at bruge én SessionFactory) og hente og frigive forbindelserne fra den samme pool.
public class DBConnection {
private static SessionFactory factory;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public Session getSession() {
return factory.openSession();
}
public void doWork() {
Session session = getSession();
// do work.
session.close();
}
// Call this during shutdown
public static void close() {
factory.close();
}
}