2013-01-02 15 views
9

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

WARN com.mchange.v2.c3p0.impl.NewPooledConnection - [c3p0] A PooledConnection that has already signalled a Connection error is still in use! 
WARN com.mchange.v2.c3p0.impl.NewPooledConnection - [c3p0] Another error has occurred [ java.sql.SQLException: Invalid state, the Connection object is closed. ] which will not be reported to listeners! 
java.sql.SQLException: Invalid state, the Connection object is closed. 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.checkOpen(ConnectionJDBC2.java:1713) 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.clearWarnings(ConnectionJDBC2.java:2020) 
    at com.mchange.v2.c3p0.impl.NewProxyConnection.clearWarnings(NewProxyConnection.java:933) 
    at org.hibernate.util.JDBCExceptionReporter.handleAndClearWarnings(JDBCExceptionReporter.java:71) 
    at org.hibernate.util.JDBCExceptionReporter.logAndClearWarnings(JDBCExceptionReporter.java:49) 
    at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:472) 
    at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:429) 
    at org.hibernate.jdbc.ConnectionManager.afterStatement(ConnectionManager.java:304) 
    at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:572) 
    at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291) 
    at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:307) 
    at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:234) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1967) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.doList(Loader.java:2533) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
    at org.hibernate.loader.Loader.list(Loader.java:2271) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) 
org.hibernate.exception.JDBCConnectionException: could not execute query 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.loader.Loader.doList(Loader.java:2536) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
    at org.hibernate.loader.Loader.list(Loader.java:2271) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) 
Caused by: java.sql.SQLException: I/O Error: Software caused connection abort: recv failed 
    at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1053) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465) 
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:778) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1953) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.doList(Loader.java:2533) 
    ... 8 more 
Caused by: java.net.SocketException: Software caused connection abort: recv failed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:168) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at java.io.DataInputStream.readFully(DataInputStream.java:195) 
    at java.io.DataInputStream.readFully(DataInputStream.java:169) 
    at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:842) 
    at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:723) 
    at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466) 
    at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103) 
    at net.sourceforge.jtds.jdbc.ResponseStream.peek(ResponseStream.java:88) 
    at net.sourceforge.jtds.jdbc.TdsCore.wait(TdsCore.java:3932) 
    at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1046) 
    ... 16 more 

अद्यतन:

मेरा पहला कोड:

Session session = getSessionfactory().openSession(); 
session.beginTransaction(); 

ArrayList<Object[]> results = null; 
try { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("select p from person p "); 
    sb.append("where CONTAINS(p.name , :myName) "); 

    Query q = session.createSQLQuery(sb.toString()); 
    String myName = "Bob Jones"; 
    q.setString("myName", "*" + myName + "*"); 

    results = (ArrayList<Object[]>) q.list(); 

} catch (Exception e) { 
    logger.error("Error : ", e); 
} finally { 
    session.close(); 
} 

यह काम नहीं करता है, to fix it इस 2 संस्करण है:

Session session = getSessionfactory().openSession(); 
session.beginTransaction(); 

ArrayList<Object[]> results = null; 
try { 
    StringBuilder sb = new StringBuilder(); 
    sb.append("select p from person p "); 
    sb.append("where CONTAINS(p.name , :myName) "); 

    Query q = session.createSQLQuery(sb.toString()); 
    String myName = "Bob Jones"; 
    q.setString("myName", "\"*" + myName + "*\""); 

    results = (ArrayList<Object[]>) q.list(); 

} catch (Exception e) { 
    logger.error("Error : ", e); 
} finally { 
    session.close(); 
} 

को चलाने के लिए कोशिश कर रहा है दूसरा संस्करण, मुझे त्रुटि है bove।

उत्तर

7

आपका लेनदेन-प्रबंधन और/या कनेक्शन-प्रबंधन कोड शायद बंद है। ऐसा लगता है कि आप किसी त्रुटि के बाद कनेक्शन पूल से कनेक्शन जारी नहीं कर रहे हैं, और इसे पुन: उपयोग करने का प्रयास कर रहे हैं। यह एक गलत अपवाद-हैंडलिंग मुहावरे के कारण हो सकता है जिसका आप उपयोग कर रहे हैं।

+1

आपके उत्तर के लिए धन्यवाद, मुझे समझ में नहीं आता कि "आप त्रुटि के बाद कनेक्शन पूल से कनेक्शन जारी नहीं कर रहे हैं, और इसका पुन: उपयोग करने का प्रयास कर रहे हैं"। क्या आप समझा सकते हैं कि मुझे क्या करना चाहिए? – user1940268

+0

मैं आपका कोड, विशेष रूप से कनेक्शन अधिग्रहण/लेनदेन प्रबंधन भाग को देखे बिना आपकी सहायता नहीं कर सकता। –

+0

टॉपोलिंक मैं अपने अपडेट में अपना कोड पोस्ट करता हूं। – user1940268

1

जेटीडीएस का उपयोग करके आप शायद एमएस एसक्यूएल या साइबेस से कनेक्ट करने का प्रयास कर रहे हैं। आपके द्वारा पोस्ट किए गए कोड के आधार पर सब कुछ ठीक दिखता है। मेरा सुझाव है कि आप अपने ड्राइवर को अपग्रेड करना और अधिक लॉगिंग लॉग के लिए अपना लॉगिंग स्तर बढ़ाएं।

+0

आपके उत्तर के लिए धन्यवाद। मैं एमएस एसक्यूएल 2008 के साथ जेटीडीएस 1.2.4 का उपयोग करता हूं। क्या यह संभव है कि जेटीडीएस का यह संस्करण पैरामीटर नामक क्वेरी का समर्थन नहीं करता है? – user1940268

+0

मैं जेटीडीएस संस्करण को 1.2.7 और 1.3.0 के बाद अपग्रेड करने का प्रयास करता हूं, लेकिन यह समस्या को ठीक नहीं करता है – user1940268

+0

यदि sqlQuery में कोई त्रुटि है, तो c3p0 याद रखें या फिर भी इसे रखें? या c3p0 pooledConnection को "साफ" करने के लिए कोई कोड है? क्योंकि जब मैंने क्वेरी का परीक्षण किया, तो मुझे त्रुटि होगी [यहां] (http://stackoverflow.com/questions/14106239/how-to-use-the-named-parameters-with-contains) – user1940268

0

मेरा 2 प्रतिशत जोड़ने के लिए, ऐसा लगता है कि डेटाबेस के साथ नेटवर्क कनेक्टिविटी के साथ कुछ समस्या है।

Caused by: java.sql.SQLException: I/O Error: Software caused connection abort: recv failed

अन्य डीबी के साथ परीक्षण करने का प्रयास करें, ताकि यह जांच सके कि डीबी यादृच्छिक घटना का कारण हो सकता है या नहीं।

0

यह भी होता है यदि आपका पूल निष्क्रिय टाइमआउट (परीक्षण क्वेरी के साथ कनेक्शन जांचना) डेटाबेस कनेक्शन टाइमआउट (क्लाइंट से कुछ भी नहीं सुन रहा है) से पहले चलता है, यानी, डीबी सर्वर ड्रॉप करने का निर्णय लेता है और क्लाइंट को इसके बारे में पता नहीं है।