假設我在EJB bean方法寫了一些交易相關的代碼如下:EJB-2.0事務回滾是撤銷還是恢復數據庫更改?
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在DB
然後執行一些其他的計算(SEGMENT- 2)
2. COMMIT:現在提交utx.commit()
之前有些異常發生在(SEGMENT- 2)
3 。ROLLBACK:所以catch塊捕獲異常(SEGMENT-3)並執行事務回滾utx.rollback()
。
我的問題:
是utx.rollback()
回滾
所有數據庫的更改和Java變量的變化?
OR 僅備份數據庫更改
OR只有回滾Java變量的變化?
內存不是事務性的,所以變量值不會被改變。您需要在'catch'塊中手動執行。 – slwk
@slwk - 是** utx.rollback()**撤消在事務期間進行的數據庫更改。 – mmuzahid