[Hibernate] Attraper les exceptions lors de transactions
Salut à tous,
J'utilise, dans le cadre d'une application java, des classes Persistor, qui ne servent qu'à enregistrer les objet qu'on leur passe dans la base de données.
Mais ma base est en fait sur deux serveurs. Après quelques recherche, j'ai décidé d'appliquer une méthode dite du "commit à 2 phases" pour l'enregistrement des données.
Une méthode basique d'un Persistor est donc dans ce style:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
public void save (Object o) throws PersistException {
try {
Customer c = (Customer) o;
if (c.getId() != null) {
this.updateLocal(c);
this.updateRemote(c);
} else {
this.saveLocal(c);
this.saveRemote(c);
}
} catch (ClassCastException cce) {
throw new PersistException("Objet à sauver != Customer");
} catch (Exception e) {
tx.rollback();
try {
con.rollback();
} catch (SQLException e1) {
throw new PersistException("Erreur lors du rollback distant." + e);
}
throw new PersistException("Erreur lors de la sauvegarde." + e);
}
} |
Le problème c'est que je ne sais pas comment attraper les exception d'Hibernate! Les méthode classiques style session.save/update/delete ne lancent aucune exception…
D'un autre côté, dans la doc, il est bien fait état d' HibernateExceptions, qui serait un wrapper pour toutes les exceptions qui pourraient se produire durant les transactions.
Qqun sait comment attraper ces exceptions?
Merci !
EDIT: modifié le titre, c'était pas top…
Re: [Hibernate] Attraper les exceptions lors de transactions
Citation:
Envoyé par seb.ch
Après quelques recherche, j'ai décidé d'appliquer une méthode dite du "commit à 2 phases" pour l'enregistrement des données.
C'est à dire ? Tu utilises JTA, non ?
Citation:
Envoyé par seb.ch
Les méthode classiques style session.save/update/delete ne lancent aucune exception…
et HibernateException, tu l'oublies pas un peu vite ? Vérifie dans la javadoc mais je ne pense pas me tromper.
Re: [Hibernate] Attraper les exceptions lors de transactions
Citation:
Envoyé par dlemoing
C'est à dire ? Tu utilises JTA, non ?
JTA? Je crois pas… J'utilise Hibernate et ses composants (Session et Transaction) pour la base locale et des Connection/Statements "classiques" de Java, du package java.sql pour les transactions à la base distante.
Citation:
Envoyé par dlemoing
et HibernateException, tu l'oublies pas un peu vite ? Vérifie dans la javadoc mais je ne pense pas me tromper.
Les HibernateExceptions… j'ai lu des infos sur ces exceptions, mais aucune des méthodes que l'on appelle lors d'une transaction ne lance d'exceptions… les session.update/delete/save ne lancent rien…
Il y a peut être quelque chose que je n'ai pas compris à Hibernate…*je suis en train d'éplucher la doc…*mais c'est quand même étrange que le commit d'une transaction ne puisse pas lancer d'exception…
Re: [Hibernate] Attraper les exceptions lors de transactions
Citation:
Envoyé par seb.ch
Les HibernateExceptions… j'ai lu des infos sur ces exceptions, mais aucune des méthodes que l'on appelle lors d'une transaction ne lance d'exceptions… les session.update/delete/save ne lancent rien…
dlemoing a raison fais un try catch avec un HibernateException, pour les methodes save, update et delete, passe en parametre une requete erronnee et tu vas voir si tu n as pas d'exception!!! :wink: