2010-02-22 13 views
6

मैंने एक विकेट + हाइबरनेट + स्प्रिंग वेब एप्लिकेशन स्थापित किया है जिसमें कुछ डेटा एकत्र करना शामिल है (कुछ फाइलें जेनरेट और लौटाई गई हैं), इसे डेटाबेस में संग्रहीत करना, कुछ छवियां बनाना और यह सब प्रदर्शित करना शामिल है एक वेबपेज पर।विकेट: लंबे समय तक चलने वाले कार्यों को कैसे संभालना है

यह सब छोटे रनों के लिए ठीक काम करता है, लेकिन कभी-कभी डेटा एकत्र करना (जिसमें कुछ रिमोट नंबर क्रंचिंग शामिल है) बहुत लंबा (20+ मिनट) और समय निकालता है। मैंने दो दृष्टिकोणों का उपयोग करके इसे हल करने का प्रयास किया है, लेकिन उनमें से दोनों कुछ समस्याएं दिखाते हैं।

पहला दृष्टिकोण AjaxLazyLoadPanel एस का उपयोग कर रहा था और getLazyLoadComponent के भीतर बस सबकुछ कर रहा था। यह छोटे रनों के लिए ठीक काम करता था, लेकिन 20+ मिनट के लिए LazyLoadComponents टाइमआउट के कारण लोड नहीं होगा (अच्छा oxymoron)।

दूसरा दृष्टिकोण एक जोड़ा गया AjaxSelfUpdatingTimerBehavior के साथ एक इंटरमीडिएट फ्रैगमेंट बनाने में शामिल है जिसमें 10 सेकंड तक सेट की अवधि है, जो संख्या क्रंचिंग में बनाई गई फ़ाइलों के लिए मतदान किया जाता है। ऐसा लगता है कि कार्य बिना किसी समस्या के पृष्ठभूमि में चलते हैं, लेकिन जब डेटाबेस में लौटाए गए डेटा को संग्रहीत करने की आवश्यकता होती है तो विफल हो जाती है। मैं व्यू पैटर्न में ओपन सत्र का उपयोग कर रहा हूं, लेकिन शायद 20 मिनट के बाद डेटा स्टोर करने का प्रयास करते समय यह विफल हो जाता है ?? (समाधान इसे हल करने में झूठ बोल सकता है ..)।

ऊपर समस्याओं मैं अब इन लंबे चल रहे कार्यों को संभालने के लिए वैकल्पिक तरीकों पर ऊपर पढ़ रहा हूँ और के कारण

भर में आया था:

मैं अब सोच रहा हूँ यदि इनमें से कोई भी टाइम-आउट समस्याओं को हल करने के लिए बेहतर हो सकता है, तो मैं दोनों कार्यों को चलाने और डेटाबेस में डेटा संग्रहीत करने में सक्षम हूं, या यदि किसी के पास कोई अन्य समाधान है जो इस स्थिति में मदद कर सकता है।

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

सादर,
टिम

उत्तर

3

मैं जानता हूँ कि हम एक संलग्न AjaxSelfUpdatingTimerBehavior के साथ एक पैनल का उपयोग करने में सफलता मिली है। कार्य और परिणाम टुकड़े दृश्य तर्क से अलग होते हैं, लेकिन आपके द्वारा बनाई गई सेवा के माध्यम से दृश्य के लिए पहुंच योग्य होते हैं। हमारे द्वारा उपयोग किए जाने वाले सेवा कार्यान्वयन को व्यक्तिगत कार्यों को चलाने के लिए TheadPool या ExectutorService प्रारंभ करने के लिए ज़िम्मेदार है। सेवा होने वाली विशेष नौकरी/कॉल की प्रगति/स्थिति की निगरानी करने का एक तरीका प्रदान कर सकती है। एक बार यह पूरा हो जाने पर इसे डेटा को दृश्य के लिए भी उपलब्ध कराया जाना चाहिए। सेवा कार्यान्वयन (या इंजेक्शन डीएओ) में एक सत्र फैक्ट्री का इंजेक्शन वेबसेशन के बाहर हाइबरनेट सत्र बनाने के लिए पर्याप्त होना चाहिए।

+0

धन्यवाद, ऐसा कुछ है जो मैंने प्रश्न पोस्ट करने के बाद भी सोचा था (एक प्रश्न तैयार करना इस तरह से रबर डकिंग जैसा है)। मुझे अभी भी यह पता लगाना होगा कि क्या यह वास्तव में समस्या को हल करेगा, क्योंकि लॉग टाइम आउट सत्रों के बारे में कुछ भी रिकॉर्ड नहीं करते हैं .. डेटाबेस में परिणामों की अनुपस्थिति अपरिपक्व है। यदि मुझे और पता चलता है तो अपडेट हो जाएगा। – Tim

+1

इस दृष्टिकोण के लिए जा रहा है और इसके बाद से कोई समस्या नहीं है .. धन्यवाद! – Tim

+0

टिम सुनने के लिए अच्छा है! – Matt

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