2010-11-08 30 views
14

मैं जावा में सर्वलेट एपीआई (टॉमकैट पर तैनात करने के लिए) का उपयोग करके निर्मित एक ऑनलाइन गेम के लिए एक आंकड़े ऐप्स बना रहा हूं। उपयोगकर्ता द्वारा लॉग इन किए जाने पर प्रत्येक बार आंकड़े सर्वर पर संदेश भेजने के लिए पर्याप्त आसान है, क्योंकि अनुरोधों को संभालने के लिए Servlets/Tomcat के लिए हैं।एक वेब अनुप्रयोग में अनुसूचित कार्य?

मैं भी करने की जरूरत है समय-समय पर आँकड़े सर्वर पर अनुरोध आरंभ हालांकि, उदाहरण के खेल सर्वर से ऑनलाइन उपयोगकर्ताओं की संख्या या हमारे फेसबुक पेज से प्रशंसकों की संख्या को पुनः प्राप्त करने के लिए।

ऐप के मुख्य सर्वलेट में केवल एक धागा शुरू करना आसान होगा और थोड़ी देर में डेटा पुनर्प्राप्ति करने दें, लेकिन यह थोड़ा अजीब लगता है क्योंकि अन्य सभी धागे टोमकैट द्वारा बनाए जाते हैं।

  1. कि ठीक है जैसे कि यह कर रही है?
  2. यदि नहीं, तो ऐसा करने का अनुशंसित तरीका क्या है?
  3. यह भी सही कुछ इस तरह के लिए सर्वलेट्स उपयोग करने के लिए है? विकल्प क्या है?

पहले उत्तरों के बाद नोट: मैं समय या समरूपता की समस्या का समाधान नहीं ढूंढ रहा हूं, क्योंकि मैं आसानी से दोनों को संभाल सकता हूं। मुझे बस यह जानने की जरूरत है कि एक सर्वलेट कंटेनर में प्रो-सक्रिय प्रक्रिया को सही तरीके से कैसे शुरू किया जाए।

उत्तर

13

क्वार्ट्ज आपका सर्वश्रेष्ठ दांव है, और सबसे उच्च विन्यास। इसमें सीआरओएन आधारित इंटरफ़ेस या एक विशिष्ट घटना से संबंधित नौकरियां उत्पन्न करने के लिए एक अधिक गतिशील तरीका है, यदि आपका उपयोग केस इसके लिए कॉल करता है तो क्वार्ट्ज इसे कर सकता है। इसमें डेटाबेस में नौकरियां जारी रखने की क्षमता है ताकि वे पुनरारंभ किए जा सकें।

http://www.quartz-scheduler.org/

को इस तरह web.xml में विन्यास इसे स्वत: शुरू:

<servlet> 
    <servlet-name>QuartzInitializer</servlet-name> 
    <display-name>Quartz Initializer Servlet</display-name> 
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 

    <init-param> 
     <param-name>shutdown-on-unload</param-name> 
     <param-value>true</param-value> 
    </init-param> 

    <init-param> 
     <param-name>start-scheduler-on-load</param-name> 
     <param-value>true</param-value> 
    </init-param> 

    </servlet> 
+0

धन्यवाद, लेकिन विशिष्ट समय समस्याओं क्या मैं के साथ सौदा करने की आवश्यकता नहीं कर रहे हैं। क्वार्ट्ज + टोमकैट पर एक ट्यूटोरियल से निर्णय लेते हुए, आपको अभी भी क्वार्ट्ज को शुरू करने और रोकने की ज़रूरत है कि मैं अपना खुद का धागा कैसे शुरू करूं। –

+0

मुझे यकीन नहीं है कि आप कौन सा ट्यूटोरियल देख रहे हैं लेकिन आम तौर पर आप इसे कॉन्फ़िगरेशन के साथ ऑटो-स्टार्ट करना चाहते हैं और इसके लिए रनटाइम निर्भरताओं पर भरोसा नहीं करना चाहते हैं, यह बहुत साफ है। शायद यही वह है जिसे आप ढूंढ रहे हैं। – vaskin

9

आप पर विचार करना चाहिए:

पहिया, क्वार्ट्ज और अन्य उत्पादों को पहले से ही आप के लिए धागे/समय समाप्ति/संगामिति संबंधी मामलों को संभालते पुनर्रचना परेशान मत करो!

+5

2 साल बाद, TimerTask की अधिक आधुनिक संस्करण अधिक उल्लेख के लिए [ScheduledExecutorService] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html) – Danger

+0

अंगूठे है ऐसा करने के लिए एक तरीका से भी ज्यादा – jsh

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