Używam puli połączeń C3P0 z Hibernacja do wykonywania niektórych operacji JDBC. Jednak otrzymuję komunikat "Błąd połączenia" (błąd SQL: 17008, SQLState: null) po pewnym czasie użytkowania.Czy powinien zostać zamknięty argument "connection" dla doWork()?
Używam interfejsu org.hibernate.jdbc.Work wykonywać swoje operacje:
public class ClassThatDoesWork implements Work {
@Override
public void execute(final Connection connection)
throws SQLException {
doSomeWork();
//should connection be closed here?
}
}
Moje pytanie brzmi: czy obiekt connection
przekazany jako argument do metody execute()
być zamknięty pod koniec tej metody lub hibernacji dba do tego automatycznie?
EDIT Są to parametry hibernacji i C3P0 stosowane:
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
Za każdym razem, gdy korzystam z C3P0, jego ustawienia są określone bez prefiksu hibernacji. To znaczy. c3p0.min_size = 5 zamiast hibernate.c3p0.min_size = 5. Pls również wypróbować ustawienie c3p0.idle_test_period według mojej odpowiedzi. – 01es
Patrz [ta część dokumentacji c3p0] (http://www.mchange.com/projects/c3p0/index.html#hibernate-specific). Właściwości są poprzedzone prefiksem "hibernate.c3p0". Wrócę, gdy spróbuję ustawienia c3p0.idle_test_period. – nekojsi
Niestety, okazało się, że w ogóle nie korzystaliśmy z C3P0, ponieważ nie zostało ono poprawnie odebrane jako zależność, więc prawdopodobnie naprawi problem "Connection Closed", niezależnie od właściwości c3p0.idle_test_period. Jednak nadal jestem zainteresowany, czy obiekt 'connection' powinien być obsługiwany przez mój kod, czy też Hibernate zajmie się nim automatycznie. – nekojsi