Pregunta

Estoy implementando una funcionalidad en mi aplicación web para que un cliente pueda generar el informe ingresando algunos datos y haciendo clic en el botón enviar.

El problema es que la generación de informes lleva mucho tiempo y es posible que el informe no se genere si el usuario ingresó datos incorrectos.

La tarea completa de generación de informes tiene muchas subtareas y quiero que cuando el cliente presione enviar, justo debajo de esa página, quiero mostrar el estado / progreso de las tareas de generación de informes divididas en varias subtareas como

- Validating input data ------ Done
- Fetching the data     ------ In Progress
 and so on,

¿Cómo puedo lograr esto usando Struts2, jQuery en la capa web?

Cualquier ayuda será muy apreciada.

Gracias

¿Fue útil?

Solución

Tuvimos un problema similar. La transacción normalmente toma 20 segundos, a veces más de un minuto. Pensamos que habría soluciones más fáciles, pero terminamos con un esquema como este,

  1. Cuando se recibe la solicitud de larga ejecución, se crea una sesión y se genera un nuevo subproceso para manejar la solicitud.
  2. Una página se devuelve inmediatamente con texto para mostrar " Recopilando datos ... " ;. La página contiene un temporizador para actualizarse cada segundo. La URL de recarga contiene el ID de sesión (no usamos HttpSession) en el parámetro de consulta.
  3. Cuando el manejador de acciones ve la solicitud con un ID de sesión, sabe que la sesión se inició, verifique que el hilo de trabajo esté actualizando una variable de estado. Si no se hace, actualiza la página con un nuevo estado "Recuperando datos de DB1 ...". Hay parpadeo cuando esto se hace como recarga. Si le importa, puede usar AJAX para actualizar el estado.
  4. Cuando el hilo de trabajo está listo y la página está lista para entregar, la llamada simplemente devuelve el resultado.

Nos encontramos con algún problema con el equilibrador de carga. Para que el esquema funcione, cada recarga debe volver al mismo servidor. Afortunadamente, el equilibrador de carga admite enrutamiento fijo basado en nuestra identificación de sesión.

Otros consejos

Eche un vistazo al interceptor Struts2 ExecuteAndWait. http://struts.apache.org/2. x / docs / execute-and-wait-interceptor.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top