【发布时间】:2013-10-07 16:53:20
【问题描述】:
最近面试面试官问了我一个问题,下面是问题-
假设一个请求被发送到一个 servlet 并且 servlet 执行了几个数据库事务(首先更新和提交,然后读取和更新并再次提交),这大约需要 3-4 分钟,在此期间用户按下取消按钮并连接丢失。你将如何回滚整个事务。
我的回答是——由于 Servlet 抛出 IOException,我们可以处理异常并回滚事务。
但他又一次问我那些已经完成的数据库提交怎么办,你将如何回滚。
我一头雾水,回答说我从来没有遇到过这种情况。但我真的很想知道在这种情况下可以做些什么。
谢谢。
【问题讨论】:
-
为什么在 servlet 工作时提交事务。是否有可能在一个事务中完成所有工作?大多数数据库引擎都支持嵌套事务。尝试在您的 servlet 开始工作之前打开外部主事务。如果你捕捉到一个异常,你可以回滚这个事务。
-
@Nicolai :我告诉面试官这个解决方案,但他仍然不同意
标签: servlets transactions httpwebrequest commit rollback