Использование AsyncListener#onError
Я не понимаю, когда вызывается метод AsyncListener#onError. Javadoc не помогает:
уведомляет этот AsyncListener о том, что асинхронная операция не завершена.
как он может потерпеть неудачу? Как я могу воспроизвести эту ошибку?
обновление:
// in HttpServlet doGet method
AsyncContext asyncContext = req.startAsync();
asyncContext.addListener(new AsyncListener() {
// some code
@Override
public void onError(AsyncEvent event) {
// when is it called?
}
});
executeInSomeOtherThread(asyncContext);
что мне нужно сделать в другом потоке, чтобы не выполнить эту асинхронную операцию?
1 ответов
onError будет вызываться, если при выполнении асинхронной операции возникло исключение.
Они, как правило, Throwables, которые расширяют java.Ио.Исключение IOException, вызванное сбоями ввода-вывода из-за ненадежного соединения или исключений уровня протокола из-за логической ошибки из-за несоответствия между клиентом и сервером.
вы можете получить Throwable, когда onError вызывается вызовом:
event.getThrowable();
изменить адрес последующие вопросы mjaggard
забыв о AsyncContext на секунду, рассмотрим следующий класс:
public class MyRunnableClass implements Runnable {
private Listener mListener;
interface Listener {
void onError(Throwable error);
}
public void setListener(Listener listener) {
mListener = listener;
}
@Override
public void run() {
// Some important code to be executed goes here
// Pretend an exception was caught in a try/catch/finally
// block that was doing an I/O operation
Throwable someError = new IOException();
if (mListener != null) {
mListener.onError(someError);
}
}
}
Теперь более ясно, как будет вызываться метод onerror прослушивателя, потому что при вызове метода run MyRunnableClass возникло исключение?
MyRunnableClass mrc = new MyRunnableClass();
mrc.setListener(new Listener() {
@Override
public void onError(Throwable error) {
}
});
Executors.newSingleThreadScheduledExecutor().schedule(mrc, 1000L, TimeUnit.MILLISECONDS);
Это ничем не отличается от того, как AsyncContext удерживает слушателя и уведомляет его, если он сталкивается с исключением, которое он хочет сообщить слушателю. Как метод run вызывается действительно вторичен по отношению к тому, что владелец кода, который выполняется также содержит ссылку на слушателя.