Java Persistent/Locking wikibooks *によれば、ロックを処理する最良の方法は、オプティミスティックロックエラー/例外をユーザーに報告することです。ロック(JPA)の処理方法は?
問題はスケーラブルではないということです。同じアクションでロックを引き起こす可能性が高いユーザーが多数いるとします。ユーザは、ロックエラーメッセージを気にしません。一言で言えば
:
- 最良の方法は、すべてのロックを無効にするのですか?
- エラーロックメッセージをユーザーに報告することをお勧めします。しかし、ユーザーは動作するまで自分の行動を再試行する必要があります!
- 最も良い方法は、ロックがなくなるまでトランザクションを再試行することです。
*
残念ながら、プログラマが頻繁に自分の利益のためにあまりにも巧妙な可能オプティミスティック・ロック例外の処理。 OptimisticLockExceptionが発生した場合の対処方法は、オプティミスティック・ロックを使用する際に発生する最初の問題です。フレンドリーな近所のスーパープログラマーの典型的な応答は、例外を自動的に処理することです。彼らは新しいトランザクションを作成し、オブジェクトをリフレッシュしてバージョンをリセットし、データをオブジェクトにマージして再コミットするだけです。 Prestoの問題が解決した、またはそれですか?
これは、実際には最初の場所でロックの全体のポイントを打ち負かします。これがあなたが望むものであれば、ロックを使わないこともできます。残念ながら、OptimisticLockExceptionは自動的に処理されることはめったにありません。あなたは本当に問題についてユーザーに気を配る必要があります。競合をユーザーに報告し、「申し訳ありませんが、編集の競合が発生し、作業をやり直さなければならない」と言ってください。そうでない場合は、オブジェクトを更新して現在のデータを表示してください。彼らが提出したデータは、必要に応じて2つをマージするのに役立ちます。
いくつかの自動マージツールは、データの2つの競合するバージョンを比較し、個々のフィールドが競合しない場合、データはユーザーの支援なしで自動的にマージされます。これは、ほとんどのソフトウェアバージョン管理システムが行うことです。残念なことに、ユーザーは通常、何かがプログラムよりも競合しているかどうかを判断することができます。なぜなら、2つのバージョンの.javaファイルが同じコード行を変更していないからです。他のユーザーが参照する方法を追加した方法、および一般的な夜間ビルドを毎回頻繁に壊す可能性のあるいくつかの問題があります。
[JPAのロックシステムを無効にする方法](http://stackoverflow.com/questions/7201940/how-to-disable-the-lock-system-of-jpa)、同じから著者。 –
私はそれらが重複していないと言うでしょう。なぜなら、どのようにディセーブルにするかを尋ねる一方で、もう一方はロック付きの戦略を要求するからです。 – edutesoy