1

Java web-start アプリケーションで更新が失われる問題を防ぐにはどうすればよいですか? シナリオは、2 人のユーザーが同じレコードにアクセスし、1 人が変更を加えて DB を更新する場合です。他のユーザーはまだ古いデータを持っており、最初のユーザーがデータを変更したことを知らずに、DB を変更して更新します。これにより、最初のユーザーの更新が失われます。

アプリケーションを保存する前に、レコードをDBと比較する必要があることを確認する必要があります。変更が見つかった場合は、ユーザーに通知する必要があり、何らかの方法で、現在のユーザーができるようになった後にユーザーが変更を確認できるようにする必要があります彼の変更を適用し、DB に再度送信します。

以下は、私の Java Web Start アプリケーションの詳細です。

  • アプリケーションは、Tomcat7 で実行されているサーブレットと通信する Java web-start テクノロジを使用します。
  • DB は SQL Server 2012 です。
  • サーバー マシン: Windows 64 ビット 2008 R2 エンタープライズ サーバー。
  • Java 7 アップデート 25 64 ビット
  • 休止状態のバージョン - 3.0

これを実装する方法はありますか?

親切にアドバイス。

前もって感謝します

4

3 に答える 3

1

これは、楽観的な戦略の典型的なケースのように思えます。

オプティミスティック同時実行制御 (OCC) は、リレーショナル データベース管理システムの同時実行制御方法であり、複数のトランザクションが相互に影響を与えることなく完了できること、およびトランザクションが影響を与えるデータ リソースをロックすることなく続行できることを前提としています。コミットする前に、各トランザクションは、他のトランザクションがそのデータを変更していないことを確認します。チェックで競合する変更が明らかになった場合、コミットしているトランザクションはロールバックされます

おそらく記録的なバージョン番号を維持しています。

たとえば、各レコードはレコードのバージョン番号を維持します。クライアントがクライアントを受け取ると、バージョン番号も受け取ります。変更時に、サーバーはレコード番号をデータベース内の番号と比較し、変更されていない場合は、バージョン番号が増分された新しいレコードが書き込まれます。

次に、2 番目のクライアントが同じレコード番号で入ります (つまり、レコードは両方のクライアントによって更新されています)。今回は、サーバーはバージョン番号が変更されたことを認識し、更新を拒否します。

さまざまな実装オプションが存在することに注意してください。データベースは、レコード番号またはタイムスタンプを使用してこれを実装できます。データベースは、編集の履歴、または単にレコードの最新バージョンを維持できます。

于 2013-10-17T13:55:00.380 に答える
1

「失われた更新」などのデータ異常の防止は、通常、データベースによって処理されます。このために、データベースを使用するアプリケーションに対して透過的なロック メカニズムを使用します。トランザクションの概念を正しく使用している限り、機能するはずです。パフォーマンスに影響を与え、どのデータ異常を防止するかについては、さまざまなロックの概念があります。私は DB 管理者ではありませんが、これは構成可能である必要があります。

于 2013-10-17T13:55:01.380 に答える
0

エンティティが 1 つの要求で読み込まれ、別の要求で保存される場合、データベース トランザクションのACID プロパティは、複数要求の会話で更新が失われるのを防ぐことはできません。

会話が長い場合は、暗黙的な楽観的ロックメカニズムと明示的なロックの両方が必要です。

于 2015-05-08T20:44:16.327 に答える