EJB-2.0 事务回滚 undo/revert 数据库更改了吗?
Is EJB-2.0 transaction rollback undo/revert database changes?
假设我在我的 ejb bean 方法中编写了一些与事务相关的代码,如下所示:
UserTransaction utx = sessionContext.getUserTransaction();
try {
int status = 0;
utx.begin();
status = 1;
//SEGMENT- 1: UPDATE DATABASE
//SEGMENT- 2: SOME OTHER CODE - which may throw Exception
utx.commit();
} catch (Exception e) {
utx.rollback();//SEGMENT- 3: My QUESTION at here, is it bollbak DATABASE changes also?
// OR only rollback value of variable 'status' to '0'
e.printStackTrace();
}
1.开始: 开始我的交易后 utx.begin();
更改了 java 变量 status = 1;
已更改数据库(SEGMENT- 1)。例如数据库中的一些 INSERT 和 UPDATE
然后执行一些其他计算(SEGMENT- 2)
2。提交: 现在在提交之前 utx.commit()
一些异常出现在 (SEGMENT- 2)
3。 ROLLBACK: 所以catch块捕获异常(SEGMENT- 3)并执行事务回滚utx.rollback()
.
我的问题:
是utx.rollback()
回滚
所有数据库变化和java变量变化?
或
仅数据库更改
OR 仅回滚 java 变量更改?
在 utx.begin()
之后所做的所有数据库更改都将回滚。
utx.rollback()
对您的 java 变量没有影响。
我想扩展 Steve C 的回答
另一个重要的一点是,如果我们进行任何数据库级别 COMMIT 那么这些更改永远不会被 EJB 回滚 utx.rollback()
.
例如,如果我们执行
stmt.executeUpdate("COMMIT");
或在调用的任何包或存储过程中显式执行COMMIT
然后发生数据库级提交。
假设我在我的 ejb bean 方法中编写了一些与事务相关的代码,如下所示:
UserTransaction utx = sessionContext.getUserTransaction();
try {
int status = 0;
utx.begin();
status = 1;
//SEGMENT- 1: UPDATE DATABASE
//SEGMENT- 2: SOME OTHER CODE - which may throw Exception
utx.commit();
} catch (Exception e) {
utx.rollback();//SEGMENT- 3: My QUESTION at here, is it bollbak DATABASE changes also?
// OR only rollback value of variable 'status' to '0'
e.printStackTrace();
}
1.开始: 开始我的交易后 utx.begin();
更改了 java 变量 status = 1;
已更改数据库(SEGMENT- 1)。例如数据库中的一些 INSERT 和 UPDATE
然后执行一些其他计算(SEGMENT- 2)
2。提交: 现在在提交之前 utx.commit()
一些异常出现在 (SEGMENT- 2)
3。 ROLLBACK: 所以catch块捕获异常(SEGMENT- 3)并执行事务回滚utx.rollback()
.
我的问题:
是utx.rollback()
回滚
所有数据库变化和java变量变化?
或
仅数据库更改
OR 仅回滚 java 变量更改?
在 utx.begin()
之后所做的所有数据库更改都将回滚。
utx.rollback()
对您的 java 变量没有影响。
我想扩展 Steve C 的回答
另一个重要的一点是,如果我们进行任何数据库级别 COMMIT 那么这些更改永远不会被 EJB 回滚 utx.rollback()
.
例如,如果我们执行
stmt.executeUpdate("COMMIT");
或在调用的任何包或存储过程中显式执行COMMIT
然后发生数据库级提交。