Tôi đang sử dụng một Hồ bơi kết nối C3P0 với Hibernate để thực thi một số hoạt động JDBC. Tuy nhiên, tôi nhận được một lỗi "Closed Connection" (Lỗi SQL: 17008, SQLState: null) sau một thời gian sử dụng.Đối số "kết nối" của doWork() có bị đóng không?
Tôi đang sử dụng giao diện org.hibernate.jdbc.Work để thực hiện các hoạt động của tôi:
public class ClassThatDoesWork implements Work {
@Override
public void execute(final Connection connection)
throws SQLException {
doSomeWork();
//should connection be closed here?
}
}
Câu hỏi của tôi là: nên đối tượng connection
thông qua như là một cuộc tranh cãi với phương pháp execute()
bị đóng cửa vào cuối của phương pháp đó hoặc Hibernate sẽ chăm sóc cho điều đó tự động?
EDIT Đây là những thông số Hibernate và C3P0 sử dụng:
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
Mỗi khi tôi sử dụng C3P0, cài đặt của nó được chỉ định mà không có tiền tố ngủ đông. I E. c3p0.min_size = 5 thay vì hibernate.c3p0.min_size = 5. Xin vui lòng thử các thiết lập c3p0.idle_test_period theo câu trả lời của tôi. – 01es
Vui lòng xem [phần này của tài liệu c3p0] (http://www.mchange.com/projects/c3p0/index.html#hibernate-specific). Các thuộc tính thực sự có tiền tố là "hibernate.c3p0". Tôi sẽ quay trở lại khi tôi thử cài đặt c3p0.idle_test_period. – nekojsi
Xin lỗi, nó chỉ ra rằng chúng tôi đã không sử dụng C3P0 ở tất cả, vì nó đã không được chọn chính xác như một phụ thuộc, vì vậy điều này có thể sẽ khắc phục vấn đề "Connection Closed", bất kể thuộc tính c3p0.idle_test_period. Tuy nhiên, tôi vẫn quan tâm nếu đối tượng 'connection' nên được duy trì bởi mã của tôi hoặc Hibernate sẽ tự động xử lý nó. – nekojsi