Aquí está el problemaSolución al problema de larga duración consulta en una aplicación web (solicitud asincrónica)
Un usuario de una aplicación web de la empresa está realizando una tarea que resulta en una (muy largo) consulta a la base de largo (o otro procesamiento larga tarea intensiva)
Problemas:
- solicitud de tiempo de espera - después de un tiempo, el usuario puede obtener una solicitud de tiempo de espera
- sesión de tiempo de espera - Si no se utilizan métodos de mantenimiento de la sesión, una sec tiempo de espera sión puede ocurrir
- Solicitud de bloqueo de rosca
- ya que el hilo de solicitud no está regresando, puede bloquear nuevas requrests (si alcanza el límite de la piscina)
- En algunos servidores de aplicaciones estado de salud del servidor podría desencadenar una forzada reinicio del nodo o aplicación (debido a una solicitud hilo de larga ejecución)
- Si el usuario abandona la página:
- la transacción no se cancela - lo que resulta en el procesamiento inútiles que nadie se beneficiará de
- el usuario no puede volver a ver los resultados después de completar
- ninguna indicación de progreso - el usuario simplemente espera a que la página se actualice
Hay varias soluciones que surgieron, pero no estoy seguro de saber qué es mejor (en todos los aspectos, rendimiento, mejores prácticas, elegancia y facilidad de mantenimiento) y me gustaría saber cuál es la solución recomendada, y si existe una solución que me perdí? (Probablemente sí, y muchos)
La mala solución: usar el hilo solicitud como un subproceso de trabajo, guardar el estado de avance en la sesión, tienen un AJAX llamar a comprobar el estado (en la sesión) en otra solicitud paralela
Solución de compromiso: cree su propio grupo de subprocesos, gestione un subproceso de supervisión, un subproceso de trabajo y se encargue de agrupar sincronizando los estados en un caché transaccional distribuido o almacenamiento persistente. esto libera la solicitud, pero crea hilos de los que el servidor de aplicaciones no tiene conocimiento, y no se cerrarán en caso de anulación de la implementación. Depende de ti el apagar los hilos de una manera limpia, y siempre hay una posibilidad de que termines filtrando algo. Esta no es la manera J2EE de hacerlo tampoco.
La solución J2EE: utilizar JMS para la tarea asíncrona, esto es lo que es ment para
la solución Primavera: el uso de Primavera lotes
¿Qué harías/hicieron en sus proyectos? ¿Qué otras soluciones sabes? ¿Cuál de los que anoté anteriormente es el ganador en tu opinión?
Bien escrito respuesta, gracias –
@Ehrann: ¡Gracias! Implementalo y avísame si tienes una solución más suave ... – raoulsson