回滚不适用于在 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
从其他状态回滚无法反映到数据存储。
事务正在成功回滚,如 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 从其他状态回滚无法反映到数据存储。