【问题标题】:How to rollback DB transaction after http connection is losthttp连接丢失后如何回滚数据库事务
【发布时间】:2013-10-07 16:53:20
【问题描述】:

最近面试面试官问了我一个问题,下面是问题-

假设一个请求被发送到一个 servlet 并且 servlet 执行了几个数据库事务(首先更新和提交,然后读取和更新并再次提交),这大约需要 3-4 分钟,在此期间用户按下取消按钮并连接丢失。你将如何回滚整个事务。

我的回答是——由于 Servlet 抛出 IOException,我们可以处理异常并回滚事务。

但他又一次问我那些已经完成的数据库提交怎么办,你将如何回滚。

我一头雾水,回答说我从来没有遇到过这种情况。但我真的很想知道在这种情况下可以做些什么。

谢谢。

【问题讨论】:

  • 为什么在 servlet 工作时提交事务。是否有可能在一个事务中完成所有工作?大多数数据库引擎都支持嵌套事务。尝试在您的 servlet 开始工作之前打开外部主事务。如果你捕捉到一个异常,你可以回滚这个事务。
  • @Nicolai :我告诉面试官这个解决方案,但他仍然不同意

标签: servlets transactions httpwebrequest commit rollback


【解决方案1】:

但他又一次问我那些已经提交的数据库提交怎么办? 完成了,你将如何回滚。

我认为这不是 servlet 相关的问题。如果事务在数据库中提交,则无法回滚。数据库事务有几个属性,称为ACID(原子性、一致性、隔离性、持久性)。在这种情况下适用的是Durability

“持久性是保证交易的 ACID 属性 已承诺的将永久存在”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2019-11-21
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    相关资源
    最近更新 更多