如何浏览本地Java App Engine数据存储?

似乎Python App Engine的_ah / admin与Google App Engine的Java实现没有任何相同之处。

有没有我可以浏览数据存储的手动方式? 在我的机器上find哪些文件? (我在OS X上使用Eclipse的App Engine插件)。

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html :“最后,开发人员应用程序服务器有一个数据查看器。在本地启动您的应用程序并指向您的浏览器到http://localhost:8888/_ah/admin http://localhost:8000/datastore *进行检查。

*截至1.7.7

目前没有用于Java SDK的数据存储查看器 – 应该在下一个SDK版本中发布。 与此同时,最好的办法是用数据存储区查看代码编写自己的pipe理界面 – 或者等待下一个SDK版本。

Java App Engine现在有一个本地数据存储查看器,可以通过http://localhost:8080/_ah/admin

我在\ war \ WEB-INF \ appengine-generated \ local_db.bin上的Windows + Eclipse环境中拥有本地数据存储

据我了解,它使用名为“协议缓冲区”的内部格式。 我没有外部工具以可读的格式显示文件。

我正在使用这样简单的“查看器”代码:

 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); final Query query = new Query("Table/Entity Name"); //query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.DESCENDING); for (final Entity entity : datastore.prepare(query).asIterable()) { resp.getWriter().println(entity.getKey().toString()); final Map<String, Object> properties = entity.getProperties(); final String[] propertyNames = properties.keySet().toArray( new String[properties.size()]); for(final String propertyName : propertyNames) { resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName)); } } } 

在最新版本的SDK( 1.7.6+ )中,dev服务器的pipe理部分随之改变了它的位置

分析服务器输出日志,我们可以看到它可以在以下位置访问:

http://localhost:8000

数据存储区查看器:

http://localhost:8000/datastore

看起来相当整齐 – 根据谷歌的新devise指导。

由于Google App Engine数据存储区查看器不支持显示引用实体的集合,因此我修改了Paul的版本以显示所有后代实体:

 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { String entityParam = req.getParameter("e"); resp.setContentType("text/plain"); final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); // Original query final Query queryOrig = new Query(entityParam); queryOrig.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING); for (final Entity entityOrig : datastore.prepare(queryOrig).asIterable()) { // Query for this entity and all its descendant entities and collections final Query query = new Query(); query.setAncestor(entityOrig.getKey()); query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING); for (final Entity entity : datastore.prepare(query).asIterable()) { resp.getWriter().println(entity.getKey().toString()); // Print properties final Map<String, Object> properties = entity.getProperties(); final String[] propertyNames = properties.keySet().toArray(new String[properties.size()]); for(final String propertyName : propertyNames) { resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName)); } } } } 

应该指出的是,没有什么显示空集合/参考实体。

使用文本编辑器(如Notepad ++)打开\war\WEB-INF\appengine-generated\local_db.bin文件。

数据是混乱的,但至less你可以阅读它,你可以复制提取它。