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>
填充它后得到的数据存储统计信息对象还表示要在调试工具空:
怎么来的new Query("__Stat_Total__")).asSingleEntity();
不会产生任何结果时,我只是充满了一些实体的数据存储?
答
答案: 报告如下:Using App Engine Datastore Low Level API with Java, “Stat_Total”和“Stat_Kind”没有在本地开发服务器工作。他们只在部署在
App Engine Server
时才能工作。
最终一致性。你把它放在后面然后查询RIGHT。它是预期的。您的数据没有完全传播到数据存储 – Patrice 2015-04-02 17:46:53
好吧,但仅当我第一次填充数据存储时,这不正确吗?因为我现在确信Datastore里面有几个实体(因为我可以查询它)。然后,即使数据存储区实际上是空的,数据存储区统计数据是否应该可用? – 2015-04-02 18:19:09
你是对的,如果数据存储已经有实体,最终的一致性不应该成为问题。我认为这是一个“推然后查询”的测试。我不知道统计数据是否可以直接提供。 – Patrice 2015-04-02 18:25:38