2011-09-21 8 views
7

मैं जावा DeferredTask के लिए प्रलेखन द्वारा थोड़ा उलझन में हूँ। मैंने यहां पाइथन दस्तावेज पढ़ा है: http://code.google.com/appengine/articles/deferred.html लेकिन मैं बिल्कुल स्पष्ट नहीं हूं कि मैं जावा संस्करण का उपयोग कैसे करूं।जावा जीएई DeferredTask उदाहरण?

क्या आप कामकाजी नमूना कोड प्रदान कर सकते हैं जो एक DatastoreService का उपयोग करके एक साधारण लेखन करने के लिए एक DeferredTask लॉन्च करता है?

उत्तर

13

टाल उपयोग करने के लिए, आपको पहले एक वर्ग है कि कोड आप चलाना चाहते हैं शामिल हैं परिभाषित करने के लिए है:

class MyDeferred implements DeferredTask { 
    @Override 
    public void run() { 
     // Do something interesting 
    } 
}; 

बस किसी भी अन्य serializable वर्ग की तरह, आप स्थानीय लोगों को हो सकता है कार्य के बारे में प्रासंगिक जानकारी स्टोर करें। फिर, कार्य को चलाने के लिए, अपने वर्ग का एक उदाहरण का दृष्टांत और यह कार्य कतार एपीआई को पारित:

MyDeferred task = new MyDeferred(); 
// Set instance variables etc as you wish 
Queue queue = QueueFactory.getDefaultQueue(); 
queue.add(withPayload(task)); 

तुम भी अपने कार्यों के लिए गुमनाम इनर क्लासों का उपयोग कर सकते हैं, लेकिन टिप्पणी here में वर्णित चेतावनियां से सावधान ।

+5

क्या इस तरह की चीजें दस्तावेज़ीकरण में जोड़ दी जा सकती हैं, इसलिए यह कम भ्रमित है? मैं सिर्फ उस हिस्से को याद कर रहा था जहां मैंने कतार में कार्य जोड़ा था। दस्तावेज में DeferredTaskQueue के लिए अनुभाग सिर्फ एक छोटा अनुच्छेद है। उम्मीद है कि यह मदद करता है, और इसे पोस्ट करने के लिए समय निकालने के लिए धन्यवाद! +1 :) – jmort253

+0

पैडलोड विधि के साथ क्या है? इसे कहीं भी नहीं मिला :( –

+1

'withPayload' com.google.appengine.api.taskqueue.TaskOptions.Builder.withPayload (DeferredTask) है –

1

जावा स्थगित लाइब्रेरी अभी भी जीएई एसडीके में नहीं है और यही कारण है कि आप कोई आधिकारिक दस्तावेज नहीं ढूंढ सकते हैं। इस सुविधा का अनुरोध मार्च 2011 के बाद से तय हो गई है और अब आप आस्थगित पुस्तकालय straight from the Sdk

उपयोग कर सकते हैं आप विन्स BONFANTI आस्थगित पुस्तकालय है कि उपलब्ध here इस्तेमाल कर सकते हैं।

पुस्तकालय उपयोग काफी सरल है और यह अच्छी तरह से दस्तावेज़ में समझाया गया है:

1) आस्थगित कार्य हैंडलर (सर्वलेट) web.xml भीतर समकालिक किए जाने की जरूरत है।

<servlet> 
    <servlet-name>Deferred</servlet-name> 
    <servlet-class>com.newatlanta.appengine.taskqueue.Deferred</servlet-class> 
     <init-param> 
      <param-name>url-pattern</param-name> 
      <param-value>/worker/deferred</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Deferred</servlet-name> 
     <url-pattern>/worker/deferred</url-pattern> 
    </servlet-mapping> 

2) "आस्थगित" कतार queue.xml भीतर विन्यस्त किया जा करने की जरूरत है (का उपयोग जो कुछ भी आप चाहते हैं दर:
ध्यान दें कि init-परम वास्तविक यूआरएल पैटर्न से मेल खाना चाहिए)।
यदि आप defer() विधि में वैकल्पिक कतार नाम का उपयोग करते हैं, तो उचित नामों के साथ कतार बनाएं।

<queue> 
     <name>deferred</name> 
     <rate>10/s</rate> 
    </queue> 

3) एक वर्ग है कि com.newatlanta.appengine.taskqueue.Deferred.Deferrable interface लागू करता बनाएं;
doTask इस वर्ग की विधि है जहां आप अपना कार्य तर्क लागू करते हैं।

DeferredTask task = new DeferredTask(); // implements Deferrable 
    Deferred.defer(task); 

कार्य आकार 10KB से अधिक है, काम के विकल्पों में एक डेटासंग्रह इकाई के भीतर जमा हो जाती है, जो नष्ट कर दिया जाता है:

4) अपने कार्य को क़तार में Deferred.defer विधि आह्वान जब कार्य निष्पादित किया जाता है।

आपकी doTask विधि रीट्री रोकने के लिए PermanentTaskFailure अपवाद फेंक सकती है; कोई अन्य अपवाद कार्य को पुनः प्रयास करने का कारण बनता है।

बोनस लिंक के युगल:

  • सुविधा का अनुरोध here
  • Google समूह धागा here
  • Github Fork
+0

स्थगित [है] (http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/taskqueue/DeferredTask.html) जावा SDK का एक भाग। –

+0

@ निक इसे इंगित करने के लिए धन्यवाद; मैंने सुविधा अनुरोध की पूरी स्थिति को पूरी तरह से याद किया है। ईमानदारी से मैंने जीएई आधिकारिक ब्लॉग से शुरू होने के बारे में कोई घोषणा नहीं पढ़ी है। – systempuntoout

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