Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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 在GAE中使用Jdo的事务无法回滚,尽管代码正在成功执行_Java_Google App Engine_Jdo_Rollback_Datastore - Fatal编程技术网

Java 在GAE中使用Jdo的事务无法回滚,尽管代码正在成功执行

Java 在GAE中使用Jdo的事务无法回滚,尽管代码正在成功执行,java,google-app-engine,jdo,rollback,datastore,Java,Google App Engine,Jdo,Rollback,Datastore,正如代码所反映的,事务正在成功回滚。但是,在事务中执行的操作没有反映到数据库中,并且没有在tx的非提交活动状态下回滚,即当使用PMF的tx(事务)和DynaPMF rollback撤消删除记录时,操作不起作用 在这里,PMF、DynaPMF指的是两个不同数据库的两个不同PersistanceMangerFactory if (isTransactionLocal || (PMF.getTransactionCounter() > 0 || DynaPMF.getTransactio

正如代码所反映的,事务正在成功回滚。但是,在事务中执行的操作没有反映到数据库中,并且没有在tx的非提交活动状态下回滚,即当使用PMF的tx(事务)和DynaPMF rollback撤消删除记录时,操作不起作用

在这里,PMF、DynaPMF指的是两个不同数据库的两个不同PersistanceMangerFactory

    if (isTransactionLocal || (PMF.getTransactionCounter() > 0 || DynaPMF.getTransactionCounter() > 0)) {
                //tx.rollback();
                if(PMF.getPerThreadTransaction()!=null){
                    tx=PMF.getPerThreadTransaction();
                    System.err.println(tx.hashCode()+"transaction thread is Alive =>"+tx.isActive());
                    if(tx.isActive()){
                        tx.rollback();
                        System.err.println("rollback for tx = "+tx.hashCode()+" done .");
                    }
                }

                if(DynaPMF.getPerThreadTransaction()!=null){
                    tx=DynaPMF.getPerThreadTransaction();
                    System.err.println(tx.hashCode()+"transaction thread is Alive =>"+tx.isActive());
                    if(tx.isActive()){
                        tx.rollback();
                        System.err.println("rollback for tx = "+tx.hashCode()+" done .");
                    }

                }
PMF.setPerThreadTransaction(null);
DynaPMF.setPerThreadTransaction(null);
输出:

1861140113transaction thread is Alive =>true
rollback for tx = 1861140113 done .
336180090transaction thread is Alive =>true
rollback for tx = 336180090 done .

代码中显示回滚成功发生,但未反映在数据库中。

根据JDO,回滚只能在JDO生命周期中具有持久性清除状态的对象上执行,如图所示
并且从其他状态回滚不能反映到数据存储。

根据JDO,回滚只能在JDO生命周期中具有持久性干净状态的对象上执行,如图所示 从其他状态回滚无法反映到数据存储中。

请阅读-总结是,这不是解决志愿者问题的理想方法,可能会对获得答案产生反作用。请不要将此添加到您的问题中。请阅读-总结是,这不是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。