me gustaría aclarar los detalles de los scheduler.getCurrentlyExecutingJobs() en Quartz1.6. Tengo un trabajo que debería tener solo una instancia ejecutándose en un momento dado. Se puede activar para "ejecutar ahora" desde una interfaz de usuario, pero si ya se está ejecutando una instancia de trabajo para este trabajo, no debería pasar nada.encontrar un trabajo si se está ejecutando en Quartz1.6
Éste es cómo comprobar si se está ejecutando una tarea que me interesa:
List<JobExecutionContext> currentJobs = scheduler.getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx: currentJobs){
jobName = jobCtx.getJobDetail().getName();
groupName = jobCtx.getJobDetail().getGroup();
if (jobName.equalsIgnoreCase("job_I_am_looking_for_name") &&
groupName.equalsIgnoreCase("job_group_I_am_looking_for_name")) {
//found it!
logger.warn("the job is already running - do nothing");
}
}
entonces, para probar esto, tengo una prueba de unidad que intenta programar dos instancias de este trabajo, uno tras otro . Yo estaba esperando a ver el aviso cuando se trata de programar el segundo trabajo, sin embargo, en su lugar, estoy recibiendo esta excepción:
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name:
'job_I_am_looking_for_name' and group: 'job_group_I_am_looking_for_name',
because one already exists with this identification.
Cuando corro esta prueba de la unidad en un modo de depuración, con la ruptura de esta línea :
Lista currentJobs = scheduler.getCurrentlyExecutingJobs();
veo la la lista está vacía - por lo que el planificador no ve este trabajo como correr, pero sigue sin programar de nuevo - lo cual me dice que el trabajo ya estaba hecho ejecutando en el momento ...
¿Me faltan algunos puntos más finos con este método del planificador?
Gracias!
Marina
Ten en cuenta que 'getCurrentlyExecutingJobs()' método no es compatible con clústeres, por lo que va a funcionar si el uso de un solo nodo única configuración de cuarzo. – Marboni
¡gracias por el consejo útil! – Marina