2017-08-09 16 views
0

私はeclipseLink JPAを使用しています.2つの異なるサーバーにデプロイされた2つの異なるEJBアプリケーションに対して同じデータベースを使用しています。他のアプリケーションが同じオブジェクトに対していくつかの変更を行っている場合は、JPAキャッシュのために並行性の問題が発生しています。この並行性の問題を管理できる方法はありますか? db操作にネイティブクエリを使用することは選択肢ではありません。私はoracle dbとglassfishサーバーを使用しています。それにはどんな解決策もありますか?キャッシュデータによるeclipselink jpaの並行性の問題

+0

あなたはどのような問題がありますか?トランザクションロックですか?またはキャッシュに起因するオブジェクトの矛盾した状態だけがありますか? –

+0

1つのアプリケーションにリストとして1つのレコードを表示していて、2番目のアプリケーションから同じレコードを更新しました。リストで同じ古い値が表示されています。 –

答えて

1

は、あなたが問題を抱えている理由を私に説明してみましょう:

を使用すると、オブジェクトのデータをキャッシュしている想像してみてください。したがって、最初のアプリケーションはキャッシュされたデータで動作し、このアプリケーションをデータベースに移動する必要はありません(すでにメモリ内の値があるため)。 同じentityManagerで別の変更クエリを実行する場合は、キャッシュされたデータをアップグレードできます。他のアプリケーションがデータの状態を変更したことは決して知りません。

したがって、すでにキャッシュされている値があるため、最初のアプリケーションからの読み取りクエリがないため、分離レベルは役に立ちません。そして、entityManagerまでは、同じマネージャーからの操作だけです。別のアプリケーションの別のentityManagerについて知る方法がありません。

解決策はキャッシュしないことです。または、外部キャッシュを2つ目のレベルのキャッシュとして構成して、両方のアプリケーションから退去させることができます(例:ヘイルキャストキャッシュなど)。

+0

孤立レベルをシリアル化するための設定は何ですか?キャッシュ内の矛盾したデータを助けますか? –

+0

@VickyRatheeあなたが直面していることがもっと分かりやすくなったので、答えを編集しました。 –

関連する問題