No se pudo abrir la sesión de Hibernate para la transacción en el primer inicio de sesión

Tengo una aplicación Spring Mvc operativa completa que se ejecuta con Spring Security, pero recibo el siguiente error cuando el servidor no ha estado activo por un tiempo y alguien intenta iniciar sesión:

HTTP Status 500 – Falló el procesamiento de la solicitud la excepción anidada es org.springframework.transaction.CannotCreateTransactionException: no se pudo abrir la sesión de hibernación para la transacción; la excepción anidada es org.hibernate.TransactionException: la transacción de inicio de JDBC ha fallado

Algunas veces después de (aproximadamente 5 segundos más tarde) comienza a funcionar normalmente.

Busqué y encontré este enlace: http://forum.spring.io/forum/spring-projects/data/13298-could-not-open-hibernate-session-for-transaction-jdbc-begin-failed pero i don ‘ t saber cómo “configurar las pruebas de conexión en la configuración del grupo de conexiones”.

¿Algún consejo?

EDITAR:

Encontré el siguiente enlace para configurar el grupo de configuración:

http://www.codingpedia.org/ama/tomcat-jdbc-connection-pool-configuration-for-production-and-development/

Así que traté de implementarlo en mi fuente de datos:

            

Pero termino recibiendo un error en validationInterval diciendo:

Se encontraron varias anotaciones en esta línea: – No se encontró un definidor para la propiedad ‘validationInterval’ en la clase ‘org.apache.commons.dbcp.BasicDataSource’

Sin un seguimiento de stack es difícil decirlo con seguridad, pero lo más probable es que esté tratando con conexiones de DB caducadas. Hibernate no puede iniciar una transacción porque la primera instrucción que intenta ejecutar (“INICIAR TRANSACCIÓN – a través de JDBC) falla. Una vez más, asumo que porque la conexión DB subyacente se invalidó mientras tanto .

Esto puede suceder debido a varias razones:

  • Configuración de DB (más probable)
  • red / firewall
  • ajustes locales, etc.

Sin embargo, independientemente de la fuente, tiene la opción de asegurarse de que esto no esté sucediendo. Si está utilizando una agrupación JDBC (como la agrupación JDBC de Tomcat ), puede configurar la agrupación para probar y volver a abrir las conexiones si es necesario. La configuración de testOnBorrow, por ejemplo, le indicaría al grupo que pruebe constantemente la conexión db antes de ofrecerla a la aplicación para su uso. Puede ajustar estas configuraciones para eliminar las preocupaciones relacionadas con el rendimiento.

INFORMACIÓN ADICIONAL

Está intentando implementar la multa de agrupación, pero recibió el nombre de variable: validationInterval incorrecto.

Recibes ese error porque BasicDataSource no tiene una variable con ese nombre, por lo que Spring no puede establecer la propiedad. Eche un vistazo al javadoc de BasicDataSource ( enlace ) para ver qué variables de configuración están disponibles para usted. La variable validationInterval se puede aplicar en la implementación de agrupación de tomcat (lo que sugerí anteriormente), la que elija no tiene esta característica.

Reemplazar

      

Con este:

    

La respuesta está en mi edición que fue agregar lo siguiente en mis beans que tienen los datos de conexión:

       

No sé por qué, pero la respuesta de @ Paweł Głowacz no funcionó para mí. Gracias por su ayuda chicos