Tenemos un servidor java que se conecta a una base de datos MySQL 5 utilizando Hibernate como nuestra capa de persistencia que está utilizando c3p0 para la agrupación de conexiones DB.Hibernate c3p0 grupo de conexiones sin tiempo de espera conexiones inactivas
he tratado después de la hibernación c3p0 y documentación:
Estamos recibiendo un error de nuestra producción ser vers afirmando que:
... Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:
BEGIN NESTED EXCEPTION
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
MESSAGE: The last packet successfully received from the server was45000 seconds ago.The last packet sent successfully to the server was 45000 seconds ago, which 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 client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
STACKTRACE:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was45000 seconds ago.The last packet sent successfully to the server was 45000 seconds ago, which 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 client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
Tenemos nuestra conexión c3p0 propiedades del grupo de configuración de la siguiente manera:
hibernate.c3p0.max_size=10
hibernate.c3p0.min_size=1
hibernate.c3p0.timeout=5000
hibernate.c3p0.idle_test_period=300
hibernate.c3p0.max_statements=100
hibernate.c3p0.acquire_increment=2
El default MySQL wait_timetout se establece en 28.800 segundos (8 horas), el error reportado está diciendo que han pasado más de 45000 segundos (alrededor de 12,5 horas). Aunque la configuración de c3p0 establece que "descontinuará" las conexiones inactivas que no se han utilizado después de 5000 segundos y se comprobará cada 300 segundos, por lo tanto, una conexión inactiva nunca debería durar más de 5299 segundos ¿no?
He probado localmente configurando mi desarrollador MySQL (my.ini en Windows, my.cnf en Unix) wait_timeout = 60 y bajando los valores de tiempo de espera inactivo c3p0 por debajo de 60 segundos, y se espera el tiempo de inactividad y crea nuevos. También verifico para asegurarme de que no estamos filtrando las conexiones de DB y aferrándonos a una conexión, y no parece que lo estemos.
Aquí está el archivo c3p0.properties que estoy usando para probar en mi entorno de desarrollador para garantizar que c3p0 maneje las conexiones correctamente.
hibernate.properties (pruebas con MySQL wait_timeout = 60)
hibernate.c3p0.max_size=10
hibernate.c3p0.min_size=1
hibernate.c3p0.timeout=20
hibernate.c3p0.max_statements=100
hibernate.c3p0.idle_test_period=5
hibernate.c3p0.acquire_increment=2
c3p0.properties
com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=ALL
com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog
c3p0.debugUnreturnedConnectionStackTraces=true
c3p0.unreturnedConnectionTimeout=10
ver mi respuesta y comprobar también comprobar la matriz de compatibilidad ubicada en hibernate.org (aunque echo de menos c3p0 en esa matriz) – Schildmeijer