Forguncy サポート

悲観的同時実行制御(悲観的ロック)は実現できますか?

フォローする

対象製品とバージョン:Forguncy 2以降

 

Forguncyが既定でサポートしている同時実行制御は、楽観的同時実行制御となっています。詳細については、以下のナレッジベースを参照してください。

排他制御は行われますか?

 

しかしながら、ロックを行う処理をコマンド等を使用して作りこむことで悲観的同時実行制御を実現することが可能です。

添付のサンプルでは、次の2つのページがあり、「テーブル1_一覧ページ」のリストビューのIDをクリックすると、クリックした行を編集できる「テーブル1_編集ページ」にページ遷移します。このとき、ロックがかかっていない場合のみ「テーブル1_編集ページ」に遷移できるサンプルです。

  1. テーブル1_一覧ページ :リストビューで一覧表示しているページです。
  2. テーブル1_編集ページ :リストビューで一覧表示していた個々のデータを編集できるページです。

ロックをかける方法は、「排他確認用」テーブルでユーザー情報を管理し、その情報でロックする(つまりテーブル1_編集ページに遷移しない)かどうかを判断しています。
具体的には、「テーブル1_編集ページ」を表示した場合に「排他確認用」テーブルにユーザーを登録し、「テーブル1_編集ページ」を閉じたら登録したユーザーを削除するようにしています。つまり他のユーザーは「排他確認用」テーブルに値が入っている場合、そのレコードが別のユーザーが編集中だと判断して、編集画面にページ遷移できないようにしています。

「排他確認用」テーブルには、上記で説明した「編集中ユーザー」の他に「編集開始日時」を書き込んでいます。これは「「テーブル1_編集ページ」を閉じたら登録したユーザーを削除する」処理を、[OK]か[キャンセル]ボタンのクリックで行われるようにしていますが、Webブラウザーのウィンドウを直接閉じたり、ブラウザに備わっている「戻る」ボタンでページ遷移したりすると、ユーザーが削除されず残ってしまいます。
このため、「編集開始日時」を設けて現在時刻よりも30分以上前だとロックを解除するという判断を加えています。

サンプルでは30分ですが、たとえば15分などに変更する場合、「テーブル1_一覧ページ」ページのG7セルに設定している「条件分岐」コマンドの条件にて、「=NOW()-TIME(0,30,0)」と設定されている部分を「=NOW()-TIME(0,15,0)"」と変更します。

 

 検索キーワード: fgcinfo fgcdevelopment

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント