2016-03-02 8 views
6

पुन: लोड मैं हाइबरनेट आवेदन के साथ वसंत पर काम कर रहा हूँ, आवेदन ठीक काम कर रहा है, लेकिन शुरू करने या बिल्ला सर्वर को फिर से लोड करते हुए, मैं java.lang.IllegalStateException अपवाद हो रही है।java.lang.IllegalStateException जबकि बिलाव सर्वर

क्या कोई यह समझा सकता है कि यह अपवाद क्यों होता है और इसे कैसे हल किया जाए ??

INFO: Illegal access: this web application instance has been stopped already. Could not load java.net.BindException. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. 
      java.lang.IllegalStateException 
       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) 
       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
       at com.mysql.jdbc.SQLError.createLinkFailureMessageBasedOnHeuristics(SQLError.java:1220) 
       at com.mysql.jdbc.exceptions.jdbc4.CommunicationsException.<init>(CommunicationsException.java:57) 
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
       at java.lang.reflect.Constructor.newInstance(Unknown Source) 
       at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) 
       at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) 
       at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3270) 
       at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1659) 
       at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4296) 
       at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1265) 
       at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2667) 
       at java.lang.System$2.invokeFinalize(Unknown Source) 
       at java.lang.ref.Finalizer.runFinalizer(Unknown Source) 
       at java.lang.ref.Finalizer.access$100(Unknown Source) 
+0

ऐप के पुराने संस्करण को कैशिंग करने के कारण टोमकैट साफ़ करें। और उसके बाद ऐप –

+0

@BaskerAmmu कैसे साफ़ करें? –

उत्तर

5

मैं विकल्पों की आप जोड़े को देना चाहता हूँ को हटाना होगा। आप इसे आज़मा सकते हैं। कोई भी विकल्प आपकी मांग को पूरा कर सकता है।

  1. Restart your tomcat and apache server का उपयोग करने का एक लंबे समय, यह आपके आवेदन के पुराने संस्करण रहता है क्योंकि।
  2. स्वच्छ अपने बिल्ला temp निर्देशिका और restart
  3. के रूप में त्रुटि में कहा गया है,

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

यह वास्तविक कारण हो सकता है कि इस समय आप डिबगिंग मोड में हैं और यह चल रहे थ्रेड को साफ़ नहीं करता है। तो अपने को तोड़ने बिंदु को हटाने और इसे चलाने के डिबगिंग नहीं

  1. अपने कोड है जो ठीक से समाप्त नहीं कर रहे हैं धागा किसी भी तरह का होता है, तो इस प्रकार की त्रुटि हो सकती है। कि आपके पास init() विधि है लेकिन destroy() विधि नहीं है, तो इस प्रकार की त्रुटि हो सकती है। http://www.javaspecialists.eu/archive/Issue056.html

  2. अगर webapp has stopped, or is stopping, इसका मतलब है कि .war फ़ाइल या WEB-INF/web.xml टाइमस्टैम्प बदल गया है, और webapp पुन: लोड किया जा सकता है - जानकारी के लिए, आप लिंक का पालन कर सकते हैं। कृपया टाइमस्टैम्प जांचें ठीक है या नहीं।

  3. इसे बंद करने के लिए, सेट फिर से लोड करने = "false" अपने अनुप्रयोग के संदर्भ परिभाषा। यह टोमकैट server.xml हो सकता है। विवरण में समाधान: पुनः लोड करने योग्य संदर्भ का tomcat's server.xml गलत पर सेट है। उदाहरण के लिए:

 
Context path="/expert" docBase="expert" debug="0" reloadable ="false"/> 

समाधान आसान है, जब तक reloadable = "true" into false लाइन पर में बिल्ला के server.xml के रूप में है, लेकिन ऐसा करने के लिए गर्म तैनाती का लाभ खो देंगे और विकास के लिए है बहुत सुविधाजनक नहीं है, बस इसे बदलें या नहीं। यह त्रुटि कोई फर्क नहीं पड़ता।

त्रुटि सिद्धांत:

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

अगर आप बिलाव reloadable = true कर दिया, तो जब भी प्रासंगिक दस्तावेजों बदलने के लिए, बिलाव वेब अनुप्रयोग बंद हो जाता है और स्मृति भी मुक्त हो जाता है, और फिर पुनः लोड वेब अप्प। यह एक बड़ी परियोजना हो सकती है। इसलिए हम हमेशा सोचते हैं कि अधिभारित कार्यों का केवल एक निश्चित वर्ग है, जो हमारे डीबगर से काफी मिलेंगे।

अद्यतन: के लिए कोड से संबंधित मुद्दे

सबसे पहले, मैं आपको बताना चाहता हूँ कि मैं तुम्हें बिल्ला आधार के लिए कुछ समाधान दे दिया है चाहता हूँ। अब मैं आपको कोड आधार के लिए समाधान देना चाहता हूं। क्या आप इस मुद्दे के साथ अपना कोड जांच लेंगे? कृपया यूआरएल का पालन करें।

  1. http://www.coderanch.com/t/660126/Wiki/Illegal-State-Exception

अद्यतन: MySQL संबंधित मुद्दे के लिए

  1. वहाँ 2 मुद्दे हैं।

    • यह वेब एप्लिकेशन उदाहरण पहले ही बंद कर दिया गया है। java.net.BindException लोड नहीं हो सका।

    • यह वेब एप्लिकेशन उदाहरण पहले से ही बंद कर दिया गया है। com.mysql.jdbc लोड नहीं किया जा सकता है।

इसका कारण यह है WEB-INF/lib निर्देशिका के अंतर्गत आवेदन पर MySQL JDBC ड्राइवर, इसकी की फिर से रिलीज में दो बार भरी हुई है, इतने लंबे समय के %TOMCAT_HOME%/lib के रूप में इसे कॉपी किया जा सकता समस्या का समाधान कर सकते हैं । हम इन दो विसंगतियों को हल कर सकते हैं MySQL ड्राइवर WEB-INF/lib फ़ोल्डर से %TOMCAT_HOME%/lib पर ले जाया गया।

  1. मुझे संदेह है कि वेब एप्लिकेशन पुनरारंभ होने के बाद यह हो रहा है, जहां यह थोड़े समय के लिए नीचे है। फिर कोड में finalize() विधि शायद कुछ देर से कुछ सफाई करने की कोशिश कर रही है। चाहे वह आपके कोड या MySQL ड्राइवर में है या नहीं, मैं नहीं कह सकता। आपको निश्चित रूप से एक समय में एक निर्देशिका में एक जार का एक संस्करण होना चाहिए।आप मामले में कुछ तय किया गया है कि आप प्रभावित हो सकता है में latest करने के लिए इसे उन्नत करने के लिए (5.1.38 अभी) चाहते हो सकता है (संख्या 9 @ WhiteFang34 से कॉपी किया जाता है)

9 के लिए संबंधित लिंक:।tomcat 6.0.24 Exception: Could not load com.mysql.jdbc.SQLError

+0

मैं पहले से ही करने की कोशिश की 1, 2, 3, 5 ,, इन नहीं मेरे लिए काम .. और im अपने आवेदन में किसी भी धागा का उपयोग नहीं .. मैं भी 6 की कोशिश की लेकिन मैं अपने आवेदन को फिर से लोड करना चाहते हैं जब बदलाव बना रहे हैं .. –

+1

@SantoshJadi मैं जानता हूँ कि 6 भयानक है, लेकिन यह – SkyWalker

+1

हाँ यह काम करता है काम करता है लेकिन कुछ क्या इसका एक नुकसान की तरह;। ( –

1

समस्या सर्वर कैश की वजह से थी। इस मुद्दे

  1. ठीक करने के लिए निर्देशिका अपने बिल्ला के रूट निर्देशिका
  2. के तहत "काम" कहा जाता है का पता लगाएं इसे हटा दें पूरी तरह से
  3. पुनरारंभ सर्वर

समस्या ठीक किया जाएगा नीचे दिए गए चरणों का पालन करें।

नोट: मामले में आप Linux मशीन में डिफ़ॉल्ट बिल्ला स्थापना है, तो आप फोल्डर /var/cache/tomcat7/Catalina

+0

या मैंने ऐसा किया लेकिन फिर भी मुझे वही मिल रहा है .. –

+0

@ संतोष जादी: '/temp /' के अंतर्गत फ़ाइलों को हटाने का प्रयास करें और पुनरारंभ करें। – Thanga

+0

अस्थायी निर्देशिका पहले से ही खाली है –

1

समस्या एक साधारण SQL त्रुटि हो सकती है। टी

java.lang.IllegalStateException 

का अर्थ है कि किसी ऑब्जेक्ट या क्लास को कॉल करने के लिए तैयार नहीं होने पर कहा जाता था। ढेर

at java.lang.ref.Finalizer.runFinalizer(Unknown Source) 
at java.lang.ref.Finalizer.access$100(Unknown Source) 
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source) 

देखो के निचले भाग में इन त्रुटियों को वे MySQL Object Pointers कि एक रिबूट के दौरान अस्थायी रूप से unreferenced थे साफ करने के लिए प्रयास कर रहा Java Garbage Collector से आते हैं। ऐसा लगता है कि यहां आपकी त्रुटि कुछ माईएसQL ऑब्जेक्ट पॉइंटर्स निष्पादन के बीच में रुक गई है जब जीसी अपनी अंतिम विधियों को कॉल करता है और फिर ऑब्जेक्ट को साफ़ करने का प्रयास करने के लिए एप्लिकेशन को रोक देता है। (एक असफल और इस अपवाद के एक फेंक करने के लिए अग्रणी) यह त्रुटि की संभावना सबसे अधिक हानिरहित है, और शायद अपने मुख्य थ्रेड में कोई

JNI_DestroyJavaVM(); 

जोड़ने शटडाउन होने पर निष्पादित किया जाना द्वारा निर्धारित किया जा सकता है।

+0

im से Oracle जावा प्रलेखन अपने आवेदन –

+0

बोली में किसी भी धागा का उपयोग नहीं: "वी एम JNI_CreateJavaVM() फ़ंक्शन भार बनाना और एक जावा वी एम initializes और JNI इंटरफ़ेस सूचक के लिए सूचक रिटर्न धागा कि JNI_CreateJavaVM कहा जाता है() है। मुख्य धागा माना जाता है "जब भी आप जावा का उपयोग करते हैं तो आप एक वर्चुअल मशीन बना रहे हैं जो आपके द्वारा असाइन किए गए कार्यों को पूरा करता है और फिर समाप्त हो जाता है। –

2

मुझे लगता है कि इस समस्या का मूल कारण यह है कि कुछ जेडीबीसी Connection ऑब्जेक्ट्स लीक कर रहा है।

ये वस्तुएं वास्तव में com.mysql.jdbc.ConnectionImpl के उदाहरण हैं ... जो finalize() वाली कक्षा है। आम तौर पर, ऑब्जेक्ट फाइनलाइजेशन लीक कनेक्शन को साफ करता है। इस मामले में, यह घटनाओं के अनुक्रम की तरह दिखता है इस प्रकार है:

  • जीसी चलाता है के बाद webapp बंद है
  • एक ConnectionImpl वस्तु
  • वस्तु की अंतिम रूप देने() विधि का प्रयास तक नहीं पहुंचा जा पाई जाती है बंद करने के लिए MySQL डेटाबेस कनेक्शन ... जो सर्वर
  • जब संदेश भेजने किसी कारण से विफल रहता है पर एक संदेश भेज जरूरत पर जोर देता है, और संचारों स्तर कोड com.mysql.jdbc.SQLError.createCommunicationsException
  • बनाने की कोशिश करता है कि फोन करके एक अपवाद बनाने की कोशिश करता है एक अपवाद को प्रतिबिंबित ..

अंतिम चरण विफल रहा है क्योंकि यह वेबपैप के लिए वेबएप के क्लासलोडर का उपयोग करने का प्रयास कर रहा है ... जिसे बंद कर दिया गया है। जाहिर है, यह एक चेक द्वारा पता चला है जिसका उद्देश्य प्रोग्रामर को वेबपैप्स का निदान करने में मदद करना है जो साफ़ रूप से बंद नहीं होते हैं।

सबसे अच्छा समाधान Connection रिसाव के स्रोत को ट्रैक करना और इसे ठीक करना है। यदि Connection ऑब्जेक्ट्स रिसाव नहीं किया गया है, तो वे बंद हो जाएंगे जबकि वेबएप का क्लासलोडर अभी भी सक्रिय था।

वैकल्पिक रूप से, आप बस स्काईवाल्कर के उत्तर में वर्णित चेक को बंद कर सकते हैं।

संबंधित मुद्दे