JBossでHibernateを実行していて、この問題が発生しています。一貫性のある状態でJBossの下でHibernateを使用してEntityManagerのキャッシュを維持する方法は?
セッションBeanがEntityManagerを使用してエンティティを検索すると、EntityManagerのキャッシュにすでに存在し、その状態がすでに古くなっている可能性があります。コードがそのようなエンティティを使用して意思決定を行う場合、バグを引き起こすような誤った決定をする可能性があります。
ここでは例を示します。
HTTPリクエスト1.セッションBeanは、エンティティのインスタンスとフィールドとの格納を作成「」永続化エンティティは、セッションBeanがルックアップID = 4
HTTPリクエスト2を取得1.値に設定しますID = 4のエンティティで、フィールド "A"を値2に設定して保存します。
HTTPリクエスト3.セッションBeanはID = 4のエンティティをルックアップし、フィールド「A」をチェックします。値が1の場合は1つの処理を行い、2の場合は別の処理を行います。
要求3のEMが要求1のEMと同じ場合、望ましくない動作が発生します。私はこれを試して、およそ得た。 10%の失敗のケース。
ですから、これを避けるにはどうすればよいですか?エンティティが最新であることを保証する必要があるたびに、em.refresh()またはem.clear()を呼び出すと、リソースが無駄になります。
ご理解とご協力をいただきありがとうございます。私はいつも間違った質問をしていることに気付きました。ここに私が本当に言及しているものがあります:http://stackoverflow.com/questions/1293429/how-to-force-jboss-4-2-3-to-clear-hibernates-session-cache-for-every-requestそんな馬鹿になって申し訳ありません。 – artemb
あなたの質問については何も馬鹿げていません - セッションキャッシュ全体のことはかなり混乱しています:-)私は上記の質問にコメントを残しました。おそらくそれは役に立ちます - CMPを自分で使用していないので、エンティティマネージャのスコープを変更する。それは間違いなく設定/展開の問題ですが、誰かがあなたの質問に答えてくれると確信しています。実装には幸運です。 – ChssPly76