2012-03-02 6 views
1

モデルの変更を維持する複数のコントローラーアクション間で「トランザクション」を開始する方法はありますか?ただし、すべてのアクションが完了していない限り保存しないでください。Playのコントローラーアクション間のトランザクション

step1 - > step2 - > step3 - > step4 各ステップでユーザーがデータを入力し、各ステップにウィザードをキャンセルする必要がある[キャンセル]ボタンがあります前の手順から変更されます。

最後のステップでのみデータベースに保存するために、すべてのステップですべてのデータを次のステップに渡す必要はないため、各ステップで1つ以上のモデルインスタンスを作成または変更し、データベースに保存します。 「キャンセル」をクリックしたとき、以前のすべてのステップからの変更を元に戻すにはどうすればよいですか?

理想的には、step1で「TransactionSupport.startTransaction」を、ステップ4で「TransactionSupport.endTransaction」を呼び出すことをお勧めします。ただし、各ステップリクエストが異なるPlayサーバーに送信される可能性があることを考慮すると、サーバー間でこのトランザクションをどのように保存するのでしょうか?

答えて

1

ドキュメントによると、Playがステートレスであることを知ると、これは可能ではないようです。あなたと注釈を経由してプレイのデフォルトのトランザクションマネージャを無効にした場合、実際には:

@play.db.jpa.NoTransaction 

次に再生するその要求のためのDB接続を取得しません。

問題を解決するには、一時的な表に手順の情報を格納し、最後の「作業中の」表にのみデータをコミットすることが考えられます。

情報をユーザーID、ウィザードID、およびセッションIDにリンクすると、失効したデータを検出できます。

関連する問題