2010-06-28 25 views
1

Je migre mon application Seam 2 alimentée par CDI et l'un des éléments critiques pour ma conservation est la gestion des erreurs. Dans Seam 2, j'ai simplement remplacé le gestionnaire d'exceptions par défaut par le mien, mais dans CDI, je suppose que je vais devoir utiliser un Interceptor.CDI - gestion des erreurs

Comment est-ce que je configurerais ceci comme utilisant un Interceptor m'oblige à spécifier où il va intercepter des appels? Je veux surtout effectuer l'audit, donc quand une exception se produit, elle est enregistrée, puis une notification (email, xmpp, sms, appel téléphonique) est envoyée aux administrateurs.

Lorsqu'une exception se produit, y a-t-il simplement un événement sur lequel je peux écouter et agir?

Walter

Répondre

0

Utilisez-vous JSF2? Si oui, au lieu d'écrire un Interceptor, vous pouvez enregistrer une ExceptionHandlerFactory dans votre fichier web.xml as described here. Dans CustomExceptionHandler, vous pouvez capturer toutes les exceptions et les gérer par programme. J'utilise cette approche dans mon application JEE6-CDI, je trouve ça plutôt bien.

+0

Cela ressemble à un bon candidat. Je veux aussi attraper des exceptions de m emplois asynchrones dans un endroit central. J'aurai peut-être 1 pour chacun, un pour JSF et un pour les travaux asynchrones. –

+0

Exception multipleHandlerFactories? N'a pas essayé ça. Peut-être pourriez-vous me dire si cela fonctionne. Un conseil supplémentaire: si vous déballez l'exception dans ExceptionHandlerFactory (son enveloppe dans FacesException, parfois aussi EvaluationException) à son type d'origine et le lancez à l'intérieur de l'usine, vous pouvez gérer les exceptions de manière déclarative dans le fichier web.xml (mais vous avez faire quelques trucs transmettent des informations sur l'exception à une page jsf). – ifischer