Wstępnie i z wdziękiem sprawdź, czy org.hibernate.Session jest nadal połączona (przez c3p0)

Pracuję w wielostronnym środowisku bazy danych, w którym przestój fragmentu nie jest śmiertelnym zdarzeniem. Po uruchomieniu aplikacji wszystkie informacje o odłamkach są ładowane do pamięci podręcznej i odpowiednioSession obiekty ładowane, jednak oczekuje się, że w czasie działania aplikacji niektóre odłamki mogą ulec awarii, w którym to przypadku aplikacja przechodzi do jednego z pozostałych fragmentów. Jest to niemal standardowy scenariusz przypadku użycia.

W niektórych przypadkach muszę wykonać skanowanie międzykanałowe, a sposób, w jaki to robię, to iterowanie przez mapę sesji opisanych powyżej i pobieranie danych. Problem pojawia się, gdy mam sesję Hibernate do bazy danych, która spadła w międzyczasie od momentu otwarcia sesji. Chciałbym mieć prewencyjny sposób sprawdzenia, czy baza danych nie działa bez próby przeprowadzenia transakcjiorg.hibernate.exception.GenericJDBCExceptionW ten sposób odkrywam to teraz, ale jest to zły powód, ponieważ jest to wyjątek czasu rzeczywistego, wśród wszystkich innych rodzajów zła. Próbowałem teżSession.isOpen() iSession.isConnected()ale obie metody zwracają wartość true, nawet gdy baza danych jest wyłączona.

Czy istnieje sposób sprawdzenia łączności sesji Hibernate z wyprzedzeniem i wdziękiem? Coś w stylu wysyłania polecenia ping do bazy danych. Warto też wiedzieć, że używamyc3p0 do zestawiania połączeń. Czy jest sposób, w jaki mogę go skonfigurować, aby poinformować Hibernate, że połączenie jest wyłączone i zamknąć / rozłączyć powiązaną sesję?

questionAnswers(0)

yourAnswerToTheQuestion