Hibernate i Exception

0

Piszę w której wykorzystuję hibernate i chciałem zaimplementować obsługę wyjątków
oto pierwszy fragment kodu w którym wszystko działa świetnie

Configuration cfg = null;
try {
    cfg = new Configuration().configure("Hibernate.cfg.xml");
} catch(Exception e) {
    String alert;
    if (e.toString().length()>80) {
        alert=e.toString().substring(0, 80)+"...";
    } else {
        alert = e.toString();
    }
    error("Nie znaleziono pliku konfiguracyjnego Hibernate.cfg.xml\n"+alert);
    System.exit(0);
}    

natomiast kilka linii niżej mam kontynuację

       
SessionFactory initFactory = null;
if (status)
{
    try {                
        initFactory = cfg.buildSessionFactory();
    } catch(Exception e) {
        String alert = e.toString();
        error("Nie udało się podłączyć do bazy danych");
        System.exit(0);
    }
}

problem polega na tym że o ile w pierwszym przypadku wszystko działa bez problemu o tyle w drugim, bez względu na to czy wyłączę bazę, podam złą nazwę usera, bądź hasło wysypuje się program, w konsoli hibernate wypisuje przyczynę błędów, ale exception nic a nic nie wyłapuje, a powinien.

Oto zrzut fragmentu konsoli po wyłączeniu bazy i uruchomieniu programu:

INFO: connection properties: {user=leshqo, password=****}
2009-03-30 1848 org.hibernate.cfg.SettingsFactory buildSettings
WARNING: Could not obtain connection metadata
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Skoro tu jest podana przyczyna błędu to dlaczego exception tego nie wyłapał ??

Próbowałem oba fragmenty kodu zastąpić jednym znalezionym w jednym z podręczników hibernate ale nie pomogło.

try {
    Configuration cfg  = new Configuration().configure("Hibernate.cfg.xml");
    factory = cfg.buildSessionFactory();
} catch (Throwable ex) {
    ex.printStackTrace(System.out);
    throw new ExceptionInInitializerError(ex);
}

Gdzie szukać rozwiązania problemu

0

Dlaczego powinie złapać exception?

Fragment metody SettingsFactory.buildSettings


}
catch (SQLException sqle) {
   log.warn("Could not obtain connection metadata", sqle);
} 

0

exception java.sql.SQLException is never thrown in body of corresponding try statement

Zaznaczę że próbowałem wcześniej z HibernateException i JDBCConnectionException i choć przy tych kompilator nie protestuje to także nie przyniosło to efektu.

A co do pytania dlaczego miałby wyłapać Exception to wszystkie klasy po nim dziedziczą z tego co mi się wydaje i wyjątek każdego typu będzie mimo woli typu Exception

0

Czy zobaczyłeś na fragment kodu, który wkleiłem?
Wynika z niego, że wyjątek jest logowany jako ostrzeżenie (warn) i uciszany.

0

Mój błąd, pominąłem ten fakt, jak w takim razie zmusić go do zgłoszenia wyjątku bez uciszenia ?

0

Pobierz sesje: factory.createSession()

0

coś więcej bym poprosił

0

initFactory.openSession() zwroci wyjatek

0

Niestety, ale initFactory.openSession() również nie zwraca wyjątku

0

WItam,
skoro powyższa metoda zwraca Ci błąd to znaczy ze masz plik konfiguracyjny Hibernate.cfg.xml "skopany"

1 użytkowników online, w tym zalogowanych: 0, gości: 1