Подтвердить что ты не робот

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

Фон

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

<session-config>
    <session-timeout>240</session-timeout>
</session-config>

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

Проблема

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

Вопрос

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

Идеи

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

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

  • Создайте процесс обновления базы данных в качестве фоновой задачи.
  • У сервлета постоянно обновляется страница, чтобы проверить завершение.

JavaScript Ping

  • Создайте процесс обновления базы данных в качестве фоновой задачи.
  • Есть код JavaScript, на котором ping сервер некоторое время.

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

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

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

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

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

Оптимизация

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

Оборудование

К сожалению, обновление аппаратного обеспечения базы данных не является вариантом.

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

4b9b3361

Ответ 1

По-моему, ни один пользователь не захочет сидеть перед экраном, отслеживая фоновое задание на 4 часа. Несколько лет назад мне приходилось внедрять генерации отчетов, которые занимали часы. реализованное решение было следующим:

  • Сгенерировать отчет в фоновом потоке. Поток контролировался и доступен через список контекстов приложения. Поток содержал информацию о владельце и о его прогрессе.
  • Пользователи могут перечислять свои собственные потоки и видеть прогресс.
  • По завершении потока отчетов будет храниться отчет для автономного доступа, отправьте уведомление по электронной почте владельцу со ссылкой для загрузки сгенерированного отчета.

Ответ 2

Читая abvoe, я могу гарантировать, что у вас есть два варианта, даже если второй сложный, его лучшие процессы

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

  • Создайте процесс обновления базы данных в качестве фоновой задачи.
  • У сервлета постоянно обновляется страница, чтобы проверить завершение.

2) Оптимизация

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