1

Websphereアプリケーションサーバー7.0.0.0.9を;OpenJPA1.2.3-SNAPSHOT'で使用しています。jdbcデータソースwebSphereDefaultIsolationLevel=2(READ COMMITTED)のSetプロパティがあります。複数のスレッドで同じ行をコミットする競合がある場合にOptimasticLockExceptionが発生することを理解しているため、この質問があります。ただし、分離レベルのアプリサーバーがREAD COMMITTEDに設定されている場合、このような状況は発生しないと思います。

これは私が得ている例外です。

<openjpa-1.2.3-SNAPSHOT-r422266:907835 fatal store error> org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock violation was detected when flushing object instance 
4

1 に答える 1

1

OptimisticLockException複数のスレッドで同じ行をコミットする競合がある場合に発生することが私の理解であるため、この質問があります。

はい、エンティティの属性が、コミット時に読み取られたときよりも高い場合(つまり、別のトランザクションによって変更されたOptimisticLockException場合)にスローされます。Versionこれは、次の図に示されています(JPA 2.0の並行性とロックから借用)。

代替テキスト

ただし、分離レベルのアプリサーバーがREAD COMMITTEDに設定されている場合、このような状況は発生しないと思います。

なんで?READ COMMITTED分離レベルを使用すると、繰り返し不可能な読み取りが発生する可能性がありますが、次のようになります。

  1. これは、データのメモリ表現には影響しません(e1上記の例では)
  2. ほとんどの場合、データを再読み込みすることはありません
  • また、実行した場合(および繰り返し不可能な読み取りを実行した場合)でも、変更をコミットする前に、エンティティが別のスレッドによって変更される可能性があります。

要約すると、READCOMMITTEDは防止しませんOptimisticLockException

于 2010-10-09T03:05:33.450 に答える