Bonjour !
J'ai un objet que je persiste en base de données.
Lorsque je mets à jour un objet déjà enregistré, je fais des contrôles de cohérence dans mon entité et je lève une exception si besoin est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 @Entity @Table(name = "mreglement") public class ModeReglement implements Serializable { (...) @PrePersist @PreUpdate private void control() { if (code == null || "".equals(code)) throw new ValidationException("Code invalide !"); if (libelle == null || "".equals(libelle)) throw new ValidationException("Libellé invalide !"); if ( type==null || "".equals(type)) throw new ValidationException("Type de règlement invalide !"); } (...) }
Ainsi, tout est déclenché dans mon bean de session comme ceci :
Donc ça marche nickel !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Stateless public class ModeReglementFacade ModeReglementFacadeLocal { @PersistenceContext(unitName = "TestPU") private EntityManager em; @Override public void update(ModeReglement mode) { em.merge(mode); } }
Seulement, j'aurais voulu intercepter mon erreur pour pouvoir faire une autre action sur mon entité. J'ai donc penser que cela pouvait marcher dans mon bean de session :
Et bien l'exception n'est jamais interceptée !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Override public void update(ModeReglement mode) { try { em.merge(mode); // ACTION A FAIRE SI OK } catch (ValidationException ex) { // ACTION A FAIRE SI PAS OK } }
Et quel que soit le résultat de la mise à jour (ou pas) de mon entité, l'action A FAIRE SI OK est toujours déclenchée !!!
Comment faire ?
En fait, je voudrais éviter de gérer dans le Managed-Bean :
Merci de vos suggestions !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
27 @ManagedBean @ViewScoped public class ModeReglementController implements Serializable { @EJB private ModeReglementFacadeLocal ejb; private ModeReglement modeReglement = new ModeReglement(); public void doUpdate() { try { ejb.update(modeReglement); // ACTION A FAIRE SI OK ejb.faireSiOk(); } catch (Exception ex) { getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), null)); // ACTION A FAIRE SI PAS OK ejb.faireSiPasOk(); } } }
Partager