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

Man*_*nie 5 spring transactions

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

然而;

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

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

  3. 移动应用程序超时(使用SocketException)并且请求将重新排队,直到它可以再次与应用程序通信.

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

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

所以问题;

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

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

服务器上的一些信息•Spring 3.1•基于Spring的控制器/服务/ DAO.•Hibernate(JPA)•MYSQL数据存储

谢谢,

伊恩.

jeh*_*eha 0

\n

当套接字关闭时(即当移动应用程序超时请求时),Spring 事务是否可以回滚?

\n
\n\n

目前我无法想象这会如何运作......

\n\n
\n

如果不是 \xe2\x80\x93 实现上述目标的最佳方法是什么?

\n
\n\n

我会这样处理这个问题:

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

希望有帮助。

\n