> Faqs > Solucionar página con proceso muy largo en Java, Apache Struts

Solucionar página con proceso muy largo en Java, Apache Struts

Buenas Tardes: Antes que nada un saludo a toda esta gran comunidad que en tantas ocasiones me ha servido de apoyo en desarrollos que he hecho y me han sacado de tantos apuros, es la primera vez que realizo una pregunta y espero ser claro.

Bueno vamos al punto: Tengo una aplicacion desarrollada con Apache Struts 1.2 (Java) con la cual accedo a una base de datos con tablas de aprox. 50 billones de registros, la cuestion es que uno de mis querys se llega a tardar desde 10 min. hasta 14 hrs.

Cuando tarda mas de una hora, el navegador me direcciona a una pagina donde dice que esta no puede ser desplegada. La cosa es que ya le meti tiempo a la sesion en el web.xml, le puse un script con javascript para que este trabajando el cliente mientras este recibe la respuesta del servidor, le coloque cookies y nada, no termina de funcionar.

La aplicacion dentro del servidor sigue con el flujo normal (esto ya lo verfique con los logs) pero la cosa es que como ya me direcciono previamente a la pagina que dice que no esta disponible, no me manda a la pagina que si me direcciona cuando no se tarda mas de una hora.

Alguien tendra una idea de por que sea esto o como se pueda solucionar. espero me puedan ayudar, saludos

Respuestas

La solución con este tipo de procesos tan largos no es hacer esperar al navegador a que termine el cómputo. Si tarda tanto lo ideal es hacerlo en background.

Da igual que programes en JSP o en cualquier otra tecnología o lenguaje. De este modo el flujo sería el siguiente:

  • Se solicita la página al servidor, que puede tener un tiempo para ser procesada.
  • En el servidor se genera una entrada en una tabla de la base de datos, como una cola de procesos, indicando las características del proceso que se debe ejecutar. Devuelve entonces un mensaje inmediatamente al usuario diciendo que el proceso se ha encolado.
  • Existe una tarea programada que se ejecuta cada x tiempo. Esa tarea programada verifica si hay algún proceso en la cola.
  • En caso que exista algún proceso, lo ejecuta... en el momento que termina, le manda una señal al usuario, que puede ser un correo electrónico, indicando cómo puede acceder al resultado del ejecución de ese proceso.

Este flujo es más optimizado y menos susceptible de errores.

Sergio
361 11 31 13

La duda del por que se pierde la pagina, todavia la tengo, pero la solucion fue poner sesiones y scriptles en la pagina, de todas formas les agradezco mucho, saludos :).

kaneo