2011-01-03 9 views
6

मैं एम्बेडेड Quartz.Net के साथ एक खिड़कियों सेवा है, लेकिन एक Quartz.Net काम के भीतर एक instantiated ऑब्जेक्ट के संदर्भ बनाने के लिए एक रास्ता खोजने के लिए प्रतीत नहीं कर सकते हैं ...Quartz.Net नौकरी के भीतर किसी तत्काल ऑब्जेक्ट का संदर्भ कैसे बनाएं?

जब खिड़कियों सेवा प्रारंभ होने से यह को दर्शाता है लॉगिंग, डेटाबेस एक्सेस और अन्य उद्देश्यों के लिए कुछ ऑब्जेक्ट्स, इसलिए मैं इन क्वार्ट्ज.Net नौकरियों को इन ऑब्जेक्ट्स के अपने उदाहरण बनाने के बजाय इन पहले से ही तत्काल ऑब्जेक्ट्स का उपयोग करना चाहता हूं। हालांकि, क्वार्ट्ज.Net नौकरियों को नो-तर्क कन्स्ट्रक्टर का उपयोग करके शेड्यूलर द्वारा तत्काल किया जाता है और इसलिए कन्स्ट्रक्टर का उपयोग करके संदर्भ पास करने का कोई तरीका नहीं है।

क्या मुझे जॉबफैक्टरी का अपना कार्यान्वयन बनाना है और क्या यह हासिल करने का एकमात्र तरीका है?

उत्तर

1

विभिन्न संदर्भ (लिनक्स/जावा), लेकिन क्वार्ट्ज से प्राप्त अपनी खुद की फैक्टरी बनाएं। "CreateScheduler" विधि को ओवरराइड करें। सुपर विधि को कॉल करें, एक स्थिर (सिंक्रनाइज़) हैश मानचित्र में उदाहरण सहेजें। नाम से उदाहरण प्राप्त करने के लिए स्थिर विधि लिखें।

2

आप jobDetail.JobDataMap में ऑब्जेक्ट्स के मुख्य-मूल्य जोड़े जोड़ सकते हैं और उन्हें from(JobExecutionContext) context.JobDetail.JobDataMap पुनर्प्राप्त कर सकते हैं।

+0

क्वार्ट्ज वेबसाइट का कहना है "केवल स्टोर आदिम डेटा प्रकार (तार सहित) JobDataMap में" - http://www.quartz-scheduler.org/documentation/best-practices – TruthOf42

3

मुझे लगता है कि इस स्थिति के लिए काम करने वाला दृष्टिकोण job listener का उपयोग करना है। आप एक "डमी" नौकरी बना सकते हैं जो कुछ भी नहीं करता है, और एक श्रोता जो नौकरी चलाए जाने पर पता लगाता है। आप श्रोता को किसी भी निर्भरता के संदर्भों के साथ तत्काल कर सकते हैं, जब तक कि आप नौकरी शेड्यूलिंग सेट अप करते समय उपलब्ध हों।

IJobDetail job = JobBuilder.Create<DummyJob>() 
      .WithIdentity("job1") 
      .Build(); 

     ITrigger trigger = TriggerBuilder.Create() 
      .WithIdentity("trigger1") 
      .StartNow() 
      .WithSimpleSchedule(x => x 
       .WithInterval(interval) 
       .RepeatForever()) 
      .Build(); 

     _scheduler.ScheduleJob(job, trigger); 

     MyJobListener myJobListener = new MyJobListener (dependency1, dependency2); 

     _scheduler.ListenerManager.AddJobListener(myJobListener, KeyMatcher<JobKey>.KeyEquals(new JobKey("job1"))); 
+0

मैं, आपसे सहमत करता है दस्तावेज आपका लिंक "जॉब श्रोता" इंगित करता है। मुझे वही समस्या थी क्योंकि डीन और Google ने मुझे यहां भेजा - मैं चुने हुए व्यक्ति पर आपका समाधान पसंद करता हूं और इसे तदनुसार लागू करता हूं। – roadkill

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