Exception impossible à catcher
Je n'arrive pas à catcher une exception (StaleObjectStateException générée lors d'un accès concurrent par Hibernate). L'exception générée par Mobilites.store n'est pas du tout catchée, celle générée par Utilisateurs.store est catchée comme Exception et pas StaleObjectStateException.
Classe action de Mobilite
Code:
1 2 3 4 5 6 7 8 9 10 11
| public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
...
try {
...
// enregistrement de la mobilite dans la BDD
Mobilites.store(mobilite);
succes.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("mobilite.succes.record"));
} catch (Exception e) {
log.error("MobSaiAction - sauvegarde " + e.getMessage(), e);
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("mobilite.error.record"));
} |
Mobilites.store
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static void store(Mobilite mobilite) throws Exception {
Session session = HibernateSessionFactory.currentSession();
try {
session.beginTransaction();
session.saveOrUpdate(mobilite);
session.getTransaction().commit();
session.clear();
} catch (Exception e) {
log.error("Mobilites - store ", e);
session.getTransaction().rollback();
throw new Exception("Mobilites - store ", e);
}
} |
Classe action de Utilisateur
Code:
1 2 3 4 5 6 7 8 9 10 11
| public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
...
Utilisateurs.store(user);
} catch (StaleObjectStateException sose) {
log.error("UtilisateurRecordAction - " + sose.getMessage(), sose);
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("user.error.record.concurrence.acces"));
} catch (Exception fe) {
log.error("UtilisateurRecordAction - " + fe.getMessage(), fe);
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("user.error.record"));
} |
Utilisateurs.store
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static void store(Utilisateur utilisateur) throws Exception {
Session session = HibernateSessionFactory.currentSession();
try {
session.beginTransaction();
session.saveOrUpdate(utilisateur);
session.getTransaction().commit();
session.clear();
} catch (Exception e) {
log.error("Utilisateurs - store ", e);
session.getTransaction().rollback();
throw new Exception("Utilisateurs - store ", e);
}
} |