Tomcat - делать вещи после ответа - PullRequest
1 голос
/ 12 марта 2011

У меня есть сервлет для загрузки базы данных моего приложения в Android.

База данных обрабатывается на стороне сервера, но это может занять некоторое время.

В данный момент я только что вернулся с ответом, что загрузка прошла успешно с использованием PrintWriter.write ().

Есть ли способ после обработки ответа клиенту (моему приложению для Android) начать обработку файла?

Если я отправлю перенаправление на другой сервлет или перенаправлю запрос с помощью диспетчера, у меня не будет ответа, пока сервлет, выполняющий обработку, не будет завершен.

Каков наилучший способ мгновенно ответить пользователю, позволить начать обработку базы данных и отправить результаты обратно на android (обратите внимание, что это может занять 5 минут или 10 минут, в зависимости от базы данных - поэтому я предполагаю, Мне понадобится какой-нибудь слушатель для опроса на сервере, обработаны ли результаты и готовы ли они отображаться на клиенте)

1 Ответ

3 голосов
/ 12 марта 2011

Внутренняя обработка может быть выполнена с помощью задания, например, через Quartz.Если сервер может быть заменен на JBoss AS, Glassfish или Resin, то здесь также можно выполнить простой аннотированный метод @Asynchronous.

Вы действительно можете непрерывно опрашивать сервер, чтобы узнать, сделано ли оно уже.Это то, что делает большинство индикаторов выполнения на основе AJAX в веб-среде.

В качестве альтернативы вы можете использовать обратный AJAX (Comet) для предотвращения опроса (см., Например, http://atmosphere.java.net/)..В случае, если сервер может отправить ответ вам сразу же, как только это будет сделано, это потребует какого-либо события на вашем сервере. Если вы могли бы заменить сервер на JBoss AS или Glassfish, шина событий CDI могла бы стать опцией.В противном случае общий объект в сеансе HTTP, для которого вы вызываете wait / notify, является грубой альтернативой.

...