【问题标题】:NullpointerException while querying for the Datastore statistics in App Engine Java Servlet在 App Engine Java Servlet 中查询数据存储区统计信息时出现 NullpointerException
【发布时间】:2015-06-07 15:20:19
【问题描述】:

在我的应用程序的 Servlet 中,我想控制它的 Datastore 是否为空(我第一次运行 servlet 时它将为空,但现在不是这种情况,因为我已经填充了它并使其持久化)在继续其余代码之前。在这个Datastore Docs 中,我发现了一种查询数据存储并获取不同类型统计信息的方法。 但是在执行时:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity globalStat = datastore.prepare(new Query("__Stat_Total__")).asSingleEntity();
Long totalBytes = (Long) globalStat.getProperty("bytes");
Long totalEntities = (Long) globalStat.getProperty("count");

当我尝试存储两个 Long 变量时,我得到一个 NullPointerException。 为什么查询后Entity globalStat对象为空?

编辑 1:附加信息

我正在尝试在使用List<Entity> of Entities 填充数据存储区后获取统计信息:

public class MyServlet extends HttpServlet {
    ArrayList<Tour> m_tours = new ArrayList<Tour>();
    Key tourKey;
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    //.... some code
    private DatastoreService populateDatastore(){
        //... some other code ...
        List<Entity> List = Arrays.asList(tour,tour1,tour2,tour3,
                                     tour4,tour5,tour6,tour7,tour8);
        datastore.put(List);
        Entity globalStat = datastore.prepare(
                             new Query("__Stat_Total__")).asSingleEntity();

        try{
            Long totalEntities = (Long) globalStat.getProperty("count");
            Long totalBytes = (Long) globalStat.getProperty("bytes");
        }catch (NullPointerException e){
            e.printStackTrace();
        }` 
    }
}

仅此说明 Entity globalstat 对象在调试工具中仍显示为 null:

当我刚刚用几个实体填充数据存储时,new Query("__Stat_Total__")).asSingleEntity(); 怎么没有产生任何结果?

【问题讨论】:

  • 最终一致性。你放然后在它后面查询。这是预期的。您的数据尚未完全传播到数据存储区
  • 好的,但这不是只有在我第一次填充数据存储时才如此吗?因为我确信现在 Datastore 里面有几个实体(因为我可以查询它)。然后,即使数据存储区实际上是空的,数据存储区统计信息是否也应该可用?
  • 你是对的,如果数据存储区已经有实体,最终的一致性应该不是问题。我认为这是一个带有“推送然后查询”的测试。老实说,我不知道是否可以直接获得统计数据。
  • 难道没有第二种方法可以检查数据存储区之前是否已被填满?
  • 数据存储管理查看器本身。如果您访问 console.developers.google.com 并导航到它。

标签: java android google-app-engine servlets google-cloud-datastore


【解决方案1】:

回答: 如此处报道:Using App Engine Datastore Low Level API with Java, "Stat_Total""Stat_Kind" 在本地开发服务器中不起作用。它们仅在部署在 App Engine Server 时才有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多