2009-06-29 5 views

risposta

0

Suppongo che un modo sia quello di accedere direttamente al database, sebbene sia un po 'rischioso dato che l'API lo gestisce completamente.

C'è un problema nella loro Jira a questo scopo. La loro conclusione è che è necessario revisionare il meccanismo di pianificazione se vogliono soddisfare le esigenze del cluster.

è possibile fare riferimento al http://jira.opensymphony.com/browse/QUARTZ-372

3

Sembra che la revisione del meccanismo di pianificazione non sta accadendo in qualunque momento presto.

Quindi, ecco come sto controllando la tavola direttamente - aggiungere il supporto di gruppo se lo vuoi:

class QuartzClusterJobStatusService 
{ 
    def quartzScheduler 

    boolean isJobRunning(String job) { 
     return isJobRunningHere(job) || isJobRunningElsewhere(job) 
    } 

    boolean isJobRunningHere(String job) { 
     for (JobExecutionContext j : quartzScheduler.getCurrentlyExecutingJobs()) { 
      if (new JobKey(job,"GRAILS_JOBS").equals(j.jobDetail.key)) { 
       return true 
      } 
     } 
     return false 
    } 

    boolean isJobRunningElsewhere(String job) { 
     JobStoreSupport js = quartzScheduler.sched.resources.jobStore 
     if (!js.isClustered()) { 
      return false 
     } 
     Connection conn = DBConnectionManager.getInstance().getConnection(js.getDataSource()); 
     PreparedStatement stmt = null 
     try { 
      stmt = conn.prepareStatement("SELECT 1 FROM " + js.getTablePrefix() + "FIRED_TRIGGERS where JOB_NAME = ?") 
      stmt.setString(1, job) 
      ResultSet rs = stmt.executeQuery() 
      return rs.next() 
     } finally { 
      if (stmt != null) 
       stmt.close() 
     } 
    } 
}