[Stratégie] Exception se baladant à travers JPA & EJB..
Bonjour.
J'ai une petite problématique sur la gestion d'une exception dans mon application web.
Dans ma JPA j'ai cela :
Code:
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
| @PrePersist
@PreUpdate
private void validateData() {
if (nom == null || "".equals(nom)) {
throw new ValidationException("Nom invalide");
}
if (prenom == null || "".equals(prenom)) {
throw new ValidationException("Prénom invalide");
}
if (adresse == null || "".equals(adresse)) {
throw new ValidationException("Adresse invalide");
}
if (codePostal == null) {
throw new ValidationException("Code postal invalide");
}
if (ville == null || "".equals(ville)) {
throw new ValidationException("Ville invalide");
}
if (telephone == null || "".equals(telephone)) {
throw new ValidationException("Téléphone invalide");
}
if (motDePasse == null || "".equals(motDePasse)) {
throw new ValidationException("Mot de passe invalide");
}
} |
Du coup lorsque je souhaite rendre persistant mon objet et qu'il y a quelque chose de pas valide, hop j'ai le déclenchement d'une magnifique ValidationException (je l'ai fait hériter de RuntimeException).
Code:
1 2 3 4 5 6
| public class ValidationException extends RuntimeException {
public ValidationException(String error) {
System.out.println(error);
}
} |
Tournons nous vers les EJB maintenant :
Code:
1 2 3 4 5 6 7 8 9 10 11
| public Client client_ajout(String nom,
String prenom,
String adresse,
Long codePostal,
String ville,
String telephone,
String motDePasse) throws ValidationException {
Client c = new Client(nom, prenom, adresse, codePostal, ville, telephone, motDePasse);
em.persist(c);
return c;
} |
Voilà l'exception sera déclenchée ici :
Le problème c'est que je souhaite me servir de mon exception pour pouvoir afficher un message d'erreur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| try {
client.client_ajout(request.getParameter("nom"),
request.getParameter("prenom"),
request.getParameter("adresse"),
cp,
request.getParameter("ville"),
request.getParameter("telephone"),
request.getParameter("motdepasse"));
} catch (ValidationException e) {
request.setAttribute("message", "toto à la montagne");
return "administration_client_edit";
} catch (EJBException e) {
request.setAttribute("message", "toto à la montagne");
return "administration_client_edit";
} |
Bon mon soucis c'est que mon exception je suis obligé de l'attraper dans le code précédent si je souhaite pouvoir afficher mes erreurs. En fait ce que je souhaite c'est que les "toto à la montagne" représentent mon erreur en disant par exemple "Nom invalide".
Bref était-il possible à partir d'une erreur qui part de mon JPA pouvoir la retransmettre sous forme d'un String à la place de "toto à la montagne" ? Je peux traiter cela lorsque je reçois les données de la page, mais j'aurai aimé traité l'erreur dans la partie JPA...