App SRV分離レベルがコミットされた読み取りに設定されている場合、OptipicisticLockexceptionは発生できますか?
-
28-09-2019 - |
質問
WebSphere Application Server 7.0.0.0.9を使用しています。 JDBCデータソースWebSpheredEfaultISOlationLevel = 2(読み取りコミット)のプロパティを設定しました。私の理解は、複数のスレッドで同じ行をコミットする競争がある場合に私の理解が発生するため、この質問があります。しかし、分離レベルのアプリサーバーがコミットされた読み取りに設定されている場合、この状況は決して発生しないと思います。
これは私が得ている例外です。
<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
解決
私の理解があるので、私はこの質問があります
OptimisticLockException
複数のスレッドで同じ行をコミットする競争がある場合に発生します。
はい、 OptimisticLockException
場合は投げられます Version
エンティティの属性は、読み取られたときよりもコミット時に高くなります(つまり、別のトランザクションによって変更されました)。これは以下の図に示されています(からの借用 JPA 2.0の並行性とロック):
しかし、分離レベルのアプリサーバーがコミットされた読み取りに設定されている場合、この状況は決して発生しないと思います。
なんで?使用する場合 コミットされた読み物を読んでください 分離レベル、 繰り返しのない読み取り 発生する可能性がありますが、
- これは、データのメモリ表現に影響しません(
e1
上記の例で) - ほとんどの場合、データを読み直しません
- そして、たとえあなたが行う(そして反復性のない読み取りを実行する)場合でも、エンティティは変更を犯す前に別のスレッドによって変更される可能性があります。
要約すると、commitedは防止しません OptimisticLockException
.
所属していません StackOverflow