控制器连接终止后的事务回滚(即客户端已超时)

时间:2011-09-11 09:32:13

标签: spring transactions

想象一下场景; 我有一个移动应用程序从Spring托管服务器中提取20美元,并在应用程序上标记完成之前等待确认。

然而;

  1. 移动应用程序将撤消请求发送到服务器

  2. 控制器接收请求并调用服务器层,服务层通常需要花费很长时间才能提取资金(理由并不重要)。

  3. 移动应用程序超时(带有SocketException),请求重新排队,直到它可以再次与应用程序对话。

  4. 服务器从1完成请求,但不知道客户端已超时。

  5. 我们现在的情况是移动应用程序认为20美元失败但服务器执行了请求。

    所以问题;

    •Spring套接字关闭时(即移动应用程序超时请求时)可以回滚吗?

    •如果不是 - 实现上述目标的最佳方法是什么?

    服务器上的一些信息 •春季3.1 •基于Spring的控制器/服务/ DAO。 •休眠(JPA) •MYSQL数据存储

    谢谢,

    伊恩。

1 个答案:

答案 0 :(得分:0)

  

Spring套接字可以在套接字关闭时回退(即当移动应用程序超时请求时)吗?

目前我无法想象这可能会如何起作用......

  

如果不是 - 实现上述目标的最佳方法是什么?

我会像这样处理这个问题:

  • 移动应用程序会发送某种标识提款的令牌/ uuid
  • 如果请求超时,移动应用程序在内部将撤销标记为某种“未知结果”状态,而不是重新安排,移动应用程序可以使用令牌向服务器询问状态
  • “未知结果”应该只在一段时间内有效(例如5分钟),否则假设退出不起作用并重新安排
  • 服务器上的事务也应该超时(并且满足“未知结果”的时间)

希望有所帮助。