Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java.sql.SQLexception重试/恢复:并发修改_Java_Google App Engine_Jdo_Google Cloud Datastore - Fatal编程技术网

如何从java.sql.SQLexception重试/恢复:并发修改

如何从java.sql.SQLexception重试/恢复:并发修改,java,google-app-engine,jdo,google-cloud-datastore,Java,Google App Engine,Jdo,Google Cloud Datastore,在GAE上使用JDO,我使用一个简单的数据库事务代码块,如下所示 从抛出的java.sql.SQLException中重试/恢复的好方法是什么:并发修改 私人最终提供商pmp; PersistenceManager pm=pmp.get(); 试一试{ pm.currentTransaction().begin() MyObject MyObject=pm.getObjectById(MyObject.class,id) pm.currentTransaction().commit() }最后

在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()){ 严重(this.getClass().getName()+“捕获数据库异常”); pm.currentTransaction().rollback(); }
}

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


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

感谢您建议更仔细地研究语义。更仔细地查看堆栈跟踪和javadocs。从commit()引发异常java.sql.exception嵌套在一个javax.jdo.JDODataStoreException中,它是JDOCanRetryException的子类。现在有没有办法捕获这个异常并重试操作,而不将所有变量导出到一个参数块中?我仍然觉得不应该抛出这个异常。您的序列化级别设置正确吗?在currentTransaction()之前无法尝试提交。isActive()?