GAE应用程序在本地工作,而不是在appengine上工作(远程复制)

时间:2013-04-23 20:15:40

标签: java google-app-engine namespaces google-cloud-datastore multi-tenant

我使用servlet编写了一个Web应用程序,并使用数据存储区和命名空间apis。

这在我的localhost上运行良好,但从不在已部署的副本上存储数据。

我使用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()

代码在我的localhost中运行得很漂亮。它在appengine上看不到。 servlet运行,但是没有数据存储。

如果你点击了网址,它会说Layouts Created,我会在日志中看到200,但没有数据。这告诉我servlet正在运行。 这是我的应用:http://layoutimporter.appspot.com/CreateLayout?namespace=boston

一些结束细节。我编写了一个名称空间过滤器,根据查询字符串中的参数设置名称空间。

我正在运行一个预热servlet来初始化PersistenceManagerFactory以避免加载requests = 1。

关于这一点的任何想法。我已经耗尽了我的资源,并在所有与“oops,我找不到你的种类......”等相关的线程中假脱机。

我尝试删除已部署的副本并启动新部署的副本。我尝试恢复已部署的副本。没有快乐。当我在本地副本上执行此操作时,我可以将命名空间和数据打印出来,但永远不会出现在远程副本上。这是一个真正的难题!

谢谢!

.. \温迪

1 个答案:

答案 0 :(得分:0)

我通过

解决了这个问题

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

这揭示了一些本地问题,例如:现在我的localhost中抛出了一个异常,它指示我启用xg事务......

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

3)我正在使用交易。

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

现在,根据名称空间,数据将保留在生产(远程)副本以及我的localhost上。