データベース接続に休止状態と OpenJPA を使用している Web アプリケーションがあります。しかし、アプリケーションが 8 時間以上アイドル状態になると、ログ ファイルに次のエラーが記録されます。
24 Nov 2012 05:54:28 1206290820 [http-8080-20] ERROR org.hibernate.util.JDBCExce
ptionReporter - The last packet successfully received from the server was 118,4
45,988 milliseconds ago. The last packet sent successfully to the server was 11
8,445,989 milliseconds ago. is longer than the server configured value of 'wait_
timeout'. You should consider either expiring and/or testing connection validity
before use in your application, increasing the server configured values for cli
ent timeouts, or using the Connector/J connection property 'autoReconnect=true'
to avoid this problem.
24 Nov 2012 05:54:28 1206290820 [http-8080-20] DEBUG org.hibernate.ejb.AbstractE
ntityManagerImpl - mark transaction for rollback
24 Nov 2012 05:54:28 1206290820 [http-8080-20] ERROR root - org.hibernate.excep
tion.JDBCConnectionException: could not execute query
次のpersistence.xmlエントリがあります
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.connection.url" value="jdbc:mysql://xxx.xxx.xxx.xxx:3306/lbs?autoReconnect=true"/>
<property name="hibernate.c3p0.min_size" value="5"/>
<property name="hibernate.c3p0.max_size" value="20"/>
<property name="hibernate.c3p0.timeout" value="1800"/>
<property name="hibernate.c3p0.max_statements" value="50"/>
<property name="hibernate.c3p0.idle_test_period" value="1800"/>
<property name="c3p0.idleConnectionTestPeriod" value="1810"/>
他の質問の1つで!Stackoverflow フォーラムでは、毎回 EntityManager オブジェクトを閉じる必要があると言っています。
私のアプリケーションでは、EntityManager に対して次のことを行っています
アプリケーション全体で使用しているシングルトン クラスとして EntityManager を作成しています。
何か不足していますか?
アップデート
c3p0 初期化のログ エントリは次のとおりです。
INFO org.hibernate.connection.ConnectionProviderFactory - Initializing connection provider: org.hibernate.connection.C3P0ConnectionProvider
INFO org.hibernate.connection.C3P0ConnectionProvider - C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://xxx.xxx.xxx.xxx:3306/lbs?autoReconnect=true
INFO org.hibernate.connection.C3P0ConnectionProvider - Connection properties: {user=****, password=****, autocommit=true, release_mode=auto}
INFO org.hibernate.connection.C3P0ConnectionProvider - autocommit mode: true
WARN org.hibernate.connection.C3P0ConnectionProvider - Both hibernate-style property 'hibernate.c3p0.idle_test_period' and c3p0-style property 'c3p0.idleConnectionTestPeriod' have been set in hibernate.properties. Hibernate-style property 'hibernate.c3p0.idle_test_period' will be used and c3p0-style property 'c3p0.idleConnectionTestPeriod' will be ignored!
INFO com.mchange.v2.log.MLog - MLog clients using log4j logging.
INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]
DEBUG com.mchange.v2.c3p0.management.DynamicPooledDataSourceManagerMBean - MBean: com.mchange.v2.c3p0:type=PooledDataSource[2ryrhz8rc8xlpn1l7vn76|1b15828] registered.
DEBUG com.mchange.v2.c3p0.management.DynamicPooledDataSourceManagerMBean - MBean: com.mchange.v2.c3p0:type=PooledDataSource[2ryrhz8rc8xlpn1l7vn76|1b15828] unregistered, in order to be reregistered after update.
DEBUG com.mchange.v2.c3p0.management.DynamicPooledDataSourceManagerMBean - MBean: com.mchange.v2.c3p0:type=PooledDataSource[2ryrhz8rc8xlpn1l7vn76|1b15828] registered.
INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@a340a84b [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@454eed4 [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 2ryrhz8rc8xlpn1l7vn76|8010fe, idleConnectionTestPeriod -> 1800, initialPoolSize -> 5, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 1800, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 5, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@f50d6507 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 2ryrhz8rc8xlpn1l7vn76|1233a8e, jdbcUrl -> jdbc:mysql://xxx.xxx.xxx.xxx:3306/lbs?autoReconnect=true, properties -> {user=******, password=******, autocommit=true, release_mode=auto} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 2ryrhz8rc8xlpn1l7vn76|1b15828, numHelperThreads -> 3 ]
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - incremented pending_acquires: 1
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - incremented pending_acquires: 2
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - incremented pending_acquires: 3
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - incremented pending_acquires: 4
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - incremented pending_acquires: 5
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - com.mchange.v2.resourcepool.BasicResourcePool@1148d7f config: [start -> 5; min -> 5; max -> 20; inc -> 3; num_acq_attempts -> 30; acq_attempt_delay -> 1000; check_idle_resources_delay -> 1800000; mox_resource_age -> 0; max_idle_time -> 1800000; excess_max_idle_time -> 0; destroy_unreturned_resc_time -> 0; expiration_enforcement_delay -> 450000; break_on_acquisition_failure -> false; debug_store_checkout_exceptions -> false]
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - acquire test -- pool size: 0; target_pool_size: 5; desired target? 1
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - awaitAvailable(): [unknown]
DEBUG com.mchange.v2.resourcepool.BasicResourcePool - trace com.mchange.v2.resourcepool.BasicResourcePool@1148d7f [managed: 0, unused: 0, excluded: 0]