я анализирую некоторый джерси код 2.0 и у меня есть вопрос о том, как работает следующий метод:jersey ws 2.0 @suspended AsyncResponse, что он делает?
@Stateless
@Path("/mycoolstuff")
public class MyEjbResource {
…
@GET
@Asynchronous //does this mean the method executes on child thread ?
public void longRunningOperation(@Suspended AsyncResponse ar) {
final String result = executeLongRunningOperation();
ar.resume(result);
}
private String executeLongRunningOperation() { … }
}
позволяет сказать, что IM в веб-браузере и я ввести в www.mysite/mycoolstuff это запустит метод но я не понимаю, что используется asyncResponse для @Asynchronous annotation. Из браузера, как бы я заметил его asychnronous? Какая разница в удалении аннотации? Также приостановленная аннотация после прочтения documentation я не совсем понимаю ее цель.
- это @Asynchronous аннотация, просто говорящая программе выполнить этот метод в новом потоке? это удобный способ для создания «новой темы (.....)»?
Обновление: эта аннотация избавляет сервер от зависания на потоке обработки запроса. Пропускная способность может быть лучше. Во всяком случае с официальным docs:
обработка запроса на сервере работает по умолчанию в режиме синхронной обработки, что означает, что клиент соединение запроса обрабатывается в одном вводе/выводе контейнера нити. После обработки потока запрос возвращается в контейнер ввода-вывода, контейнер может с уверенностью предположить, что обработка запроса завершена и что клиентское соединение можно безопасно освободить, включая все ресурсы, связанные с соединением. Эта модель обычно достаточна для обработки запросов, для которых выполнение метода ресурса обработки занимает относительно короткое время. Однако в тех случаях, когда известно, что выполнение метода ресурса занимает много времени для вычисления результата, следует использовать модель асинхронной обработки на стороне сервера. В этой модели связь между потоком обработки запроса и соединением клиента нарушена. Контейнер ввода-вывода, который обрабатывает входящий запрос, может больше не предполагать, что клиентское соединение может быть безопасно закрыто при возврате потока обработки запроса. Вместо этого необходимо открыть средство для явного приостановки, возобновления и закрытия клиентских подключений. Обратите внимание, что использование серверной модели асинхронной обработки не улучшит время обработки запроса, воспринимаемое клиентом. Тем не менее, он увеличит пропускную способность сервера, высвободив начальный поток обработки запроса обратно в контейнер ввода-вывода, в то время как запрос все еще может ждать в очереди для обработки или обработка может все еще работать в другом выделенном потоке. Выпущенный поток контейнера ввода-вывода может использоваться для приема и обработки новых входящих запросов.
желание у кого-то ответ на этот вопрос, у меня есть тот же вопрос – greyfox