3

在 GAE 上使用 JDO,我正在使用一个简单的数据库事务代码块,如下所示。

什么是从抛出的 java.sql.SQLException 重试/恢复的好方法:并发修改?

私人最终提供商 pmp;...

PersistenceManager pm = pmp.get(); 尝试 { pm.currentTransaction().begin();

MyObject myObject= pm.getObjectById(MyObject.class, id);

pm.currentTransaction().commit();

} 最后 {

if (pm.currentTransaction().isActive()) { log.severe( this.getClass().getName() + " 捕获 DATABASE 异常。"); pm.currentTransaction().rollback(); } }

4

1 回答 1

0

该异常实际上是在哪里抛出的?你确定 commit() 和 isActive() 的语义吗?commit() 可以自动创建一个新事务,使该事务始终处于活动状态。

我的另一个猜测是,这是一个同时访问的单例 bean,它们最终都在同一个事务中,其他查询同时修改您请求的对象。

于 2010-02-02T22:53:47.747 回答