Google App Engine Cron作业未更新实体

问题描述 投票:0回答:1

我有一个要运行的Cron作业,它使用Cloud Datastore中的Entries计算受欢迎程度。

实体摘录:

     @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");
        }
    }

我知道cron作业会按要求运行,因为如果我将“ 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

我无法弄清楚如何使它记录错误以告诉我为什么在此cron作业运行后,实体“ 101”的流行度值不为3。 我该如何调试?

附带说明一下,日志文件也不会显示“ Cron Job已执行” ...我正在使用以下网站作为此处的教程

android entity-framework google-app-engine cron cron-task
1个回答
1
投票

Cron Job执行没有任何问题。 您没有看到数据持久化的原因是,您没有告诉实体管理器持久化数据,等等。

我建议尝试以下方法:

  • 调用theme.setPopularity(3); ,请致电mgr.persist(theme);
  • 建议也有一个finally子句,以便您可以关闭EntityManager实例,即mgr.close();

请参阅: https : //developers.google.com/appengine/docs/java/datastore/jpa/overview

© www.soinside.com 2019 - 2024. All rights reserved.