Cuando configuro hibernación para conectarme a un DB y por alguna razón la conexión falla, noté que no arroja ninguna excepción al construir la fábrica (lo cual es aceptable) ni cuando llamo sessionFactory.openSession() (que es menos aceptable). Lo que es más molesto es que session.isConnected() devuelve true después de llamar a sessionFactory.openSession(). (Lo cual es totalmente inaceptable).Hibernate no lanzando excepción cuando se llama a openSession y no se puede establecer la conexión a DB
La única pista hasta ese momento que me dice que no se ha conectado a la base de datos es una entrada de registro WARN causada por una java.sql.SQLException que atrapa internamente y simplemente envía al registrador. Además de crear una pseudo transacción para forzar una excepción, ¿hay alguna otra manera de obtener el estado de la conexión? (Tal vez una opción en la configuración que dice "no registrar el intento de conexión fallida, sino lanzar una excepción de hibernación). He buscado pero no encontré nada. Muchas gracias.
Permítanme aclarar tres cosas aquí: 1) la excepción solo se lanzará si el grupo no puede obtener o crear una conexión funcional; no se lanzará simplemente porque una conexión en particular ha fallado; 2) Hibernate no intentará obtener una conexión hasta que realmente se necesite: 'openSession()' no ** obtiene **; 3) Hibernate no ocultará la excepción de conexión; Sin embargo, lo convertirá en JDBCException que no está marcado, que es lo que debería capturar. – ChssPly76
No estoy seguro de por qué le preocupa tanto que la conexión no se detecte _inmediatamente_ en lugar de cuando realmente intenta hacer algo con ella; pero si lo haces, llama a 'openSession(). connection()' que ** WILL ** intentará obtenerlo y capturará 'JDBCException' de donde puedes obtener' SQLException' anidado si falla. – ChssPly76
su primer comentario clarificó las cosas. Ahora, lo único que parece extraño y muy contrario a la intuición es este: ya que como dijiste Hibernate no intentará obtener conexión si no la necesita, ¿de qué sirve tener un método Session.isConnected()? ¿Debo haber intentado ya obtener una conexión de alguna manera para confiar en el valor de retorno de isConnected()?Si es así, entonces no lo necesito porque obtendré una excepción en el intento. No tiene sentido ... – Paralife