【发布时间】:2013-10-01 09:41:46
【问题描述】:
我正在使用 JDO(3.x,带有 datanucleus 2)在我的 google 应用引擎 (java) 中的一个应用中持久保存对象。我的调用顺序是这样的:
在 servlet 过滤器(servlet 1)中打开持久性管理器 - 使用 ThreadLocal
从 DAO 类调用 pm.findByObjectId(通过 servlet 1)
从 DAO 类调用 pm.deletePersistent(通过 servlet 1)
调用 pm.newQuery 以列出现在在 db 中的所有对象(通过 servlet 1) - 写入响应 (json)
在 servlet 过滤器中关闭持久性管理器 - 在 doFilter 方法的 finally 内
但是,直到我在步骤 5 中关闭 pm 之前,我的对象才会被删除。而且它也不是 consitent,有时它确实会被删除!(还没有弄清楚什么时候)。理想情况下,我希望在上面的第 3 步中删除对象,以便在第 4 步运行查询时,它会返回更新后的列表。
任何人都可以告诉我,如果我可以改进这个设计以更原子地进行插入/删除。还是仅仅是因为写入数据库太慢了?
这是我的 jdoconfig.xml
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
<property name="datanucleus.appengine.singletonPMFForName" value="true"/>
</persistence-manager-factory>
【问题讨论】:
标签: google-app-engine jdo