NullPointerException异常而查询App Engine中的Java数据存储区统计的Servlet

问题描述:

在我的应用程序的servlet,我想控制羯羊它的数据存储为空(我第一次运行该servlet它将是空的,但是这不是这种情况的权利现在,因为我已经填充它并使其持续),然后继续执行其余的代码。在这个Datastore Docs中,我发现了一种查询数据存储并获取不同类型统计数据的方法。 但在执行:NullPointerException异常而查询App Engine中的Java数据存储区统计的Servlet

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

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

编辑1

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(); 
     }` 
    } 
} 

,只是这说明实体globalstat:

我想只是实体的List<Entity>填充它后得到的数据存储统计信息对象还表示要在调试工具空:

Entity globalstat

怎么来的new Query("__Stat_Total__")).asSingleEntity();不会产生任何结果时,我只是充满了一些实体的数据存储?

+0

最终一致性。你把它放在后面然后查询RIGHT。它是预期的。您的数据没有完全传播到数据存储 – Patrice 2015-04-02 17:46:53

+0

好吧,但仅当我第一次填充数据存储时,这不正确吗?因为我现在确信Datastore里面有几个实体(因为我可以查询它)。然后,即使数据存储区实际上是空的,数据存储区统计数据是否应该可用? – 2015-04-02 18:19:09

+0

你是对的,如果数据存储已经有实体,最终的一致性不应该成为问题。我认为这是一个“推然后查询”的测试。我不知道统计数据是否可以直接提供。 – Patrice 2015-04-02 18:25:38

答案: 报告如下:Using App Engine Datastore Low Level API with Java“Stat_Total”“Stat_Kind”没有在本地开发服务器工作。他们只在部署在App Engine Server时才能工作。