2011-10-05 57 views
7

如何将非数据库操作封装到事务中?例如,假设我有一些顺序调用的方法/函数,一些更新数据库,一些文件系统上的更新文件,HttpSession中的一些更新参数,一些更新缓存等等。如果其中之一后者会失败,如更新会话,我如何回滚文件系统,数据库等中的所有其他更改?非数据库应用程序事务

环境是一个Java Servlet容器(如Tomcat)的东西,如Struts2的,任何RDBMS,持久层像Hibernate或者ibatis的等

回答

2

所有这些必须是事务性的资源,能够参加2阶段提交协议,以便做你想做的事情。

除非在代码中有错误,否则对会话的更新不应该失败。在其他更新成功后,您可以这样做。如果你需要一些事务处理,那么应该避免使用文件系统。备选方法可以是先保存到文件系统,然后执行数据库更新,并在数据库更新失败时接受文件系统中无用的文件。