/ / Чи можу я перевірити, чи виконано запит на асинхронізацію? - java, servlets, asynchronous, httprequest, httpresponse

Чи можна перевірити, чи завершено запит async? - java, сервлети, асинхронний, httprequest, httpresponse

Чи є спосіб перевірити, чи завершено асинхронічний серверний запит з AsyncContext? Я бачив, що весна має якусь обгортка, яка підтримує це але гуглившись, я не міг знайти нічого у стандартній бібліотеці. Саме на це я і сподівався.

Я використовую Tomcat 7.

Відповіді:

2 для відповіді № 1

Звучить один із двох - вам або потрібен слухач що буде покликано a асинхронний запит або не потрібно використовувати асинхронний дзвінок.

Ваше запитання трохи надто загальне.

Якщо говорити загалом - асинхронні дзвінки використовуються, коли абонента не цікавить негайний результат дзвінка. Якщо абонент зацікавлений, то негайно дізнається результат дзвінка синхронні дзвінки слід використовувати. Якщо абонент не зацікавлений дізнатися результат негайно (наприклад, він має вторинний пріоритет, наприклад, вхід у деякі бізнес-додатки), але слід виконати певні дії після закінчення виконання асинхронні дзвінки ви повинні використовувати якесь слухач.

Що вам потрібно асинхронний дзвінок є якийсь слухач (класу javax.servlet.AsyncListener).

В слухач Ви точно будете знати, що асинхронний дзвінок закінчено (метод onComplete) і може виконати певну дію для доопрацювання / доповнення асинхронний дзвінок.


Знову ж таки, якщо ви бачите, що абонент запиту повинен негайно знати результат після його завершення, можливо, у вашій архітектурі є помилка. Ви повинні використовувати a синхронний дзвінок - просто зачекайте, поки дзвінок виконаний, і ви отримаєте результат від нього. Використання асинхронний дзвінок в цій ситуації помиляється.


Я бачив, як люди використовують якусь петлю, щоб час від часу перевіряти результат асинхронний дзвінок, але, схоже, у 99,99% випадків такий підхід є результатом деякої архітектурної помилки.


1 для відповіді № 2

Ви можете зареєструвати AsyncListener, який може реалізувати метод onComplete ().

AsyncListener потрібно додати до AsyncContext.