0

У меня есть задание cron, которое я хочу запустить, которое вычисляет рейтинг популярности, используя объекты в моем облачном хранилище данных.Google App Engine Cron Работа не обновляется Entity

Entity Выдержка:

 @Entity 
public class Theme { 

    @Id 
    private String themeID; 
    public int popularity; 

public void setPopularity(int popularity) { 
    this.popularity = popularity; 
} 

Внутри моей CronController:

@SuppressWarnings("serial") 
public class CronController extends HttpServlet { 
    private static final Logger _logger = Logger.getLogger(CronController.class.getName()); 
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 

     try { 
      _logger.info("Cron Job has been executed"); 

      EntityManager mgr = getEntityManager(); 
      Theme theme = null; 

       theme = mgr.find(Theme.class, "101"); 
       theme.setPopularity(3); 
     } 
     catch (Exception ex) { 
      //Log any exceptions in your Cron Job 
      _logger.info("error"); 
     } 
    } 

Я знаю работа хрон работает как требуется, потому что, если я изменю "101" до (длинного) 101 он терпит неудачу констатирует строки требуется, однако, в журнале, но, если указано выше, файл журнала содержит следующее:

0.1.0.1 - - [19/Feb/2014:17:38:37 -0800] "GET /cron/popularity HTTP/1.1" 200 0 - "AppEngine-Google; (+http://code.google.com/appengine)" "themeviewer.appspot.com" ms=14 cpu_ms=233 queue_name=__cron task_name=243a771773a2bbc80eed32256a5b5043 app_engine_release=1.9.0 instance=00c61b117cabbfbf9dcbf5dedbeb449cc73567 

I не могу понять, как заставить его регистрировать ошибку, чтобы сообщить мне, почему Entity «101» не имеет значения популярности 3 после выполнения этого задания cron. Как я могу отладить это?

На стороне записки, файлы журнала не показывают «Cron Работа была выполнена» либо ... Я использую следующий веб-сайт в качестве учебного пособия here

ответ

1

Там нет ничего плохого с исполнением Cron Job , Причина, по которой вы не видите данные получать упорствовал в том, что вы не сказали менеджеру Entity упорствовать его и т.д.

Я предлагаю попробовать следующее:

  • После вызова theme.setPopularity(3);, пожалуйста звоните mgr.persist(theme);
  • рекомендуется иметь пункт finally тоже, так что вы можете закрыть экземпляр EntityManager т.е. mgr.close();

См: https://developers.google.com/appengine/docs/java/datastore/jpa/overview

+0

Это сработало спасибо. Я думал, что сделал это раньше, не используя .perist. Кроме того, у меня есть mgr.close(), но не в приведенном выше коде ... спасибо! – easycheese

Смежные вопросы