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 : 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"));
}
Mobilites.store
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);
	}
}
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
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 : 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);
	}
}