miércoles, 29 de mayo de 2013

¿Porqué quartz lanza dos veces la tarea?

Buenas.

Tengo una aplicación realizada con Spring y dentro de ella tengo una tarea interna. Para realizar la tarea interna, he utilizado Quartz que es un planificador muy fácil de usar y sencillo de integrar en Spring (algún día puede que ponga algo de como hacerlo).

El asunto es que aunque la configuración parece estar correcta y en entornos posteriores no parece haber ningún problema. Cuando intento hacer test sobre la tarea y debugar, me doy cuenta que dicha tarea es invocada dos veces.

Estuve googleando para ver cual podía ser la razón del error, pensando que el problema podía estar en la configuración de Quartz. Pero no es así, el fallo esta en el tomcat.

Yo despliego la aplicación en un Tomcat que manejo a través del eclipse. Como es normal, para facilitar el trabajo de desarrollo, Tomcat esta configurado para que se despliegue automáticamente cada vez que se realiza un cambio en el proyecto. Esto puede llevar a que se cree dos veces el web.xml. Y por tanto hace que se cargue el contexto de Spring dos veces y a la misma vez, se carga la configuración de quartz 2 veces. Y de ahí que se invoque dos veces la tarea.

¿Solución? Evitar que Tomcat haga el despliegue automático para evitar la creación doble del fichero descriptor de la applicación y quitar del server.xml la descripción del contexto de la aplicación. Tal y como comenta en su propia documentación

When using automatic deployment, the docBase defined by an XML Context file should be outside of the appBase directory. If this is not the case difficulties may be experienced deploying the web application or the application may be deployed twice.

Finally, note that if you are defining contexts explicitly, you should probably turn off automatic application deployment. Otherwise, your context will be deployed twice each, and that may cause problems for your app.

También puede ser que se tenga dos veces la carga del contexto de spring en el fichero web.xml.

No hay comentarios:

Publicar un comentario