我使用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,我找不到你的种类......”等相关的线程中假脱机。
我尝试删除已部署的副本并启动新部署的副本。我尝试恢复已部署的副本。没有快乐。当我在本地副本上执行此操作时,我可以将命名空间和数据打印出来,但永远不会出现在远程副本上。这是一个真正的难题!
谢谢!
.. \温迪
答案 0 :(得分:0)
我通过
解决了这个问题1)删除我的应用程序库中缓存的jdo 1.5库(我已经切换到v2,但它们仍然存在。 我删除它们的方法是启动一个新项目并复制我的代码。
这揭示了一些本地问题,例如:现在我的localhost中抛出了一个异常,它指示我启用xg事务......
2)将以下内容添加到jdoconfig.xml ...
3)我正在使用交易。
我并不完全理解该解决方案,因为事务只是持久化了Layout类型的对象集合。我很高兴它有效。
现在,根据名称空间,数据将保留在生产(远程)副本以及我的localhost上。