7

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 
+0

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

Respuesta

3

Asegúrese de que c3p0 realmente está empezando por examinar el registro. Yo, por alguna razón, tenía dos versiones de hibernate (hibernate-core3.3.1.jar e hibernate-3.2.6GA.jar) en mi classpath. También utilicé las anotaciones de hibernación versión 3.4.0GA que no es compatible con 3.2.x. (no sé si eso tuvo algo que ver con el problema original). Después de la eliminación de uno de los jar de hibernación (no puedo recordar cuál eliminé, probablemente hibernate-3.2.6GA.jar) c3p0 finalmente comenzó y me deshice de la molesta com.mysql.jdbc.exceptions.jdbc4.CommunicationsException que pasó efter 8h inactividad.

+0

Estamos utilizando Hibernate Hibernate 3.2.6, con anotaciones Hibernate 3.4.0GA, y no tienen excepciones notables (¿los problemas solo surgen cuando se trata de c3p0 después de 8 horas o si no notamos lo contrario). Estamos viendo que C3P0 se está configurando y se usa en nuestros registros (una vez que inicié sesión con c3p0.properties) p. "[INFO] Inicializando c3p0 pool ... com.mchange.v2.c3p0.PoolBackedDataSource ... idleConnectionTestPeriod -> 20,, maxIdleTime -> 60 ... " – Dougnukem

+0

intente actualizar hibernate a 3.3.X, la combinación anterior no es compatible con hibernate. (O degradación de la anotación hibernate) – Schildmeijer

+0

¿intentó algo? ¿Alguna suerte todavía? – Schildmeijer

Cuestiones relacionadas