2009-10-05 5 views
1

Je veux intercepter toutes les invocations de méthode à tous les composants de couture pour voir si cela aiderait à consigner les exceptions. Je pensais que je pourrais le faire en obtenant la liste de tous les composants et intercepteurs enregistrés et en ajoutant simplement celui que je veux à cette liste.Seam - Interceptors

Walter

Répondre

0

Essayez de remplacer la valeur par défaut ExceptionFilter avec votre propre à une priorité plus élevée.


@Name("org.jboss.seam.web.exceptionFilter") 
@Install(precedence = MOCK, classDependencies="javax.faces.context.FacesContext") 
@BypassInterceptors 
@Filter(within="org.jboss.seam.web.ajax4jsfFilter") 
public class ExceptionFilter extends org.jboss.seam.web.ExceptionFilter 

    @Override 
    protected endWebRequestAfterException(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Exception e) { 
    // here you log exceptions 
    } 
} 
+0

Merci pour votre réponse, mais je voudrais d'intercepter tous les composants, même ceux qui sont des emplois asynchrones en cours d'exécution en arrière-plan. Est-il possible d'avoir accès à la méthode, aux arguments et au résultat? –

+0

Vous pouvez utiliser AsynchronousExceptionHandler dans seam. Tout comme ma réponse, vous pouvez l'étendre et la remplacer, et utiliser la vôtre. –

2

Mieux vaut utiliser le gestionnaire d'exception de Seam. Voici comment vous pouvez le faire:

@Name("org.jboss.seam.exception.exceptions") 
@Scope(ScopeType.APPLICATION) 
@Install(precedence = Install.APPLICATION) 
@BypassInterceptors 
public class ExceptionHandler extends org.jboss.seam.exception.Exceptions { 

    public void handle(Exception e) throws Exception { 
      //Log your exception here if you want 
      Events.instance().raiseAsynchronousEvent("SomeListener",e.getMessage()); 
    super.handle(e); 
}