2012-01-09 11 views
6

मैं अपने ऐप्स चलाते समय इस तरह की त्रुटि में टक्कर लगी हूं। यह कभी-कभी होता है इसलिए मुझे नहीं पता कि मेरे कोड में वास्तव में यह त्रुटि क्या उत्पन्न होती है। अपवाद कोई स्पष्ट विवरण नहीं बताता है।इस त्रुटि का कारण java.lang.IllegalStateException: अज्ञात कनेक्शन 2 वापस करने का प्रयास कर रहा है?

स्टैकट्रैक का एक टुकड़ा।

java.lang.IllegalStateException: Trying to return an unknown connection2! [email protected]1 
    at org.jboss.resource.connectionmanager.CachedConnectionManager.unregisterConnection(CachedConnectionManager.java:330) 
    at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:720) 
    at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362) 
    at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155) 
    at org.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:97) 

वहाँ किसी को भी, जो इस त्रुटि encounetered से पहले मदद कृपया है। मैं jboss 6, seam 2, jsf 2 और richfaces का उपयोग कर रहा हूं 3.

उत्तर

8

इसका उत्तर JBoss wiki में दिया गया है। यहां प्रासंगिकता का एक उद्धरण दिया गया है:

कई दृढ़ता ढांचे (हाइबरनेट 2/ओबीजे) यादृच्छिक रूप से "खुले और बंद कनेक्शन"। जहां तक ​​जेबॉस का संबंध है, ऐसा लगता है कि एक ईजेबी कनेक्शन आवंटित करता है और दूसरा इसे बंद कर देता है। कनेक्शन करीबी जांच इस व्यवहार को समझ में नहीं आता है। यह वही ईजेबी की अपेक्षा करता है जिसने कनेक्शन को आवंटित करने के लिए आवंटित किया।

यदि आप इस तरह के पैटर्न या ऐसे ढांचे का उपयोग करते हैं, तो आप इस संदेश को बंद कर सकते हैं (नीचे देखें) लेकिन कनेक्शन लीक का पता लगाने के समय आप स्वयं ही हैं। 3.2.6 से CachedConnectionManager पर "listInUseConnections()" है।

हालांकि, कुछ लेनदेन सीमांकन अर्थशास्त्र के साथ यह known issue है। यह वास्तव में एक जेबॉस उपयोग नहीं है, और अधिक है कि थ्रेडलोकल पैटर्न जे 2 ईई अर्थशास्त्र को बाईपास करते हैं।

यदि आप समस्या को दबाते हैं, तो cachedConnectionInterceptor को conf/standardjboss.xml में इंटरसेप्टर स्टैक से हटाकर नकली संदेश का कामकाज होगा। विशेष रूप से Hibernate2 के साथ, यह सुरक्षित है क्योंकि आप कम से कम कनेक्शन को बंद करने के लिए हाइबरनेट पर भरोसा कर सकते हैं बशर्ते आप उपयोगकर्ता लेनदेन को सही ढंग से समाप्त कर दें।

कैश्डकनेक्शनइंटरसेप्टर को हटाने के लिए, conf/standardjboss.xml संपादित करें और इंटरसेप्टर के सभी संदर्भों को हटा दें।

<container-configuration> 
    <container-name>Standard Stateless SessionBean</container-name> 
    <call-logging>false</call-logging> 
    <invoker-proxy-binding-name>stateless-http-invoker</invoker-proxy-binding-name> 
    <container-interceptors> 
    ... 
    <interceptor>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</interceptor> 

Hibernate3 other mechanisms प्रदान करता है सत्र (और कनेक्शन) का प्रबंधन करने और इस प्रकार यह इस समस्या से बचने के लिए आसान है: ये कुछ ऐसी दिखाई देगी।

+0

आपको बहुत बहुत धन्यवाद। यह बहुत उपयोगी है। :) –

+0

आपका स्वागत है। – BalusC