关于UserTransaction(有些迷惑)
假如我在session bean(<transaction-type>为“Bean”)中写了类似下面的代码:
try {
usrTran.begin();
dbConnection.setAutoCommit(true); //JDBC被设置为自动提交更改
dbConnection.insertIntoTableA(); //往A表里插入几条数据
dbConnection.updateTableA(); //修改前一步插入A表的那几条数据
//进行一些别的操作
...
...
dbConnection.deleteFromTableA(); //将刚才插入A表的几条数据删除
usrTran.end();
} catch (SQLException ex) {
usrTran.rollback();
}
如果最后进行删除时失败并抛出SQLException,那么执行完usrTran.rollback();语句后,A表还能不能恢复到插入数据前的状态呢?
如果A表能够恢复到插入数据前的状态的话,难道是JTA/JTS自己另外保存了被操作资源(A表)的副本(而不是直接利用JDBC提供的事务机制),然后在JDBC已经完成了commit的情况下,仍然可以将原先的数据从保存的副本中回写到A表?