2013-08-19 14 views
5

हम स्प्रिंग 3.1, जेपीए (हाइबरनेट के माध्यम से) और क्वार्ट्ज का उपयोग कर रहे हैं। आम तौर पर हम सेवा बीन्स पर @PersistenceContext एनोटेशन के माध्यम से डीबी के साथ बातचीत करते हैं, और या तो स्प्रिंगएमवीसी नियंत्रक, या ग्रेनाइट्स-प्रबंधित सेवा आमंत्रण।क्वार्ट्ज जॉब में पर्सिस्टेंस कॉन्टेक्स्ट का उपयोग

मैं एक क्वार्ट्ज नौकरी लिखने पर काम कर रहा हूं जिसे डेटाबेस से बातचीत करने की आवश्यकता है। मैंने यह काम करने के लिए जो कुछ भी पा सकते हैं, मैंने कोशिश की है। मैंने jobMap के माध्यम से स्प्रिंग-प्रबंधित घटक (@PersistenceContext और @Transactional के साथ एनोटेटेड) में गुजरने का प्रयास किया, entityManager.persist (o) निष्पादित करने के लिए कॉल, लेकिन डेटाबेस में कुछ भी नहीं होता है। मैंने नौकरी ऑब्जेक्ट पर autowireBean() को कॉल करने के लिए फैक्टरी क्लास बनाने के लिए this answer के समान प्रयास किया। मैंने नौकरी कक्षा की स्थापना की:

public class CreateAlertJob implements Job { 

    @PersistenceContext 
    EntityManager entityManager; 

    @Override 
    @Transactional 
    public void execute(JobExecutionContext context) throws JobExecutionException { 

     SomeEntity entity = new SomeEntity(); 
     entityManager.persist(entity); 
    } 
} 

वही परिणाम, विधि निष्पादित होती है लेकिन डेटाबेस को अनलर्टेड किया जाता है। मुझे this blog post मिला जो एक गिटहब परियोजना का संदर्भ देता है। वहां वह एक हाइबरनेट सत्र स्थापित करने के लिए जेपीए इंटरसेप्टर का उपयोग कर रहा है, लेकिन यह डीएओ पैटर्न का उपयोग करता है और मैं @PersistenceContext का उपयोग करके चिपकना चाहता हूं।

स्पष्ट रूप से क्वार्ट्ज थ्रेड के बारे में कुछ है जो इसे ठीक से काम करने से रोक रहा है? मैं विचारों से बाहर हूं और इस काम को प्राप्त करने के लिए बस एक स्प्रिंगएमवीसी नियंत्रक को वेब सेवा कॉल करने पर विचार कर रहा हूं।

उत्तर

6

चूंकि आपके CreateAlertJob वसंत द्वारा नहीं बनाया गया है, @Transactional इसमें प्रभावी नहीं होता है।

आप निम्नलिखित विकल्प हैं:

  • प्रतिनिधि वास्तविक कार्य सेम वसंत के और @Transactional वहाँ
  • उपयोग programmatic transaction management स्प्रिंग डिफ़ॉल्ट कार्यान्वयन के बजाय
  • Use AspectJ-based AOP implementation डाल (लेकिन इसके लिए इस तरह के एक सरल overkill होगा समस्या)
+0

मैं इस शुरू में की कोशिश की थी और यह काम नहीं कर रहा था लेकिन यह स्पष्ट है कि कुछ अन्य मुद्दों पर जा रहे हैं। एक वसंत बीन में काम करना सबसे अच्छा विकल्प लगता है, और अच्छी तरह से काम कर रहा है। – NTyler

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