2011-10-05 60 views
7

如何將非數據庫操作封裝到事務中?例如,假設我有一些順序調用的方法/函數,一些更新數據庫,一些文件系統上的更新文件,HttpSession中的一些更新參數,一些更新緩存等等。如果其中之一後者會失敗,如更新會話,我如何回滾文件系統,數據庫等中的所有其他更改?非數據庫應用程序事務

環境是一個Java Servlet容器(如Tomcat)的東西,如Struts2的,任何RDBMS,持久層像Hibernate或者ibatis的等

回答

2

所有這些必須是事務性的資源,能夠參加2階段提交協議,以便做你想做的事情。

除非在代碼中有錯誤,否則對會話的更新不應該失敗。在其他更新成功後,您可以這樣做。如果你需要一些事務處理,那麼應該避免使用文件系統。備選方法可以是先保存到文件系統,然後執行數據庫更新,並在數據庫更新失敗時接受文件系統中無用的文件。