【问题标题】:GAE application works locally, not on appengine (remote copy)GAE 应用程序在本地工作,而不是在 appengine(远程复制)
【发布时间】: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


【解决方案1】:

我解决了这个问题

1) 删除缓存在我的应用程序库中的 jdo 1.5 库(我已切换到 v2,但它们仍然存在。 我删除它们的方法是开始一个新项目并复制我的代码。

这揭示了本地的一些问题,例如现在在我的本地主机中引发了一个异常,指示我启用 xg 事务...

2) 将以下内容添加到 jdoconfig.xml ...

3) 我正在使用事务。

我不完全理解解决方案,因为事务只是持久化 Layout 类型的对象的集合。我很高兴它有效。

现在,根据命名空间,数据将保存在生产(远程)副本以及我的本地主机上。

【讨论】:

  • 这就是 jdoconfig.xml 中的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 2013-10-28
  • 1970-01-01
相关资源
最近更新 更多