2010-11-24 40 views
3

我有JTA transcations代碼如下:JTA transcations

try{ 
    //start jta user transcation utx 


//commit utx 

}catch(Exception ex){ 
    try{ 
    //rollback utx 
    }catch(Exception){ 
    //print error "cannot rollback 
    } 
} 
finally{ 
    if(null != utx && utx.getStatus() == Status.STATUS_ACTIVE){ 
        utx.commit(); 
    } 
} 

我不理解爲什麼在UTX最終將提交?

回答

4

只有在事務狀態爲STATUS_ACTIVE時才調用finally塊中的提交,這意味着它既沒有被提交也沒有回滾。在方法try塊中遺忘utx.commit()的情況下,它看起來像確保事務在方法結束時被回滾或提交的安全性。

+0

感謝:u能告訴我什麼將是transcation的狀態回滾後和提交我可以跳過代碼finally塊,因爲我有utx.commit在嘗試,UTX嗎?抓住? – Sanket 2010-11-24 12:30:29

1

我會說在finally塊中做這樣的提交併不是一個好習慣。對於大多數目的而言,進行中途工作是有危險的。在檢查事務狀態爲ACTIVE之後,回滾會是更好的選擇。

HTH。

感謝, 尼廷