2009-06-29 5 views

答えて

0

私は、APIが完全にそれを処理するので少し危険ですが、私は直接データベースにアクセスすることですと思います。

この目的のためにJiraに問題があります。彼らがクラスタを認識できるようにするには、スケジューリングメカニズムを見直す必要があります。あなたはhttp://jira.opensymphony.com/browse/QUARTZ-372

3

を参照することができます

は、スケジューリング機構は、いつでもすぐに起きていないオーバーホールように見えます。

だから、ここで私が直接テーブルをチェックしてる方法です - あなたはそれをしたい場合は、グループのサポートを追加します。

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