2010-08-06 2 views
8

Ich benutze die derzeit neueste Quarz 1.8.3 auf jboss 4.0.5. Die Quarzjobs sind persistent und werden in einer lokalen Datenbank gespeichert. Wenn ich die Shutdown- oder Standby-Methode für das ausführende Quarz-Scheduler-Objekt aufrufen, werden die Jobs weiterhin vom Scheduler ausgeführt, nur dass der Jobstatus leer ist und die Ausführung fehlschlägt.Quartz Scheduler nicht nach dem Herunterfahren

Ich würde (zumindest nach Quarz-API-Dokumentation) erwarten, dass wenn ich heruntergefahren oder den Scheduler Standby mache, dass Jobs, die zuvor in der Datenbank geplant wurden, nicht ausgeführt werden.

Wenn Herunterfahren oder Standby auf dem Scheduler nicht die Methode ist, um das zu erreichen, was ist das?

Die Jobs beenden nicht nur die Ausführung, sondern es werden weiterhin geplante Jobs ausgelöst.

sind hier zusätzliche Informationen wie gefragt:

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);   
     } 
    } 
} 

Das Folgende ist eine Kopie der Quarz-Konfigurationseigenschaften

:

#============================================================================ 
# 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 

Hier ist ein Ausschnitt aus der web.xml, wo der Quarz initialisiert:

<!-- 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> 

Danke

+1

Ok danke Datei, ich habe die –

+0

Welche Art von Quarz-Scheduler verwenden Sie? Könnten Sie die Initialisierung des Dienstes und des Schedulers posten? – Falle1234

+0

sind nur die laufenden Jobs ihre Ausführung beendet oder werden geplante Jobs auch ausgeführt? –

Antwort

7

Wenn beim Aufruf von shutdown Jobs ausgeführt werden, hängt die Unterbrechung dieser Jobs von der Eigenschaft org.quartz.scheduler.interruptJobsOnShutdown ab.

Siehe http://jira.terracotta.org/jira/browse/QTZ-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel. Ich kann dazu keine Dokumentation finden.

Die andere Eigenschaft ist org.quartz.scheduler.makeSchedulerThreadDaemon=true, die Quartz Scheduler heruntergefahren wird, sobald Ihr aufrufender Thread heruntergefahren wird. Ich weiß nicht, was mit dem Stand der Jobs passiert.

Wie in den Kommentaren erwähnt, post einige Code und Konfiguration, um eine klare Antwort zu erhalten.

3

können Sie org.quartz.plugin.shutdownhook.cleanShutdown=TRUE in Ihren Quarz Eigenschaften verwenden