2009-06-29 7 views

Antwort

0

Ich würde davon ausgehen, dass man direkt auf die Datenbank zugreifen kann, obwohl es ein bisschen riskant ist, da die API das vollständig handhabt.

Es gibt ein Problem in ihrem Jira für diesen Zweck. Ihre Schlussfolgerung ist, dass Sie den Scheduling-Mechanismus überarbeiten müssen, wenn Sie Cluster-Kenntnisse berücksichtigen möchten.

können Sie beziehen sich auf http://jira.opensymphony.com/browse/QUARTZ-372

3

der Scheduling-Mechanismus geschieht nicht so bald wie Überholungs Sieht aus. So

, hier ist, wie ich den Tisch direkt bin Überprüfung - Unterstützung durch die Gruppe hinzufügen, wenn Sie es wollen:

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() 
     } 
    } 
} 
Verwandte Themen