WAS 8.0.7 を使用する JPA での楽観的ロックに問題があります。EJB 3 + JPA 2 (SQL Server、XA データソース) を使用する Web プロジェクトがあります。私は2つのJPAエンティティXとYを持っています.
X は Y に対して OneToMany の関係にあります。
どちらのエンティティにも @Version フィールドがあります (対応する SQL テーブルにはバージョン列があります)。
デフォルトですが<property name="openjpa.LockManager" value="version"/>
、persistence.xmlに設定しました
コンテナ管理トランザクションを使用して、ステートレス EJB のメソッド x() 内でエンティティ X を永続化します。
メソッド x() は、エンティティ X を作成して保持し、エンティティ X が返されるまで、X に対して何らかのビジネス処理を実行し続けます。
メソッド x() が複数の Web リクエストから呼び出されたとします。
最初のリクエストは x() を呼び出し、X エンティティを作成します。
一方、2 番目のリクエストがメソッド x() を呼び出すと、最初のリクエストが完了するまでブロックされます。
これは楽観的ロックを使用した適切な動作ですか? 同時更新がある場合、2 番目の要求を続行して OptimisticLockException をスローするべきではありませんか?
代わりに、悲観的ロックを使用しているかのようにブロックするだけです。