シーンを撮影します。 私は、Spring管理対象サーバから20ドルを引き出し、確認を待ってからアプリケーションに完了をマークするモバイルアプリを持っています。コントローラの接続が終了した後のトランザクションのロールバック(クライアントがタイムアウトした)
ただし、
モバイルアプリは、コントローラが要求を受信し、サービス層がお金(理由は重要ではない)を撤回する非通常は長い時間がかかりますかサーバー層を呼び出し
サーバーへの撤退要求を送信します。
モバイルアプリケーションがタイムアウトし(SocketExceptionが発生した)、アプリケーションが再びアプリケーションと通信できるようになるまで、リクエストは再度キューに入れられます。
サーバーは1からの要求を完了しますが、クライアントがタイムアウトしたことはわかりません。
ここで、モバイルアプリケーションは20ドルが失敗したと考えているが、サーバーは要求を実行したというシナリオがあります。
質問があります。
•ソケットを閉じたとき(つまり、モバイルアプリケーションが要求をタイムアウトしたとき)にSpringトランザクションをロールバックできますか?
•そうでない場合、上記を達成するための最良の方法は何ですか?
サーバに関する情報 •Spring 3.1 •Springベースのコントローラ/サービス/ DAO。 •休止状態(JPA) MYSQLデータストア•
おかげで、
イアン。
私は春を知りません(これはコメントであり、答えではありません)。しかし、2点目については2PCを使用できます。 –
@ todda.speot.is - ありがとう。オプションははいですが、それに対応するためには大幅なアーキテクチャ変更が必要なため、私の好むアプローチはありません。 – Ian