मैं कुछ जेडीबीसी संचालन निष्पादित करने के लिए हाइबरनेट के साथ एक सी 3 पी 0 कनेक्शन पूल का उपयोग कर रहा हूं। हालांकि, मुझे उपयोग के कुछ समय बाद "बंद कनेक्शन" (SQL त्रुटि: 17008, SQLState: null) त्रुटि मिल रही है।क्या DoWork() के "कनेक्शन" तर्क को बंद किया जाना चाहिए?
मैं org.hibernate.jdbc.Work इंटरफ़ेस का उपयोग कर रहा मेरी कार्रवाई करने:
public class ClassThatDoesWork implements Work {
@Override
public void execute(final Connection connection)
throws SQLException {
doSomeWork();
//should connection be closed here?
}
}
मेरा प्रश्न है: connection
वस्तु execute()
विधि के लिए एक तर्क के रूप में पारित उस विधि के अंत में बंद किया जाना चाहिए या हाइबरनेट ख्याल रखता है उसके लिए स्वचालित रूप से?
संपादित ये हाइबरनेट और c3p0 पैरामीटर का उपयोग किया हैं:
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.pool_size=10
hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider
hibernate.show_sql=false
acquireIncrement=3
acquireRetryDelay=500
acquireRetryAttempts=5
breakAfterAcquireFailure=false
checkoutTimeout=0
connectionTesterClassName=com.mchange.v2.impl.DefaultConnectionTester
debugUnreturnedConnectionStackTraces=false
dataSourceName=irrelevantDB
identityToken=irrelevantDB
idleConnectionTestPeriod=0
initialPoolSize=3
maxConnectionAge=0
maxIdleTime=7200
maxIdleTimeExcessConnections=0
maxPoolSize=20
maxStatements=50
maxStatementsPerConnection=0
minPoolSize=5
numHelperThreads=3
propertyCycle=0
testConnectionOnCheckin=false
testConnectionOnCheckout=true
unreturnedConnectionTimeout=0
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=10
hibernate.c3p0.max_statements=50
हर बार जब मैं C3P0 का उपयोग करता हूं, तो इसकी सेटिंग्स हाइबरनेट उपसर्ग के बिना निर्दिष्ट होती हैं। अर्थात। c3p0.min_size = 5 hibernate.c3p0.min_size = 5 के बजाय। कृपया मेरे उत्तर के अनुसार c3p0.idle_test_period सेटिंग भी आज़माएं। – 01es
कृपया देखें [c3p0 दस्तावेज का यह हिस्सा] (http://www.mchange.com/projects/c3p0/index.html#hibernate- विशिष्ट)। गुण वास्तव में "hibernate.c3p0" के साथ prefixed हैं। एक बार जब मैं c3p0.idle_test_period सेटिंग आज़माता हूं तो मैं वापस आऊंगा। – nekojsi
क्षमा करें, यह पता चला है कि हम C3P0 का उपयोग नहीं कर रहे थे, क्योंकि इसे निर्भरता के रूप में सही ढंग से नहीं चुना गया था, इसलिए यह c3p0.idle_test_period संपत्ति के बावजूद, "कनेक्शन बंद" समस्या को ठीक कर देगा। हालांकि, मुझे अभी भी दिलचस्पी है यदि 'कोड' ऑब्जेक्ट को मेरे कोड द्वारा रखा जाना चाहिए या हाइबरनेट स्वचालित रूप से इसकी देखभाल करता है। – nekojsi