2010-08-06 8 views
8

Estoy utilizando el último cuarzo 1.8.3 actual en jboss 4.0.5. Los trabajos de cuarzo son persistentes y se guardan en una base de datos local. Cuando llamo al método shutdown o standby en el objeto de planificador de cuarzo en ejecución los trabajos aún continúan ejecutándose por el planificador, solo que el estado de los trabajos está vacío y la ejecución falla.Programador de cuarzo que no se detiene después del cierre

Me esperaba (al menos según la documentación de la API de cuarzo) que cuando apago o hago que el planificador esté en espera, los trabajos programados previamente en la base de datos no se ejecutarán.

Si el apagado de llamada o el modo de espera en el programador no es el método para lograrlo, ¿qué es?

Los trabajos no solo terminan la ejecución, sino que continúan activándose los trabajos planificados.

Aquí hay información adicional como preguntó:

public class QuartzNotificationsSchedulerBean implements NotificationsScheduler, ServletContextAware { 
... 
public String scheduleNotification(Notification notification) { 

     // Schedule the job with the trigger 
     try { 
      // Define job instance 

       String  groupName = this.createNotificationGroupName(notification); 
       String  triggerName = this.createNoficationTriggerName(notification); 
       String  jobName  = this.createNoficationJobName(notification); 
       JobDetail job   = new JobDetail(jobName, groupName , ScheduledNotificationJob.class); 

       JobDataMap jobDataMap = new JobDataMap(); 
       jobDataMap.putAll(notification.getContext());  
       job.setJobDataMap(jobDataMap); 

       Calendar notificationTime = notification.getTime();  

       Trigger trigger = new SimpleTrigger(triggerName, groupName , notificationTime.getTime()); 

       scheduler.scheduleJob(job, trigger);   

       return trigger.getName();   
     } catch (SchedulerException e) { 
      throw new NotificationScheduleException(e, notification); 
     } 

     return null; 
    } 

public void setServletContext(ServletContext servletContext) {  
     this.sf = (SchedulerFactory) servletContext.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY); 

     try { 
      scheduler = sf.getScheduler(); 
      if(scheduler.isStarted() == false) { 
       scheduler.start(); 
      } 

     } catch (SchedulerException e) {   
      logger.error("Failed to load Quartz scheduler ", e);   
     } 
    } 
} 

La siguiente es una copia de las propiedades de configuración de cuarzo:

#============================================================================ 
# Configure Main Scheduler Properties 
#============================================================================ 

org.quartz.scheduler.instanceName = scheduler 
org.quartz.scheduler.instanceId = AUTO 
org.quartz.scheduler.wrapJobExecutionInUserTransaction = true 

#============================================================================ 
# Configure ThreadPool 
#============================================================================ 

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 45 
org.quartz.threadPool.threadPriority = 5 

#============================================================================ 
# Configure JobStore 
#============================================================================ 

org.quartz.jobStore.misfireThreshold = 60000 
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 
#org.quartz.jobStore.useProperties = false 
org.quartz.jobStore.dataSource = FOR_QUARTZ 
org.quartz.jobStore.isClustered = true 
org.quartz.jobStore.clusterCheckinInterval = 20000 


#============================================================================ 
# Configure Datasources 
#============================================================================ 

org.quartz.dataSource.FOR_QUARTZ.jndiURL = java:jdbc/live-quartz 

Aquí hay un fragmento de la web.xml donde el cuarzo es inicializado:

<!-- START NOTIFICATION SERVICE --> 
    <context-param> 
     <param-name>config-file</param-name> 
     <param-value>wm_quartz.properties</param-value> 
    </context-param> 
    <context-param> 
     <param-name>shutdown-on-unload</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <context-param> 
     <param-name>start-scheduler-on-load</param-name> 
     <param-value>true</param-value> 
    </context-param>  

    <listener> 
     <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> 
    </listener> 

Gracias

+1

Ok gracias, lo hice –

+0

¿Qué tipo de programador de cuarzo se utiliza? ¿Podría publicar la iniciación del servicio y el planificador? – Falle1234

+0

son solo los trabajos en ejecución que terminan su ejecución o también se están ejecutando trabajos planificados? –

Respuesta

7

Si hay trabajos que se ejecutan cuando llamas al paro, si interrumpir esos trabajos o no depende de la propiedad org.quartz.scheduler.interruptJobsOnShutdown.

Ver http://jira.terracotta.org/jira/browse/QTZ-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel. No puedo encontrar más documentación sobre esto.

La otra propiedad es org.quartz.scheduler.makeSchedulerThreadDaemon=true, que cerrará el programador de cuarzo tan pronto como se cierre el hilo de llamada. No sé qué pasa con el estado de los trabajos.

Como se menciona en los comentarios, publique un código y configuración para obtener una respuesta clara.

3

puede utilizar org.quartz.plugin.shutdownhook.cleanShutdown=TRUE en las propiedades de archivo de cuarzo

Cuestiones relacionadas