我正在使用javax.transaction.UserTransaction
来维护我的java代码中的事务。但是在我们的代码中发现了begin()
和commit()
的调用,并且没有调用rollback()
。
那么,使用这样的话有什么意义吗?
请指导我摆脱这种混乱?
答案 0 :(得分:1)
您可以看到有rollback()
UserTransaction userTransaction=new UserTransaction() {
@Override
public int getStatus() throws SystemException {
return 0;
}
@Override
public void begin() throws NotSupportedException, SystemException {
}
@Override
public void commit() throws RollbackException, HeuristicMixedException, HeuristicRollbackException, SecurityException, IllegalStateException, SystemException {
}
@Override
public void rollback() throws IllegalStateException, SecurityException, SystemException {
}
@Override
public void setRollbackOnly() throws IllegalStateException, SystemException {
}
@Override
public void setTransactionTimeout(int i) throws SystemException {
}
} ;
当RuntimeException
投掷时,您可以根据需要rollback()
投降。
答案 1 :(得分:1)
您的代码示例将会有很大帮助。
无论如何,一般来说,为了理解,您的代码无需包含对commit()
和rollback()
的调用。您可能根本不需要处理自己的回滚案例。
如果线程因调用begin()
和调用commit()
之间的任何原因而崩溃(即在事务中期),则事务将被回滚并执行操作远在事务内部不会应用于启用事务的模块。