ऐसा इसलिए है क्योंकि आप एक कनेक्शन पूल का उपयोग कर रहे हैं जो जैसे ही आप सत्र फैक्ट्री बनाते हैं, लेकिन कनेक्शन केवल तभी प्राप्त होते हैं जब आप सत्र खोलते हैं। अब, आप सत्र को बंद कर रहे हैं, जिसके कारण कनेक्शन जारी किए जाते हैं, लेकिन बंद नहीं होते हैं और पूल द्वारा रोक दिए जाते हैं। अब, आप फिर से एक सत्र फ़ैक्टरी बना रहे हैं, इसलिए एक नया पूल बना रहे हैं, फिर एक सत्र प्राप्त कर रहे हैं, इसलिए एक नया कनेक्शन बना रहे हैं और इसी तरह .. जो अंततः अनुमत कनेक्शन की अधिकतम संख्या तक पहुंच जाएगा।
आपको क्या करना है एक कनेक्शन पूल (एक सत्र फैक्ट्री का उपयोग करके) का उपयोग करना और उसी पूल से कनेक्शन प्राप्त करना और जारी करना।
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();
}
}