Hibernate i Exception

Odpowiedz Nowy wątek
2009-03-30 19:23

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

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 18:50:48 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


Jest 10 rodzajów ludzi. Ci którzy rozumieją zapis binarny i ci którzy go nie rozumieją.

Pozostało 580 znaków

2009-03-30 21:33

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

0

Dlaczego powinie złapać exception?

Fragment metody SettingsFactory.buildSettings


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

Pozostało 580 znaków

2009-03-30 21:39

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

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


Jest 10 rodzajów ludzi. Ci którzy rozumieją zapis binarny i ci którzy go nie rozumieją.

Pozostało 580 znaków

2009-03-30 21:45

Rejestracja: 11 lat temu

Ostatnio: 11 lat temu

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.

Pozostało 580 znaków

2009-03-30 21:50

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

0

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


Jest 10 rodzajów ludzi. Ci którzy rozumieją zapis binarny i ci którzy go nie rozumieją.

Pozostało 580 znaków

pikseloza
2009-03-31 11:36
pikseloza
0

Pobierz sesje: factory.createSession()

Pozostało 580 znaków

2009-03-31 13:16

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

0

coś więcej bym poprosił


Jest 10 rodzajów ludzi. Ci którzy rozumieją zapis binarny i ci którzy go nie rozumieją.

Pozostało 580 znaków

pikseloza
2009-03-31 13:46
pikseloza
0

initFactory.openSession() zwroci wyjatek

Pozostało 580 znaków

2009-04-04 13:26

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

0

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


Jest 10 rodzajów ludzi. Ci którzy rozumieją zapis binarny i ci którzy go nie rozumieją.

Pozostało 580 znaków

Szczery
2009-04-04 15:32
Szczery
0

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

Pozostało 580 znaków

Odpowiedz

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