5

MySQL से हाइबरनेट कनेक्शन मेरे डीबी बंद नहीं हो रहे हैं। 10 सेकंड की तरह 10 बार क्लिक करने के बाद, मुझे यह कनेक्शन आंकड़े MySQL वर्कबेंच से प्राप्त होते हैं (मेरी विकास मशीन में। मैं एकमात्र उपयोगकर्ता हूं)। MySQL Workbench Server Status

मैं जगह में उन हैहाइबरनेट कनेक्शन सी 3 पी 0 + स्पष्ट सत्र के साथ भी बंद नहीं हैं। क्लोज़()

  • C3P0 और चल (log4j से जाँच की है, C3P0 से संबंधित कोई समस्या है और लगता है चल रहा है)
  • जो वहाँ एक खुला सत्र है कि अगर जाँच करता है और में यह बंद कर देता है एक ServletReqestListener अनुरोध Destroyed() विधि।
  • हाइबरनेट सत्र ऑब्जेक्ट थ्रेडलोकल में रखा जा रहा है, इसलिए प्रत्येक अनुरोध में केवल एक कनेक्शन होता है, जो पहली क्वेरी पर खुलता है, और ServletRequestListener में बंद हो जाता है।
  • हर बार जब मैं एक सत्र खोलता हूं और एक सत्र बंद करता हूं तो मैं कोड उदाहरण के रूप में सिस्टम "आउटपुट" और "सत्र बंद" आउटपुट के रूप में आउटपुट करता हूं। प्रत्येक अनुरोध पर, प्रत्येक पृष्ठ रीफ्रेश करें, मुझे "सत्र खोला गया" और "सत्र बंद" के बाद, पर विचार किया गया। तो मेरा छोटा तर्क काम करता है। लेकिन कनेक्शन बंद नहीं होता है।

मेरे hibernate.cfg.xml

<property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.connection.password">officenic</property> 
<property name="hibernate.connection.url">jdbc:mysql://localhost/officenic</property> 
<property name="hibernate.connection.username">officenic</property> 
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 

<!-- configuration pool via c3p0 --> 
<property name="hibernate.c3p0.acquire_increment">1</property> 
<property name="hibernate.c3p0.idle_test_period">100</property> <!-- seconds --> 
<property name="hibernate.c3p0.max_size">5</property> 
<property name="hibernate.c3p0.max_statements">0</property> 
<property name="hibernate.c3p0.min_size">1</property> 
<property name="hibernate.c3p0.timeout">100</property> <!-- seconds --> 

कोड ब्लॉक मैं हर कॉल जहाँ मैं सत्र बंद करना चाहते हैं।

if (session == null) 
    return; 

if (session.isOpen()) { 

     if (session.isDirty()) 
     session.flush(); 

    session.close(); 
    System.out.println("Session closed"); 
} 

क्या मुझे कुछ याद आती है?

उत्तर

5

काम करता है ठीक है यह मैं SessionFactory हर निर्माण कर रहा है लगता है। लिंक पर एक अच्छी कक्षा है, जिससे सत्र फैक्ट्री स्थिर ने समस्या हल की है। http://docs.jboss.org/hibernate/core/3.3/reference/en/html/tutorial.html#tutorial-firstapp-helpers

+1

इसके लिए मेरा +1। धन्यवाद... – Navnath

1
private static final ThreadLocal<Session> session = new ThreadLocal<Session>(); 

public static void closeSession() throws HibernateException { 
    Session s = session.get(); 
    if (s != null) { 
     s.close(); 
     session.remove(); 
    } 
} 

वास्तव में मैं इस तरह कर रहा हूँ और यह

+0

हां, मेरा ऐसा कुछ भी अच्छा समाधान है। – Seregwethrin