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
Mobilites.store
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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")); }
Classe action de Utilisateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Utilisateurs.store
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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")); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Partager