Шов - Перехватчики

Я хочу перехватить все вызовы методов для всех компонентов шва, чтобы посмотреть, поможет ли это в регистрации исключений. Я думал, что смогу сделать это, получив список всех компонентов и зарегистрированных перехватчиков и просто добавив в этот список тот, который мне нужен.

Уолтер


person Community    schedule 05.10.2009    source источник


Ответы (2)


Попробуйте переопределить 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
  }
}
person cetnar    schedule 05.10.2009
comment
Спасибо за ваш ответ, но я хотел бы перехватить все компоненты, даже те, которые относятся к асинхронным заданиям, работающим в фоновом режиме. Можно ли иметь доступ к методу, аргументам и результату? - person ; 06.10.2009
comment
Вы можете использовать AsynchronousExceptionHandler в шве. Как и в моем ответе, вы можете расширить его и переопределить, а также использовать свой собственный. - person Shervin Asgari; 16.11.2010

Лучше использовать обработчик исключений 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);
}
person Shervin Asgari    schedule 10.02.2010