【发布时间】:2013-04-23 20:15:39
【问题描述】:
我使用 servlet 并使用数据存储区和命名空间 api 编写了一个 Web 应用程序。
这在我的本地主机上效果很好,但从不在部署的副本上存储数据。
我遵循 java 文档的多租户以及另一个参考,以便我可以读取 xml 并将其存储在 BigTable 中。
使类持久化:
`@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Layout {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
private String id;'
存储数据:
`customerKey = KeyFactory.createKey(Layout.class.getSimpleName(), layout.getId());
layout.setKey(customerKey);`
现在让它持久化...
`pm = XMLImportPersistenceManagerFactory.get().getPersistenceManager();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse(new InputSource(_URL_STRINGS), this);`
然后关闭它...
pm.close()
代码在我的本地主机中运行良好。我可以在 appengine 上看到它不起作用。 servlet 运行,但从未存储任何数据。
如果你点击 url,它会说 Layouts Created,我会在日志中看到 200,但没有数据。这告诉我 servlet 正在运行。 这是我的应用程序:http://layoutimporter.appspot.com/CreateLayout?namespace=boston
一些结束细节。我写了一个命名空间过滤器来根据查询字符串中的参数设置命名空间。
我正在运行一个预热 servlet 来初始化 PersistenceManagerFactory 以避免加载请求 = 1。
关于这个的任何想法。我已经用尽了我的资源,并且正在与“哎呀,我找不到你的种类......”等相关的所有相同线程中进行假脱机。
我尝试删除已部署的副本并启动新的已部署副本。我尝试还原已部署的副本。没有喜悦。当我在本地副本上保存命名空间和数据后,我可以输出命名空间和数据,但永远不会在远程副本上打印。这是一个真正的笨蛋!
谢谢!
..\温迪
【问题讨论】:
-
这也是我执行 makePersistentAll 的方式(在 saxParser.parse 行之后 ... pm.makePersistentAll(layouts);
标签: java google-app-engine namespaces google-cloud-datastore multi-tenant