Предотвращение тайм-аута сеанса во время обновления базы данных

Предпосылки

Веб-приложение вызывает хранимую процедуру для выполнения интенсивного обновления базы данных. Соответствующая часть web.xml была обновлена ​​до четырех часов:


    240

Технологии, доступные для решения, включают Java 1.4.2, Struts 2, Tomcat 5.5 и общие ресурсы Apache. Большинство других технологий (таких как jQuery) не разрешены.

Проблема

Обновление занимает около часа, однако значение конфигурации в четыре часа противоречит корпоративным стандартам (по уважительной причине). Конфигурация четырехчасового тайм-аута не разрешена в производственной среде.

Вопрос

Что гарантирует, что запрос не истечет во время обновления базы данных?

Идеи

В первых двух случаях меня беспокоит следующее порожденный процесс в конечном итоге будет убит контейнером сервлета.

Обновление страницы

  1. Запускает процесс обновления базы данных как фоновую задачу.
  2. Заставляет сервлет постоянно обновлять страницу для проверки завершения.

Пинг JavaScript

  1. Запускает процесс обновления базы данных как фоновую задачу .
  2. Пусть код JavaScript на некоторое время отправит эхо-запрос на сервер.

Аналогично Предотвращение тайм-аута сеанса в течение длительного времени обработки в JSF , но без jQuery.

Сервер обновления

Напишите простой сервер, который слушает запросы:

  1. Сервлет отправляет запрос слушателю.
  2. Слушатель запускает обновление.

Поскольку сервер работает независимо от Tomcat, тайм-аут сеанса не может произойти. Обновление базы данных завершится без прерывания. Это связано с множеством проблем (обработка ошибок - не в последнюю очередь, что меня беспокоит), и, вероятно, это крайний вариант.

Оптимизация

Оптимизация запроса до завершения менее чем за 30 минут (максимально допустимый тайм-аут) возможна, но, вероятно, запрос не может быть оптимизирован в достаточной степени.

Аппаратное обеспечение

Обновление оборудования базы данных не является необходимым вариант, к сожалению.

Большое спасибо!

10
задан Community 23 May 2017 в 11:46
поделиться