2009-06-29 18 views
6

के साथ क्लस्टर में वर्तमान में सभी निष्पादित नौकरियों की एक सूची प्राप्त करें क्वार्ट्ज में विधि Scheduler.getCurrentlyExecutingJobs() विधि स्पष्ट रूप से क्लस्टर को अवगत नहीं है। सभी निष्पादन नौकरियों की सूची प्राप्त करने के लिए लोग किस विधि का उपयोग कर रहे हैं?क्वार्ट्ज

उत्तर

0

मुझे लगता है कि डेटाबेस को सीधे एक्सेस करने का एक तरीका है, हालांकि यह थोड़ा जोखिम भरा है क्योंकि एपीआई पूरी तरह से इसे संभालती है।

इस उद्देश्य के लिए उनके जिरा में एक मुद्दा है। उनका निष्कर्ष यह है कि यदि आप क्लस्टर को जागरूक करना चाहते हैं तो आपको शेड्यूलिंग तंत्र को ओवरहाल करना होगा।

आप उल्लेख कर सकते हैं करने के लिए 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() 
     } 
    } 
} 
संबंधित मुद्दे