【问题标题】:Non-database application transactions非数据库应用事务
【发布时间】:2011-10-05 21:39:29
【问题描述】:

如何将非数据库操作封装到事务中?

例如,假设我有一些按顺序调用的方法/函数,一些更新数据库,一些更新文件系统上的文件,一些更新 HttpSession 中的参数,一些更新缓存等。如果后者之一失败,比如更新会话,如何回滚文件系统、数据库等中的所有其他更改?

环境是一个 Java Servlet 容器,例如 Tomcat,其中包含 Struts2、任何 RDBMS、Hibernate 或 Ibatis 等持久层等。

【问题讨论】:

    标签: java database transactions filesystems atomic


    【解决方案1】:

    所有这些都必须是事务性资源,能够参与两阶段提交协议,以便执行您想要的操作。

    除非您的代码中有错误,否则会话更新永远不会失败。因此,您可以在其他更新成功后执行此操作。如果您需要事务性的东西,则应该避免使用文件系统。另一种方法是先保存到文件系统,然后进行数据库更新,如果数据库更新失败,则接受文件系统中有无用的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-11
      • 2023-03-15
      • 2014-08-20
      • 2012-01-29
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多