Фон
Веб-приложение вызывает хранимую процедуру для выполнения интенсивного обновления базы данных. Соответствующая часть web.xml
была обновлена до четырех часов:
<session-config>
<session-timeout>240</session-timeout>
</session-config>
Технологии, доступные для решения, включают в себя общие положения Java 1.4.2, Struts 2, Tomcat 5.5 и Apache. Большинство других технологий (таких как jQuery) не разрешены.
Проблема
Обновление занимает около часа, однако значение конфигурации, равное четырем часам, не соответствует корпоративным стандартам (по уважительной причине). Четырехчасовая конфигурация тайм-аута не разрешена в производстве.
Вопрос
Что будет гарантировать, что время запроса не истечет во время выполнения обновления базы данных?
Идеи
В первых двух случаях меня беспокоит то, что порожденный процесс в конечном итоге будет уничтожен контейнером сервлетов.
Обновление страницы
- Создать процесс обновления базы данных как фоновую задачу.
- Пусть сервлет постоянно обновляет страницу, чтобы проверить ее на предмет завершения.
JavaScript Ping
- Создать процесс обновления базы данных как фоновую задачу.
- Пусть JavaScript некоторое время пингует сервер.
Аналогично Предотвращение тайм-аута сеанса в течение длительного времени обработки в JSF , но без jQuery.
Сервер обновлений
Напишите простой сервер, который прослушивает запросы:
- Сервлет отправляет запрос слушателю.
- Слушатель запускает обновление.
Поскольку сервер работает независимо от Tomcat, тайм-аут сеанса не может возникнуть. Обновление базы данных будет выполнено до конца без остановки. Это имеет множество проблем (обработка ошибок не в последнюю очередь моя проблема) и, скорее всего, является последним средством.
Оптимизация
Возможна оптимизация запроса до завершения менее чем за 30 минут (максимально допустимое время ожидания), но, вероятно, запрос не может быть оптимизирован в достаточной степени.
Оборудование
К сожалению, обновление оборудования базы данных не вариант.
Большое спасибо!