2013-02-21 2 views
2

Много раз есть несколько длинных процессов, называемых http-сервлетами в веб-приложении Java. Типичным примером будет преобразование 100 mp3-файлов в формат flak (только случайный пример). Http-соединение будет живым, но поскольку процесс займет много времени, мы можем создать некоторый индикатор выполнения для отображения на веб-странице (желательно uisng ajax), который указывает на прогресс задачи. Какая должна быть схема дизайна для этого? Скажем, метод post Servlet будет ссылаться на фактический долгосрочный процесс, а метод get Servlet будет ссылаться на слушателя прогресса?Веб-приложение Java: Мониторинг прогресса

+1

См. [Это сообщение] (http://stackoverflow.com/questions/7474080/java-web-app-futuretask-progress-bar) для одной идеи. –

ответ

4

В Java EE я бы рекомендовал следующую структуру:

  • сервлет вызов (POST, например) начнет процесс
  • СТОЛБ будет использовать вызов @Asynchronous EJB, чтобы обработать тяжелый груз, так который начнет выполнять длительный процесс.
  • Он также передаст объект держателя хода, например POJO, который помещается в контекст/сеанс (также будет выполняться @Stateful EJB)
  • POST возвращается, фоновое задание продолжается
  • Проверка статуса выполняется по HTTP-вызовам Ajax, они используют тот же сеанс, что и стартер
  • вызов Ajax получает держатель объекта хода из сессии/контекста/@ Stateful, считывает состояние и возвращает
  • статус постоянно обновляются в фоновом потоке (обновление должно быть синхронизировано, если вы используете только один атрибут boolean, char, int или float (максимальные 32-разрядные примитивы))

Обратите внимание, что @Asynchronous можно приобрести с EJB 3.1.

Смежные вопросы