1

データベーステーブルの行が複数のスレッドによって同時に更新されると、データベースはエラーをフラグすることを理解しています。

私たちの実稼働環境では、クラスター内に 2 つの Tomcat サーバーがあります。2 人のユーザーが同時に Tomcat サーバーのそれぞれに転送され、データベース テーブル内の同じレコードを更新する場合があります。その結果、例外がスローされます。

ローカル マシンでこの状況をシミュレートするにはどうすればよいですか? または、本番環境と同じ環境をどのように行うのですか?

私が取り組んでいるテクノロジー: Java 6、Spring 3、Hibernate、MS SQL Server 2008、および Tomcat 7。

4

3 に答える 3

0

データベーステーブルの行が複数のスレッドによって同時に更新されると、データベースはエラーをフラグすることを理解しています。

必ずしも。以下のような 2 つのステートメントを実行すると、

UPDATE foo SET bar=baz WHERE bah=doh;

データベースは、これらのクエリを次々に実行するように単純にスケジュールできます。ただし、デッドロックが発生する可能性はたくさんあり ます。一般的に言えば、結果はクエリとそのタイミング、データ セットなどによって異なります。

于 2013-03-29T16:07:19.633 に答える
0

2 つのトランザクションを使用してシミュレートできます。最初の送信を開始します。2 番目の tx を開始します。最初の TX でいくつかの変更を行い、それをコミットします。2 番目の TX でいくつかの変更を行い、コミットします。Hibernate は OptimisticLockException を提供するはずです。

于 2013-03-30T11:12:51.830 に答える
0

シナリオをシミュレートしたくありません。楽観的ロック例外を処理するコードをテストしたいので、それを読みました。例外をスローするクラスをシミュレートし、OptimisticLockException を明示的にスローします。テスト環境で例外ハンドラ内のシミュレートされたクラスを使用し、テスト fr 例外ハンドラを記述します。

楽観的ロックが機能しているかどうかをテストすることについて心配する必要はないと思います。それは Hibernate 開発者の仕事だからです。

于 2013-03-29T19:04:35.357 に答える