2009-06-29 7 views

Répondre

0

Je suppose que l'one-way est d'accéder à la base de données directement, bien que ce soit un peu risqué puisque l'API manipule complètement cela.

Il y a un problème dans leur Jira à cet effet. Leur conclusion est que vous avez besoin de revoir le mécanisme de planification si elles veulent répondre aux questions de cluster.

Vous pouvez consulter http://jira.opensymphony.com/browse/QUARTZ-372

3

On dirait que la refonte du mécanisme de planification ne se produit pas de sitôt.

Alors, voici comment je vérifie la table directement - ajouter le support de groupe si vous le souhaitez:

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() 
     } 
    } 
} 
Questions connexes