Превентивно и изящно проверьте, что org.hibernate.Session все еще подключен (через c3p0)

Я работаю в среде многозадачных баз данных, в которой время простоя шарда не является фатальным. Когда приложение запускается, вся информация шарда загружается в кеш иSession загруженные объекты, однако, ожидается, что во время работы приложения некоторые шарды могут выйти из строя, и в этом случае приложение переключается на один из оставшихся шардов. Это почти стандартный сценарий использования.

В некоторых случаях мне нужно выполнить сканирование между осями, и способ, которым я это делаю, заключается в переборе карты сеансов, описанной выше, и получении данных. Проблема возникает, когда у меня есть сеанс Hibernate для базы данных, которая отключилась за время, прошедшее с момента открытия сеанса. Я хотел бы иметь упреждающий способ проверки, что БД не работает, без попытки транзакции и полученияorg.hibernate.exception.GenericJDBCExceptionЭто то, что я сейчас выясняю, но это плохо, потому что это исключение во время выполнения, среди всех других зол. Я тоже пробовалSession.isOpen() а такжеSession.isConnected()но оба метода возвращают true, даже когда база данных не работает.

Есть ли способ проверить подключение сеанса Hibernate превентивно и изящно? Что-то вроде отправки пинга в БД. Также стоит знать, что мы используемc3p0 для пула подключений. Можно ли настроить его так, чтобы он сообщал Hibernate о том, что соединение отключено, и закрывает / отключает связанный сеанс?

Ответы на вопрос(1)

Ваш ответ на вопрос