回滚不适用于在 GAE 中使用 Jdo 的事务,尽管代码已成功执行

Rollback is not working for transaction using Jdo in GAE, though code is executing successfully

事务正在成功回滚,如 code.However 所示,在事务中执行的操作未反映到数据库中,并且未在 tx 的未提交活动状态下回滚,即当使用删除记录时PMF 的 tx(Transaction) 和 DynaPMF 回滚撤消操作不起作用。

这里的 PMF、DynaPMF 指的是两个不同数据库的 2 个不同的 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 生命周期期间具有持久性清理状态的对象上执行,如从 https://db.apache.org/jdo/state_transition.html 从其他状态回滚无法反映到数据存储。