2011-08-22 15 views
6

बंद कर दिया गया है। मैं जीडब्ल्यूटी, हाइबरनेट (एक्सएमएल आधारित मैपिंग), MySQL- Tomcat6.0 में एक एप्लीकेशन विकसित कर रहा हूं। आईडीई- नेटबीन्स 6.9 मैंने नेटबींस में प्रोजेक्ट गुण "सहेजें पर सहेजें" विकल्प सेट किया है।अवैध पहुंच: यह वेब एप्लिकेशन उदाहरण पहले ही

जब मेरे आवेदन सर्वर में लंबे समय के लिए हर अब और फिर अपने आवेदन डेटाबेस से कनेक्ट करने में विफल रहता है और निम्न अपवाद

अंतिम निम्नलिखित स्टैक ट्रेस रूप में अच्छी तरह डीबगिंग उद्देश्यों के लिए फेंक दिया एक त्रुटि के कारण होता है फेंकता के लिए चल रहा है थ्रेड
को समाप्त करने का प्रयास करने के लिए जो अवैध पहुंच का कारण बनता है, और इसका कोई कार्यात्मक प्रभाव नहीं पड़ता है।

java.lang.IllegalStateException 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 
     at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4273) 
     at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1444) 
     at org.hibernate.connection.DriverManagerConnectionProvider.close(DriverManagerConnectionProvider.java:152) 
     at org.hibernate.connection.DriverManagerConnectionProvider.finalize(DriverManagerConnectionProvider.java:142) 
     at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) 
     at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) 
     at java.lang.ref.Finalizer.access$100(Finalizer.java:14) 
     at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) 

जब मैं अपने बिल्ला सर्वर को पुनः आरंभ मैं फिर से कनेक्ट करने के लिए Database.Please मुझे रास्ता है जिसके माध्यम से मैं सहज प्रदर्शन प्राप्त कर सकते हैं और काम बिल्ला को पुन: प्रारंभ बिना किया प्राप्त कर सकते हैं बता कर रहा हूँ।

उत्तर

5

आप शायद अधिक से अधिक कनेक्शन खोल रहे हैं और उन्हें कभी बंद नहीं कर रहे हैं, अंततः आपके डेटाबेस की कॉन्फ़िगर की गई अधिकतम कनेक्शन गणना तक पहुंच रहे हैं।

पता लगाएं कि आप कहां कनेक्शन खोल रहे हैं और सुनिश्चित करें कि आप उन्हें बंद कर रहे हैं। यदि आप प्रत्येक अनुरोध के लिए कनेक्शन खोलते हैं लेकिन इसे बंद नहीं करते हैं, तो यह ढूंढना और ठीक करना आसान है। या जब आपको कोई त्रुटि मिलती है तो हो सकता है कि आप कनेक्शन बंद न करें - अपना अपवाद हैंडलिंग कोड देखें। यदि यह मामला था, मैं एक त्रुटि 500 ​​और नहीं एक उम्मीद होती है,

Connection con; 
try { 
    con = ...; // open connection 
    // do work 
catch (SQLException e) { 
    // do whatever 
} finally { 
    if (con != null && !con.isClosed()) { 
     try { 
      con.close(); 
     catch (SQLException e) { 
      // Don't throw from here or you'll lose any return/exception from above 
      log.error("Failed to close connection", e); 
     } 
    } 
} 
+0

IMHO:

दृष्टिकोण की सिफारिश की है जब डीबी कनेक्शन का उपयोग बंद करने db कनेक्शन पर एक सबसे अच्छा प्रयास करने के लिए एक try finally उपयोग करने के लिए है यह बताया गया है। वास्तव में उन Servlets जिन्हें डीबी कनेक्शन की आवश्यकता नहीं है अभी भी काम करना चाहिए। – SJuan76

+0

वास्तव में उन Servlets जो डीबी की जरूरत नहीं है ठीक काम कर रहे हैं ... –

+0

फिर बोहेमियन के समाधान की तलाश करें (फिर भी मुझे लगता है कि यह एक बहुत अधिक मिस्लीडिंग संदेश है ...) – SJuan76