JPA と Oracle DB を使用してマルチユーザー JavaEE アプリケーションを作成しようとしています。以前のアプリでは、ReentrantReadWriteLock Java クラスを使用してデータ リソースをロックしていました。ここで、JPA が楽観的ロックと悲観的ロックのサポートを提供し、Oracle が分離レベルに応じてリソースを自動的にロックすることがわかりました。
それで、ロックを行う最良の方法はどれですか?ReentrantReadWriteLock を使用する Java で、JPA を使用するか、データベースで直接使用しますか? Java で追加のロックを実装する必要がありますか? それとも、単に Oracle の自動ロック メカニズムに頼ることができますか?
回答ありがとうございます。
質問する
200 次
2 に答える
0
Oracle の場合、悲観的ロックは当然の選択です。パフォーマンスのトレードオフがないため、とにかく使用され、オフにする方法がないためです。ただし、これは、ORM フレームワークが正しい順序でクエリをシリアル化する必要があることを意味します。そうしないと、デッドロックが発生します。ORA-00060 エラーが発生します。オラクルの観点からすると、デッドロックは常に間違ったアプリケーション設計によって引き起こされます。残念ながら、ORM では SQL ステートメントの順序を制御できず、Java 開発者にとってデッドロックの問題を修正するのは非常に困難です。また、Oracle 固有のエラーは、Java 開発者にとって「到達不能」です。
楽観的ロックとは逆に、ORM/JPA フレームワークは「OptimisticLockingException」をスローし、アプリケーションはフォームをクリアし、ユーザーが値を再度入力できるようにしてから、DB にデータを保存することを再試行できます。
于 2013-09-17T15:25:26.290 に答える