2013-02-13 18 views
7

यह बहुत सीधे आगे होना चाहिए, लेकिन मुझे कोई नौकरी निष्पादित नहीं की जा रही है। मेरे पास कार्य की निष्पादन() विधि पर ब्रेकपॉइंट है, कोई धागा कभी नहीं मिलता है। मुझे क्या गलत नहीं मिल रहा है।क्वार्ट्ज सरल ट्रिगर फायरिंग नहीं

नौकरी

class Printer implements Job{ 
    public Printer(){ 
     System.out.println("created printer"); 
    } 

    @Override 
    public void execute(JobExecutionContext context) 
      throws JobExecutionException { 
     System.out.println("hi" + context.getFireTime()); 
    } 

} 

मुख्य वर्ग

class MyClass { 
     public static void main(String[] args) throws Throwable { 
      Scheduler s = StdSchedulerFactory.getDefaultScheduler(); 
      JobDetail job = newJob(Printer.class).build(); 
      CronTrigger trigger = 
        newTrigger() 
        .withIdentity("a", "t") 
        .withSchedule(cronSchedule("0/5 * * * * ?").inTimeZone(TimeZone.getDefault())) 
        .forJob(job).build(); 
      s.scheduleJob(job, trigger); 

// This prints the right date! 

      System.out.println(trigger.getNextFireTime()); 
      s.start(); 
     } 
} 

संपादित: मुझे पता चला मैं quartz.property फ़ाइल नहीं था, इसलिए वहाँ संभावना क्वार्ट्ज के लिए ThreadPool था कभी नहीं बनाया

DirectSchedulerFactory.getInstance().createVolatileScheduler(10); 
Scheduler s = DirectSchedulerFactory.getInstance().getScheduler(); 

पता है क्या: इसलिए के रूप में documentation में पढ़ा है, मुझे कोड को निम्न से StdSchedulerFactory का उपयोग कर की जगह? अभी तक कोई भाग्य नहीं है। वही समान प्रभाव। आवेदन जिंदा रहता है, फायरिंग ट्रिगर नहीं करता है।

+1

क्या आपका प्रोग्राम अभी समाप्त नहीं हुआ है? – Dariusz

+0

नहीं क्योंकि मैं शेड्यूलर को बंद नहीं करता (उद्देश्य में)। – sscarduzio

+0

क्या आपने वास्तव में पुष्टि की थी कि आपका एप्लिकेशन बस 's.start() 'के ठीक बाद समाप्त नहीं होता है? – Dariusz

उत्तर

9

मुझे समाधान मिला: नौकरी (प्रिंटर) को सार्वजनिक को परिभाषित करने वाले वर्ग की दृश्यता को बदलना सार्वजनिक पहुंचने के लिए क्वार्ट्ज को संभव बनाता है और इसे चलाने के लिए संभव बनाता है।

public class Printer implements Job{ // just add 'public'! 
    public Printer(){ 
     System.out.println("created printer"); 
    } 

    @Override 
    public void execute(JobExecutionContext context) 
      throws JobExecutionException { 
     System.out.println("hi" + context.getFireTime()); 
    } 

} 

यही समझ में आता है, क्योंकि यह नियोजक को एक <? extends Job>.class पारित करने के लिए ही संभव है (खूनी नरक, क्यों ??) और नहीं - गुमनाम वस्तुओं - उदाहरण के लिए।

ही कहा है, मैं वास्तव में जिस तरह से क्वार्ट्ज चुपचाप एक भी त्रुटि संदेश के बिना नौकरियों फायरिंग में विफल रहता है परेशान हो सकते हैं।

+3

एक और समस्या हो सकती है अगर नियंत्रक को पैरामीटर की आवश्यकता हो या सार्वजनिक न हो। मैंने आपकी समस्या को धन्यवाद दिया। –

+2

मुझे एक ही समस्या थी। मुझे यह भी बहुत अजीब/निराशाजनक लगता है कि कोई त्रुटि संदेश बिल्कुल नहीं दिया गया है ... –

संबंधित मुद्दे