2011-09-11 51 views
4

圖片場景; 我有一個移動應用程序從Spring託管服務器上取消20美元,並在應用程序上標記完成之前等待確認。控制器連接終止後的事務回滾(即客戶端超時)

但是;

  1. 手機應用程序發送的撤銷請求到服務器

  2. 控制器接收請求並調用服務器層服務層是如何發生的未通常很長一段時間取款(原因並不重要)。

  3. 移動應用程序超時(帶有一個SocketException)並且請求被重新排隊,直到它再次與應用程序對話。

  4. 服務器從1完成請求,但不知道客戶端已超時。

我們現在的情況是移動應用程序認爲20美元失敗,但服務器執行了請求。

所以問題;

•當套接字關閉時(即當移動應用程序超時請求時)Spring Spring事務可以回滾嗎?

•如果不是 - 實現上述目標的最佳方法是什麼?

服務器上的一些信息 •彈簧3.1 •基於Spring的控制器/服務/ DAO's。 •休眠(JPA) •MYSQL數據存儲

感謝,

伊恩。

+0

我不知道春天(所以這是一個評論,而不是答案) - 但關於你的第二點,你可以使用2PC。 –

+0

@ todda.speot.is - 謝謝;選擇是,但不是我喜歡的方法,因爲它需要大量的體系結構更改才能適應。 – Ian

回答

0

可以Spring事務當套接字關閉時(即當移動應用程序超時請求時)回滾?

目前,我無法想象如何可能的工作...

如果沒有 - 什麼是實現上述的最佳方法?

我會處理這樣的問題:

  • 移動應用發送某種令牌/ UUID的標識撤出
  • 如果請求超時,移動應用,標誌着退出在內部作爲某種「未知結果」狀態而不是重新計劃,移動應用程序可以使用令牌向服務器詢問狀態,「未知結果」應該僅在一段時間內有效(例如,5分鐘),否則假定撤離沒有工作,重新安排
  • 在服務器上的事務應該有一個超時太(和符合「未知結果」的時間)

希望有所幫助。