Sto utilizzando un pool di connessioni C3P0 con Hibernate per eseguire alcune operazioni JDBC. Tuttavia, ricevo un errore "Closed Connection" (errore SQL: 17008, SQLState: null) dopo un certo periodo di utilizzo.L'argomento "connessione" di doWork() deve essere chiuso?
Sto usando l'interfaccia org.hibernate.jdbc.Work per eseguire le mie operazioni:
public class ClassThatDoesWork implements Work {
@Override
public void execute(final Connection connection)
throws SQLException {
doSomeWork();
//should connection be closed here?
}
}
La mia domanda è: deve l'oggetto connection
passato come argomento al metodo execute()
essere chiusa alla fine di quel metodo o Hibernate si prende cura per quello automaticamente?
EDIT Questi sono i parametri Hibernate e c3p0 utilizzati:
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
Ogni volta che utilizzo C3P0, le sue impostazioni vengono specificate senza il prefisso di ibernazione. Cioè c3p0.min_size = 5 invece di hibernate.c3p0.min_size = 5. Pls prova anche l'impostazione c3p0.idle_test_period come da mia risposta. – 01es
Vedere [questa parte della documentazione di c3p0] (http://www.mchange.com/projects/c3p0/index.html#hibernate-specific). Le proprietà sono infatti precedute da "hibernate.c3p0". Tornerò dopo aver provato l'impostazione c3p0.idle_test_period. – nekojsi
Scusa, si scopre che non stavamo utilizzando C3P0, poiché non è stato rilevato correttamente come dipendenza, quindi questo probabilmente risolverà il problema "Connessione chiusa", indipendentemente dalla proprietà c3p0.idle_test_period. Tuttavia, sono ancora interessato se l'oggetto 'connection' debba essere mantenuto dal mio codice o Hibernate se ne occupa automaticamente. – nekojsi