2009-10-05 4 views
1

예외를 로깅하는 데 도움이되는지 확인하기 위해 모든 메소드 호출을 모든 Seam 컴포넌트로 인터셉트하려고합니다. 모든 구성 요소와 등록 된 인터셉터 목록을 가져 와서 목록에 원하는 항목을 추가함으로써이 작업을 수행 할 수 있다고 생각했습니다.Seam - Interceptors

월터

답변

0

더 높은 우선 순위로 기본 ExceptionFilter를 재정의하려고합니다.


@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

감사합니다,하지만 난 심지어 모든 구성 요소 백그라운드에서 실행중인 비동기 작업에서있는 사람을 차단하고 싶습니다 : 이 당신이 그것을 할 수있는 방법이다. 메소드, 인수 및 결과에 대한 액세스가 가능합니까? –

+0

Seam에서 AsynchronousExceptionHandler를 사용할 수 있습니다. 내 답변과 마찬가지로 확장하고 재정의하고 직접 사용할 수 있습니다. –

2

Seam의 예외 처리기를 사용하는 것이 더 좋습니다. 당신의 응답을

@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); 
}