- 締切済み
トランザクションを張って対話型でのコミット・ロール
トランザクションを張って更新処理を行った後に、 ユーザの「はい」「いいえ」ボタンによって、 トランザクションのコミットとロールバックを切り替えることは可能でしょうか。 処理の流れは以下の様になります。 1.データ更新前の値を取得 2.トランザクションの開始 3.データ更新 4.データ更新前の値とデータ更新後の値を比較して、 差分がある場合は確認メッセージを表示する。 5.確認メッセージで「はい」がクリックされた場合はコミットする。 6.確認メッセージで「いいえ」がクリックされた場合はロールバックする。 実装方法はどのようでも構いません。 どなたかご教授ください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
web画面ですね。条件は明確にしましょう。 一般的に、サーバ側は、 (1)画面表示したとき、該当レコードの情報を持っておく(参照のみ) (2)更新モードで参照します(いわゆるfor update)。 (3)当該レコードが他人から更新されていないことを確認する。 (4)[他人に更新されていない場合]更新処理し、コミットする。 (5)[他人に更新されている場合]トランザクション終了。 (2)-(4)(5)が1つのプロセスで「はい」の部分です。 この間だけDBコネクションを張って、トランザクション化すれば良いと思います。 (1)と(2)のDBコネクションは別物ということになります。 このサーバー側の動きと、ブラウザ側との動きをシーケンス図にして流れを明確にしてどこで何をするかを明確にすれば、簡単には出来ないことがわかってきます。 これが分かれば後は何とか仕組みを考えて実装できるでしょう。
1.データ更新前の値を取得 2.トランザクションの開始 3.データ更新前の値とデータ更新後の値を比較 4.(差分○)確認画面へ 5.確認メッセージで「はい」がクリックされた場合は更新しコミットする。 6.確認メッセージで「いいえ」がクリックされた場合は処理をしない。 でいいだろ。
- satomi3951
- ベストアンサー率71% (98/137)
処理の流れの通り実装すれば良いだけだと思うのですが 強いて言えば、4の為には、更新前の値を2と3の間で取得しておく事が必要なくらいでしょうか? 何が分からないのか、もっと具体的にしてください。
補足
返答が遅くなり申し訳ありません。 トランザクションの開始とコミットの間に 確認メッセージを表示して処理を制御しようとして jspファイルの中に処理を記載すると、 正しく分岐することが出来ませんでした。 (jspは画面表示時点で既に処理を完了しているため???) そのためコミット・ロールバックは別のjspファイルとして作成しておいて、 その画面を呼び出すことでトランザクションを完了させようと考えているのですが、 DBコネクションの引継ぎが上手く行かずに困っているとことです。
補足
3~4・5へのDBコネクションのやり取りはどのようにやれば良いのでしょうか。 (DBコネクションを別画面でのやり取りする方法は?)