Example #1
0
 /**
  * Executes a background task.
  *
  * <p>The task payload is either type Deferrable or Key; in the latter case, retrieve (then
  * delete) the Deferrable instance from the datastore.
  */
 @Override
 public void doPost(HttpServletRequest req, HttpServletResponse res)
     throws ServletException, IOException {
   try {
     Object payload = deserialize(req);
     if (payload instanceof Key) {
       // get Deferrable from datastore
       Blob taskBlob = (Blob) getDatastoreService().get((Key) payload).getProperty(TASK_PROPERTY);
       deleteEntity((Key) payload);
       if (taskBlob != null) {
         payload = deserialize(taskBlob.getBytes());
       }
     }
     if (payload instanceof Deferrable) {
       ((Deferrable) payload).doTask();
     } else if (payload != null) {
       log.severe("invalid payload type: " + payload.getClass().getName());
       // don't retry task
     }
   } catch (EntityNotFoundException e) {
     log.severe(e.toString()); // don't retry task
   } catch (PermanentTaskFailure e) {
     log.severe(e.toString()); // don't retry task
   }
 }