- PR -

トランザクションについて

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2004/01/26
投稿数: 27
投稿日時: 2005-08-17 17:01
現在、JSF+HIBERNATE+Springを使ってWebアプリを作っています。
その中でトランザクションについて質問があります。

その作っているWebアプリは、マスタDBのデータを編集して
更新するというもので、画面構成は

検索画面

編集画面

編集内容確認画面

登録完了画面

となっており、このWebアプリを使用するのは一人だけで、検索画面の検索ボタンを押した段階で
もし他の人が使用中ならば、エラー画面に飛び。そして現在の使用者が確認画面まで
行くと他の人が使えるようになるというものにしたいんです。

Springの機能で探しているんですがメソッドレベル?でしか設定できないようなことが
書いてあってのでどういう風に実現しようか迷っています。

なにか良い方法はないでしょうか?

すみませんがよろしくお願いいたします。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-08-17 17:18
悲観的ロック、楽観的ロックで検索すればいろいろ出てくると思います。
Hibernateを使っているのであれば、行バージョンや更新日時を利用した
楽観的ロック戦略を実現しやすいので、そちらの方がオススメです。

引用:
もし他の人が使用中ならば、エラー画面に飛び。そして現在の使用者が確認画面まで
行くと他の人が使えるようになるというものにしたいんです。



確認画面でいいんですか?登録完了ではないのですか?
未記入
常連さん
会議室デビュー日: 2004/01/26
投稿数: 27
投稿日時: 2005-08-17 17:26
ご返信ありがとうございます!

>悲観的ロック、楽観的ロックで検索すればいろいろ出てくると思います。
>Hibernateを使っているのであれば、行バージョンや更新日時を利用した
>楽観的ロック戦略を実現しやすいので、そちらの方がオススメです。
早速、ネットで調べてみます!

>確認画面でいいんですか?登録完了ではないのですか?
すみません・・・おっしゃるとおりです。
登録完了でロック解除という感じですね
未記入
常連さん
会議室デビュー日: 2004/01/26
投稿数: 27
投稿日時: 2005-08-18 23:16
教えていただいた、楽観的ロックと悲観的ロックについて調べてみました。
いまのアプリのイメージとしては

検索画面

編集画面

編集内容確認画面

登録完了画面

編集画面から登録完了画面までロックをかけたいので悲観的ロックを実現したいということがわかりました。
しかし行バージョンや更新日時を使ったロックだとDBにカラムを追加することになると思うのですが、DBの構成はシステム上(業務上)変えられない状態なんです。
DBの構成を変えずに悲観的ロックを実現することは可能なんでしょうか?

そしてこれは思いつきなのですが、使用中フラグをApplicationビーンに保持して
使用中かどうか各画面で判定してやるというのはおかしいでしょうか?

いろいろすみませんがよろしくお願いいたします
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-08-19 00:01
この場合の悲観的ロックの実装にはレコードロックの状態を示すフラグや、
ロック対象レコードの主キーを持たせるためのテーブルが必要になります。

Applicationスコープにロック状態を持たせても可能なように見えますが、
APサーバーが複数(クラスタ、HA構成共に)ある構成では使えません。
これには将来的にクラスタ構成に移行する可能性がある場合も同様です。

それより、データベースの利用方法を変更するのに、データベースに変更を
一切加えないことを前提に話を進めるのはおかしいとは思いませんか?

あと、行バージョニングは楽観的ロックを実装するための機構なので、
悲観的ロック戦略を選択するのであればこの手法は関係ありません。

#そもそも、いつでもブラウザを閉じることができるWebシステムで
#悲観的ロック戦略を採用すること自体が危険なのですが・・・。
1

スキルアップ/キャリアアップ(JOB@IT)