App SRV分離レベルがコミットされた読み取りに設定されている場合、OptipicisticLockexceptionは発生できますか?

StackOverflow https://stackoverflow.com/questions/3890460

質問

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の並行性とロック):

alt text

しかし、分離レベルのアプリサーバーがコミットされた読み取りに設定されている場合、この状況は決して発生しないと思います。

なんで?使用する場合 コミットされた読み物を読んでください 分離レベル、 繰り返しのない読み取り 発生する可能性がありますが、

  1. これは、データのメモリ表現に影響しません(e1 上記の例で)
  2. ほとんどの場合、データを読み直しません
    • そして、たとえあなたが行う(そして反復性のない読み取りを実行する)場合でも、エンティティは変更を犯す前に別のスレッドによって変更される可能性があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top