Фон
Веб-приложение вызывает хранимую процедуру для интенсивного обновления базы данных. Соответствующая часть 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 минут (максимально допустимый таймаут) возможна, но, скорее всего, запрос не может быть оптимизирован достаточно.
Оборудование
К сожалению, обновление аппаратного обеспечения базы данных не является вариантом.
Большое спасибо!