0

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 をスローするべきではありませんか?

代わりに、悲観的ロックを使用しているかのようにブロックするだけです。

4

1 に答える 1

0

データソース分離レベルの設定を確認してください ( http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frdat_isolevtab. html )

高分離レバーは、トランザクションで参照される ( selected など) すべてのテーブルを、トランザクションが終了するまでロックする場合があります。

于 2013-09-19T14:06:54.187 に答える