7
私はいくつかのJDBC操作を実行するために、HibernateでC3P0接続プールを使用しています。しかし、私は、 "Closed Connection"(SQLエラー:17008、SQLState:null)というエラーが発生しました。doWork()の "connection"引数を閉じるべきですか?
私は私の操作を実行する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
オブジェクトは、そのメソッドの最後に閉鎖されるか、Hibernateは世話をする必要がありますそれは自動的にですか?
EDIT これらを使用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
私がC3P0を使用するたびに、その設定は休止状態のプレフィックスなしで指定されます。私。 hibernate.c3p0.min_size = 5の代わりにc3p0.min_size = 5。 Plsはまた、私の答えごとにc3p0.idle_test_period設定を試してみます。 – 01es
[c3p0ドキュメントのこの部分](http://www.mchange.com/projects/c3p0/index.html#hibernate-specific)を参照してください。プロパティの前には "hibernate.c3p0"という接頭辞が付いています。私はc3p0.idle_test_periodの設定を試してみると戻ってきます。 – nekojsi
申し訳ありませんが、C3P0をまったく使用していないことが判明しました。依存関係として正しく選択されていないため、c3p0.idle_test_periodプロパティに関係なく、「Connection Closed」問題が修正される可能性があります。しかし、 'connection'オブジェクトが自分のコードによって維持されるべきか、Hibernateが自動的にそれを世話する場合、私はまだ興味があります。 – nekojsi