0

jQGrid 編集の行ロックを実装したいと考えています。私のバックエンドは JDBC を使用しているので、バックエンドで楽観的ロックを使用し、ロックが取得されない場合はグリッドにエラー メッセージを表示することを考えています。

これはそれを行うための最良の方法ですか、それともより良い代替手段はありますか? グリッド自体の行をロックして、編集中に特定の行を他のユーザー (別のシステムおよびブラウザ上) が編集できないようにすることはできますか?

助けてください。

ありがとう

4

1 に答える 1

1

私は JDBC 開発者ではありません。同時実行制御をどのように実装できるかについて、いくつかの一般的な原則があります。その方法の 1 つが楽観的同時実行制御です。このような並行性の実装例は多数あります。

私は主に Microsoft SQL Server を使用しているため、データベースのテーブルのすべての行に保存されたバイナリ タイムスタンプ値を常に使用しています。すべてのテーブルに、意味的に型と同等の、 null 非許容のrowversionbinary(8)型の列を追加します。主な利点は、列を手動で埋める必要がないことです。SQL Server は、データベースに関連付けられたカウンターを保持します。データベーステーブルで行の挿入または行の更新が行われるたびに、列がrowversionカウンターの現在の値に割り当てられます。その後、カウンターがインクリメントされます。方法では、行の「timestemp」があります。行で何らかの変更が行われると、列の値が増加します。rowversionタイプ。したがって、楽観的同時実行を実装するには、すべての jqGrid テーブルを、rowversion値を保持する追加の隠し列で拡張するだけです。データを変更する必要がある場合は、非表示の列の値をrowversion変更されたデータと共にサーバーに送信します。変更のリクエストは、次のように解釈する必要があります。値を含むデータを取得し、rowversionそれを新しい値に変更します。私のサーバーコードは、変更を加える前に、データベース内のデータの内容がまだ同じrowversion値に対応しているかどうかを検証する必要があります。その場合、データは他のユーザーによって変更されておらず、安全に変更を行うことができます。の値の場合rowversionサーバーは、同時実行エラーに関する jqGrid エラー メッセージに戻る必要があります。現在のデータでグリッドをリロードすることをお勧めします。

実装の詳細については、答えこの古いものを読むことができます。

JDBCを使用しているため、上記のアプローチを直接使用できるかどうかはわかりませんが、実装の主なアイデアは同じであると思います。

于 2013-07-23T15:49:57.080 に答える