如何使一系列非数据库方法模仿事务。

Rob*_*t H 5 java transactions

我需要执行几个需要“事务处理”的方法调用,但是除了try / catch / finally外,我不确定如何实现此方法。

背景

  • 应用程序是基于控制台的。
  • 应用程序将有多个线程
  • 查询数据库以获取连接信息,建立与Web服务的连接以登录,生成会话ID并更新数据库。
  • 一个操作将调用注销,该注销需要清理数据库,清除会话ID并注销Web服务。

我想弄清楚的是

我想确保当请求注销时,我想确保整个过程要么全部成功,要么根本没有成功。例如,我不希望清理数据库,清理会话ID和注销操作失败(因此登录仍然有效)。

理想情况下,解决方案将在发生故障时“回滚”,从而确保维持先前的状态。

是否有一种巧妙的方法可以完成此操作,还是我受困于一系列嵌套的try / catch / finally块来执行此操作?

Era*_*ran 3

如果您想实现某种rollback方法,则必须存储发生故障时需要回滚的所有内容的撤消数据。

  • 对于数据库,您已经有了回滚方法。
  • 对于您在可能需要回滚的操作中修改/删除的每个文件,您必须保留备份副本,以允许您恢复到以前的状态。
  • 任何可能需要回滚的内存变量都应该有备份副本。

这将允许您在代码中的任何点发生错误时回滚到之前的状态。

  • 很好的答案,但我还要澄清考虑*深度*复制备份的需要。如果复制浅层、可变的引用,回滚功能将陷入可怕的混乱。我还要补充一点(进一步补充上面的评论),try/catch/finally 不是*固有的*原子性。我在答案中添加了一个例子。 (2认同)