Я использую пул соединений C3P0 с Hibernate для выполнения некоторых операций JDBC. Однако после некоторого времени использования я получаю сообщение об ошибке «Закрытое соединение» (ошибка SQL: 17008, SQLState: null).
Я использую интерфейс 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()
, закрываться в конце этого метода, или Hibernate позаботится об этом автоматически?
РЕДАКТИРОВАТЬ Это используемые параметры Hibernate и 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
connection
или Hibernate позаботится об этом автоматически. - person nekojsi   schedule 04.05.2012