0

我使用 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。

关于这个的任何想法。我已经用尽了我的资源,并且正在与“哎呀,我找不到你的种类......”等相关的所有相同线程中进行假脱机。

我尝试删除已部署的副本并启动新的已部署副本。我尝试还原已部署的副本。没有喜悦。当我在本地副本上保存命名空间和数据后,我可以输出命名空间和数据,但永远不会在远程副本上打印。这是一个真正的笨蛋!

谢谢!

..\温迪

4

1 回答 1

0

我解决了这个问题

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

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

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

3)我正在使用交易。

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

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

于 2013-04-24T19:55:05.533 回答