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 :

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);
    }
 
}
Donc ça marche nickel !


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 :
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 bien l'exception n'est jamais interceptée !!!
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 :

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();

        }
    }

}
Merci de vos suggestions !