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