Ini karena Anda menggunakan kumpulan koneksi yang dibuat segera setelah Anda membangun SessionFactory, tetapi koneksi hanya diperoleh saat Anda membuka Sesi. Sekarang, Anda menutup sesi, karena koneksi mana yang dilepaskan, tetapi tidak ditutup dan ditahan oleh kumpulan. Sekarang, Anda kembali membuat SessionFactory, sehingga membuat kumpulan baru, lalu mendapatkan sesi, sehingga membuat koneksi baru dan seterusnya.. yang pada akhirnya akan mencapai jumlah maksimum koneksi yang diizinkan.
Yang harus Anda lakukan adalah menggunakan satu Connection Pool (menggunakan satu SessionFactory) dan mendapatkan dan melepaskan koneksi dari pool yang sama.
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();
}
}