2012-06-14 3 views
0

Я хотел бы сделать какую-то пользовательскую логику в любое время, когда в моем приложении есть неперехваченное исключение. Обычно я хотел бы сделать что-то вроде:UncaughtExceptionHandler на Google App Engine Java

Thread.setDefaultUncaughtExceptionHandler(myCustomHandler); 

Однако Thread заблокирована на Google App Engine. Вышеупомянутый код вызывает исключение безопасности. В любом случае, для достижения аналогичной функциональности в Google App Engine?

EDIT: Я реализовал свой подход в качестве сервлет-фильтра. Мой опыт работы с веб-программированием Java довольно ограничен. Может ли кто-нибудь прокомментировать такой подход? Поскольку все запросы в AppEngine возникают как HTTP-запросы, я думаю, что это комплексное решение.

@Override 
public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws IOException, ServletException { 

    try { 
     chain.doFilter(request, response); 
    } catch (RuntimeException ex) { 
     // Work my magic here... 
     throw ex; 
    } 
} 

ответ

1

Серблеты обрабатывают потоки самостоятельно, поэтому вы не должны с ним связываться.

Вместо этого установите сервлет Error Handler:

<error-page> 
    <error-type>com.package.YourException</error-type> 
    <location>/errors/handler</location> 
</error-page> 

то есть /errors/handler карту в сервлет, который обрабатывает ошибку и возвращает соответствующий ответ.

+0

Интересный подход. Есть ли какая-либо польза от использования этого подхода, который я сделал в своем редактировании (или наоборот)? – Brad