2011-09-11 18 views
4

シーンを撮影します。 私は、Spring管理対象サーバから20ドルを引き出し、確認を待ってからアプリケーションに完了をマークするモバイルアプリを持っています。コントローラの接続が終了した後のトランザクションのロールバック(クライアントがタイムアウトした)

ただし、

  1. モバイルアプリは、コントローラが要求を受信し、サービス層がお金(理由は重要ではない)を撤回する非通常は長い時間がかかりますかサーバー層を呼び出し

  2. サーバーへの撤退要求を送信します。

  3. モバイルアプリケーションがタイムアウトし(SocketExceptionが発生した)、アプリケーションが再びアプリケーションと通信できるようになるまで、リクエストは再度キューに入れられます。

  4. サーバーは1からの要求を完了しますが、クライアントがタイムアウトしたことはわかりません。

ここで、モバイルアプリケーションは20ドルが失敗したと考えているが、サーバーは要求を実行したというシナリオがあります。

質問があります。

•ソケットを閉じたとき(つまり、モバイルアプリケーションが要求をタイムアウトしたとき)にSpringトランザクションをロールバックできますか?

•そうでない場合、上記を達成するための最良の方法は何ですか?

サーバに関する情報 •Spring 3.1 •Springベースのコントローラ/サービス/ DAO。 •休止状態(JPA) MYSQLデータストア•

おかげで、

イアン。

+0

私は春を知りません(これはコメントであり、答えではありません)。しかし、2点目については2PCを使用できます。 –

+0

@ todda.speot.is - ありがとう。オプションははいですが、それに対応するためには大幅なアーキテクチャ変更が必要なため、私の好むアプローチはありません。 – Ian

答えて

0

春のトランザクションソケットが閉じているとき(つまり、モバイルアプリケーションがリクエストをタイムアウトしたとき)にロールバックできますか?私はそれがうまくいくかもしれないか想像することはできません現時点では

...

ない場合 - 上記を達成するための最良の方法は何ですか?私はこのような問題に対処するだろう

  • モバイルアプリは、リクエスト回数場合撤退
  • を特定するトークン/ UUIDのいくつかの種類を送信し、モバイルアプリは撤退をマークモバイルアプリは、トークンを使用して状態についてサーバーに問い合わせることができます。
  • 「未知の結果」は、しばらくの間有効である必要があります。助け5分)それ以外の場合は仕事とあまりにもタイムアウトを持っている必要があり、サーバー上の
  • トランザクションを再スケジュール(および「未知の成果」の時間を満たしていませんでした撤退を想定)

希望。

関連する問題