Prevenir el tiempo de espera de la sesión durante la actualización de la base de datos
Una aplicación web llama a un procedimiento almacenado para realizar una actualización intensiva de la base de datos. La porción relevante deweb.xml
se actualizó a cuatro horas:
<session-config>
<session-timeout>240</session-timeout>
</session-config>
Las tecnologías disponibles para la solución incluyen Java 1.4.2, Struts 2, Tomcat 5.5 y Apache commons. La mayoría de las otras tecnologías (como jQuery) no están permitidas.
ProblemLa actualización tarda aproximadamente una hora en ejecutarse, sin embargo, un valor de configuración de cuatro horas está en contra de los estándares corporativos (por una buena razón). No se permite una configuración de tiempo de espera de cuatro horas en producción.
Pregunt¿Qué garantizará que la solicitud no se agote mientras se ejecuta la actualización de la base de datos?
IdeasMi preocupación en los primeros dos casos es que el proceso generado finalmente será eliminado por el contenedor Servlet.
Page Refresh Engendre el proceso de actualización de la base de datos como una tarea en segundo plano. Tener un Servlet actualiza continuamente la página para verificar su finalización.JavaScript Ping Engendre el proceso de actualización de la base de datos como una tarea en segundo plano.Haga que el código JavaScript haga ping al servidor por un tiempo.Similar a Prevención del tiempo de espera de la sesión durante un largo tiempo de procesamiento en JSF, pero sin jQuery.
Update ServerEscriba un servidor simple que escuche las solicitudes:
El Servlet envía una solicitud al oyente. El oyente ejecuta la actualización.Dado que el servidor se ejecuta independientemente de Tomcat, el tiempo de espera de la sesión no puede ocurrir. La actualización de la base de datos se ejecutará hasta su finalización sin ser eliminada. Esto tiene numerosos problemas (el manejo de errores no es mi menor preocupación) y es probable que sea la opción de último recurso.
MejoramientEs posible optimizar la consulta para que finalice en menos de 30 minutos (el tiempo de espera máximo permitido), pero es probable que la consulta no se pueda optimizar lo suficiente.
Hardwaramentablemente, la actualización del hardware de la base de datos no es una opción.
¡Muchas gracias