2011-08-26 12 views
8

Java Persistent/Locking wikibooks *によれば、ロックを処理する最良の方法は、オプティミスティックロックエラー/例外をユーザーに報告することです。ロック(JPA)の処理方法は?

問題はスケーラブルではないということです。同じアクションでロックを引き起こす可能性が高いユーザーが多数いるとします。ユーザは、ロックエラーメッセージを気にしません。一言で言えば

  • 最良の方法は、すべてのロックを無効にするのですか?
  • エラーロックメッセージをユーザーに報告することをお勧めします。しかし、ユーザーは動作するまで自分の行動を再試行する必要があります!
  • 最も良い方法は、ロックがなくなるまでトランザクションを再試行することです。

*

残念ながら、プログラマが頻繁に自分の利益のためにあまりにも巧妙な可能オプティミスティック・ロック例外の処理。 OptimisticLockExceptionが発生した場合の対処方法は、オプティミスティック・ロックを使用する際に発生する最初の問題です。フレンドリーな近所のスーパープログラマーの典型的な応答は、例外を自動的に処理することです。彼らは新しいトランザクションを作成し、オブジェクトをリフレッシュしてバージョンをリセットし、データをオブジェクトにマージして再コミットするだけです。 Prestoの問題が解決した、またはそれですか?

これは、実際には最初の場所でロックの全体のポイントを打ち負かします。これがあなたが望むものであれば、ロックを使わないこともできます。残念ながら、OptimisticLockExceptionは自動的に処理されることはめったにありません。あなたは本当に問題についてユーザーに気を配る必要があります。競合をユーザーに報告し、「申し訳ありませんが、編集の競合が発生し、作業をやり直さなければならない」と言ってください。そうでない場合は、オブジェクトを更新して現在のデータを表示してください。彼らが提出したデータは、必要に応じて2つをマージするのに役立ちます。

いくつかの自動マージツールは、データの2つの競合するバージョンを比較し、個々のフィールドが競合しない場合、データはユーザーの支援なしで自動的にマージされます。これは、ほとんどのソフトウェアバージョン管理システムが行うことです。残念なことに、ユーザーは通常、何かがプログラムよりも競合しているかどうかを判断することができます。なぜなら、2つのバージョンの.javaファイルが同じコード行を変更していないからです。他のユーザーが参照する方法を追加した方法、および一般的な夜間ビルドを毎回頻繁に壊す可能性のあるいくつかの問題があります。

+0

[JPAのロックシステムを無効にする方法](http://stackoverflow.com/questions/7201940/how-to-disable-the-lock-system-of-jpa)、同じから著者。 –

+2

私はそれらが重複していないと言うでしょう。なぜなら、どのようにディセーブルにするかを尋ねる一方で、もう一方はロック付きの戦略を要求するからです。 – edutesoy

答えて

10

、彼はいくつかの修正をしたかったので、ユーザは、メッセージを気にし、変更が行われていません。彼はこのようにページをリフレッシュしてデータの新しい状態を見て、彼の修正をやり直すか、あるいは新しい状態が与えられたときにそれらを修正すべきではないと決めるでしょう。

2人のユーザーが同時にエンティティを変更し、最後の変更が勝った場合、変更内容は何ですか?問題がある場合は、オプティミスティック・ロックを使用し、問題が発生したときにユーザーに通知してください。その周りには道はない。

問題がない場合は、オプティミスティック・ロックを使用しないでください。最後の変更は、データベースの制約を壊さない限り、常に勝ちます。ただし、同じデータを変更する同時ユーザーがある場合、は常にになります(たとえば、一部のユーザーが他のユーザーが同じエンティティに変更を送信する前にエンティティを削除する可能性があるため)。

  • どちらかそれはそれはそれは成功します
  • や修正を行うことだけではできませんので、再び失敗しますが、中に楽観的ロックを持っていることのポイントを打ち負かす:

    再試行はオプションではありません最初の場所。

あなたの問題は車の類推で説明できます。スピードリミッターで車を購入することを選択したとします。スピードリミッターを壊さないようにするためです。そして今あなたは尋ねる:しかし、私はスピードの限界には関心がない。私は常にスピードリミッタを無効にしてはいけませんか?あなたはすることができますが、あなたが警察に捕まったら驚くことはありません。

+0

あなたの大きな説明をありがとう –

関連する問題