【发布时间】:2010-11-09 07:14:58
【问题描述】:
对于 Google App Engine 的 Java 实现,似乎没有 Python App Engine 的 _ah/admin 等效项。
是否可以通过手动方式浏览数据存储?我的机器上的文件在哪里? (我在 OS X 上使用带有 Eclipse 的 App Engine 插件)。
【问题讨论】:
标签: java google-app-engine google-cloud-datastore
对于 Google App Engine 的 Java 实现,似乎没有 Python App Engine 的 _ah/admin 等效项。
是否可以通过手动方式浏览数据存储?我的机器上的文件在哪里? (我在 OS X 上使用带有 Eclipse 的 App Engine 插件)。
【问题讨论】:
标签: java google-app-engine google-cloud-datastore
对我来说,解决方法是使用下面的gcloud 命令登录
gcloud auth application-default login
【讨论】:
使用文本编辑器(如 Notepad++)打开 \war\WEB-INF\appengine-generated\local_db.bin 文件。
数据被打乱了,但至少你可以阅读它,你可以复制它来提取它。
【讨论】:
http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html: "终于,开发应用服务器有一个数据查看器。在本地启动您的应用,然后将您的浏览器指向 http://localhost:8888/_ah/adminhttp://localhost:8000/datastore* 以查看它。"
* 截至 1.7.7
【讨论】:
在最新版本的 SDK (1.7.6+) 中,开发服务器的管理部分随之更改了位置
分析服务器输出日志,我们可以看到它可以在以下位置访问:
http://localhost:8000
还有 Datastore 查看器:
http://localhost:8000/datastore
看起来很整洁 - 根据 google 的新设计指南。
【讨论】:
目前没有适用于 Java SDK 的数据存储查看器 - 下一个 SDK 版本中应该会提供。与此同时,您最好的选择是编写您自己的管理界面和数据存储查看代码 - 或者等待下一个 SDK 版本。
Java App Engine 现在有一个本地数据存储查看器,可通过http://localhost:8080/_ah/admin 访问。
【讨论】:
因为 Google App Engines Datastore 查看器不支持显示引用实体的集合,所以我修改了 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));
}
}
}
}
需要注意的是,空集合/引用的实体不会显示任何内容。
【讨论】:
我的 Windows+Eclipse 环境在 \war\WEB-INF\appengine-generated\local_db.bin 上有本地数据存储
据我了解,它使用名为“协议缓冲区”的内部格式。我没有外部工具来以人类可读的格式呈现文件。
我正在使用这样的简单“查看器”代码:
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));
}
}
}
【讨论】: