- - PR -
スマートクライアントと排他制御
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-07 20:20
舌足らずでした。 セッションに持つことは、上でも書きましたがやろうと思えば可能です。 ※とてもお勧めはできないですっていうかやめたほうが無難です。 戻り値などで、クライアント側に返してやるのは無理です。 とにかく、何らかの形で「サーバ側で」リソースを維持する必要があるからです。 | ||||||||
|
投稿日時: 2005-12-07 20:39
返信ありがとうございます。 >OracleTransaction のインスタンスがあるのでしょう。 これは、どういう意味でしょうか? 現状、マニュアルにあるものでは、インスタンスらしきものが 見当たりません・・・。 >戻り値などで、クライアント側に返してやるのは無理です。 >とにかく、何らかの形で「サーバ側で」リソースを維持する必要があるからです。 Webサーバのクラス内の、一つのメゾット内で 接続、トランザクション開始、登録SQL発行、コミットっと 一連の流れしかできないって事でしょうか? 私がやりたい事は、最初に書いたとおり >あるテーブルAをユーザの一人がアクセスした時点で >他のユーザはアクセスできない(見れない) ↑(訂正:見れない×→見れるが編集ができない○。 この時は、編集できないよという事をユーザに知らせる機能も付加したいです。) を実現したいと考えています。 (1)検索ボタンのイベントメゾット内でデータを取得。 (2)更新ボタンのイベントメゾット内で編集したデータを更新。 (1)と(2)は、Webサービス上では別々のトランザクション となるから、何をすればいいのか、思案に暮れています・・・。 何か、ヒントまたはアイデアがあればご教示下さい。 宜しくお願いします。 | ||||||||
|
投稿日時: 2005-12-07 20:49
あーそうだ。Web サービスの戻りでそんなオブジェクトは返せないですね。バグってました。度々すみません。
それよりも Web サービスとか関係ないという事ですね。
思いつきで書きます。 static 変数でフラグでも持たせるとか。DB でもいいですが。 その変数自体へのアクセスは、普通に排他制御したらよいでしょう。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2005-12-12 22:38
遅くなってしまいましたが、返信ありがとうございます。
static でロックかけてみましたが、ロックがかかりませんでした。 スマートクライアントだと、サーバ(DBアクセス)とクライアントが 1対1になっているようで、Webシステムでいうロックが できませんでした。ロックかけている箇所がDLしたクライアントの クラス内なので、それがまずいのかなと・・・!? Webサービスはstaticで持たせても、requestならあまり意味ないかなって 思ってます。 (→セッションで管理する方法は別に検討中です。。。) 一つ質問なのですが、楽観的排他制御は、主流になっているのでしょうか? 一つ行に複数の人がアクセスする事がないなど、確率的な話になっている気がして、 気持ち的に乗り気ではないのですが・・・。 | ||||||||
|
投稿日時: 2005-12-13 09:05
こちらを読まれたことはございますか? 楽観的ロックでいいじゃん! _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-12-14 23:56
返信&助言ありがとうございます。
楽観的排他制御の件ですが、教えてもらったサイトを一読しました。 (一応、知っていたのですが・・・・) スマートクライアントでは、ちょっと面倒臭い処理になるなっていう 印象です。 例えば、 1)更新をかける時に検索した時に取得したデータと更新をかける (トランザクション開始)時のデータをチェックして、 他ユーザによって変更されていないかという事を チェックする。 2)1)がOKなら、「更新しますか?」っという 確認ダイアログを表示します。 3)実際に更新をかけに行く時にも1)と同じようにチェックし、 更新する。 完全な?排他制御をするためには上記処理をやらないといけないような気がしてます。。。。 自分のイメージが合ってるのか不安なので、ご教示のほど宜しくお願いします。 |