2012-02-05 15 views
4

私は、guice-servletがtomcat上で実行され、hibernateがguice-persistになっている環境を使用しています。私が遭遇した問題は、1つのリクエストでem.getReference()を使用すると、ロードされたプロキシオブジェクトがentitymanagerキャッシュに残り、別のリクエストで表示される可能性があります。guice-persistで自動クリアされたセッション

私はEJB3環境でhibernateを使用していましたが、これはデフォルト動作です。エンティティ・マネージャ・キャッシュは、新しい要求ごとにクリアです。 guice-persistが各リクエストのセッションをクリアするのがより安全な動作ではありませんか?または少なくともそれをJpaPersistModuleの設定として与えることはできますか?

EJB3の動作を担当する休止状態のSessionImpl "autoClear"に特別なフラグがあります。新しいエンティティマネージャがJpaPersistModuleによって作成されているときにフラグを有効にする方法はありますか?

答えて

3

解決方法:JpaPersistServiceから返されたEntityManagerをキャッチするAOPインターセプタを作成しました。私はEntityManagerImplを通じてSessionImplを取得し、クリヤープロパティを設定していインターセプターインサイド

bindInterceptor(Matchers.subclassesOf(PersistService.class), 
     Matchers.returns(Matchers.identicalTo(EntityManager.class)), 
     new EntityManagerInterceptor() 
); 

+0

同じエフェクトでも 'castedEm.clear()'を呼び出すことができますので、古いデータの問題を解決できます。 – condit

関連する問題