2009-03-04 15 views
5

के लिए खोज रहे हैं मैं एक सामान्य एसिंक्रोनस जावा जॉब निष्पादन फ्रेमवर्क की तलाश में हूं जो Callable एस या Runnable एस को संभाल सकता है। यह java.util.concurrent.ExecutorService करने के समान होगा, (और संभवतः ExecutorService लपेट), लेकिन यह भी निम्नलिखित विशेषताएं होगा: जबकि एक नौकरी सेवित किया जा रहा हैजेनेरिक असिंक्रोनस जावा जॉब निष्पादन फ्रेमवर्क/लाइब्रेरी

  1. मामले में एक डेटाबेस आवेदन नीचे चला जाता है के लिए रोजगार के अवसर बने रहने की क्षमता , और अधूरा नौकरियों को पुनरारंभ करने में सक्षम हो। (मैं समझता हूँ कि मेरा काम Serializable जो ठीक है लागू करने के लिए हो सकता है।) काम टोकन प्राप्त करने और कार्य स्थिति के बारे में पूछताछ करने के लिए ग्राहक को सक्षम करने के

  2. UUIDs के साथ काम करें। (हुड के अंतर्गत यह जानकारी एक डेटाबेस के लिए कायम किया जाएगा और साथ ही।)

मैं ExecutorService के आसपास का निर्माण करके अपने आप को इस पर काम करना शुरू कर दिया है, लेकिन मैं बॉक्स के बाहर एक पसंद करते हैं, खुला स्रोत समाधान, अगर कोई मौजूद है।

स्प्रिंग फ्रेमवर्क के भीतर काम करने वाला कुछ आदर्श होगा।

उत्तर

3

आप Quartz उपयोग कर सकते हैं, और एक ठोस Job एडाप्टर बनाने कि एक Runnable या Callable प्रतिनिधियों। क्वार्ट्ज 'Job इंटरफ़ेस किसी कार्य के आमंत्रण के बीच कुछ राज्य बनाए रखने की क्षमता को जोड़ता है। अगर वांछित है, क्वार्ट्ज नौकरियों और उनके राज्य को एक संबंधपरक डेटाबेस में व्यवस्थित रूप से स्टोर कर सकता है, और मेजबानों के स्केलेबल क्लस्टर पर निष्पादित कर सकता है।

8

आप Quartz पर देख सकते हैं। छोटी से छोटी स्टैंड-अलोन आवेदन से सबसे बड़ी ई-कॉमर्स व्यवस्था करने के लिए -

क्वार्ट्ज एक पूर्ण विशेषताओं, खुला स्रोत कार्य शेड्यूलिंग प्रणाली है कि के साथ एकीकृत किया जा सकता है, या ओर के साथ लगभग किसी भी J2EE या J2SE आवेदन किया जाता है। क्वार्ट्ज का इस्तेमाल दसियों, सैकड़ों या यहां तक ​​कि हजारों नौकरियों को निष्पादित करने के लिए सरल या जटिल कार्यक्रम बनाने के लिए किया जा सकता है; नौकरियां जिनके कार्यों को मानक जावा घटकों या ईजेबी के रूप में परिभाषित किया जाता है। क्वार्ट्ज शेड्यूलर में कई एंटरप्राइज़-क्लास फीचर्स शामिल हैं, जैसे जेटीए लेनदेन और क्लस्टरिंग।

2

http://www.opensymphony.com/quartz/wikidocs/Features.html पर एक नज़र डालें और देखें कि यह आपके लिए पहले से ही कुछ है या नहीं।

कि पृष्ठ से:

शामिल JDBCJobStore के उपयोग के साथ , सभी नौकरियां और ट्रिगर के रूप में "गैर अस्थिर" कॉन्फ़िगर किया गया JDBC के माध्यम से

2

एक और एक संबंधपरक डेटाबेस में जमा हो जाती दिशा Terracotta का उपयोग करने जैसी कुछ हो सकती है, जिसमें आपके JVM में ढेर क्लस्टर करने की क्षमता है और उपलब्धता के लिए इसे जारी रखता है। टेराकोटा Quartz के साथ एकीकरण का समर्थन करता है यदि यह शेड्यूलिंग बिंदु से उपयोगी है। इसके अलावा, एक मास्टर वर्कर और मैसेजिंग integration module है जो उपयोगी भी हो सकता है। टेराकोटा खुला स्रोत है।

2

एलेक्स के बिंदु पर अनुवर्ती करने के लिए, टेराकोटा समाधान डाटाबेस में आपकी नौकरियों को जारी नहीं रखेगा, वे टेराकोटा वितरित मेमोरी स्टोर में लगातार बने रहेंगे।

चूंकि टेराकोटा मेमोरी स्टोर को डिस्क पर रखता है, यह उन नौकरियों को डेटाबेस में डालने का एक और अधिक कुशल संस्करण है।

साथ ही, यह आपको एक शुद्ध POJO प्रोग्रामिंग मॉडल देता है, इसलिए आपको डीबी टीएक्सएन, ओआरएम और इसी तरह से निपटने की भी आवश्यकता नहीं है - जब तक कि आपका विशेष वर्कलोड डीबी से बात न करे (इस मामले में Terracotta आपको यहां मदद या चोट नहीं पहुंचाता है, यह सिर्फ काम वितरित करने में मदद करता है)।

MasterWorker पैटर्न की मदद से आप ग्रिड पर बाहर काम वितरित करना, और आप बहुत आसानी से एक DistributedExecutorService उपयोग कर सकती हैं, काम प्रस्तुत करने इस तरह दिखता है:

CompletionService executor = new DistributedCompletionService(new DistributedExecutorService("myTopologyName")); 
executor.submit(new MyRunnable(), null); 
... 
Future f = executor.take(); 

यहाँ Quickstart guide in the master-worker implementation on the Terracotta Forge के लिए लिंक है।

इतना ही नहीं - टेराकोटा की आवश्यकता नहीं है कि आप Serializable लागू - हालांकि आप आप के लिए :)

+0

यूआरएल पुराना हो चुका है, (http इस [के साथ मिट्टी गुरु कार्यकर्ता] की कोशिश करना चाहता हूँ सकता है अगर: // www.infoq.com/articles/master-worker-terracotta) –