Compruebe de manera preventiva y con gracia que org.hibernate.Session todavía está conectada (a través de c3p0)

Estoy trabajando en un entorno de base de datos con múltiples niveles de interés en el que el tiempo de inactividad de un fragmento no es fatal. Cuando se inicia la aplicación, toda la información del fragmento se carga en un caché y los respectivosSession sin embargo, los objetos cargados, se espera que durante el tiempo de actividad de la aplicación algunos de los fragmentos se caigan, en cuyo caso la aplicación falla en uno de los fragmentos restantes. Es casi un caso de uso estándar.

En algunos casos, necesito hacer un escaneo de fragmentos cruzados y la forma en que lo hago es iterar a través del mapa de sesiones descrito anteriormente y recuperar datos. El problema surge cuando tengo una sesión de Hibernate en una base de datos que se redujo mientras tanto, desde que se abrió la sesión. Me gustaría tener una forma preventiva de verificar que el DB esté inactivo sin intentar realizar una transacción y obtenerorg.hibernate.exception.GenericJDBCException, que es la forma en que lo estoy descubriendo ahora, pero eso es malo porque es una excepción de tiempo de ejecución, entre todos los otros males. Yo tambien lo intentéSession.isOpen() ySession.isConnected()pero ambos métodos devuelven verdadero incluso cuando la base de datos está fuera de servicio.

¿Hay alguna forma de verificar la conectividad de una sesión de Hibernate de forma preventiva y con gracia? Algo así como enviar un ping a la base de datos. También puede valer la pena saber que estamos usandoc3p0 para la puesta en común de conexiones. ¿Hay alguna manera de configurarlo para decirle a Hibernate que una conexión está inactiva y cerrar / desconectar la sesión asociada?

Respuestas a la pregunta(1)

Su respuesta a la pregunta