私はVehicle DTOを持ったVehicleエンティティを持っています。Hibernate Cache1 OpenSessionInViewを使ったOutOfMemory
私はOpenSessionInView
にストライプスを使用します。
私のStripesアクションビーンズでは、約50000ビークルのデータを含むcsvを生成する必要があります。ストライプの開発者が行うことを私に言ったよう
このように、私は次のような方法でのOutputStreamへのファイル書き込み:私はいくつかのページネーション情報を取るサービスを持っている
StreamingResolution() {...}.stream(HttpServletResponse)
を、車の一部をロードそれらをDTOに変換します。
これらのdtoはビューに戻され、csvに書き込まれます。
ページネーションシステム(各ページ500アイテム)は、50000 DTOのリストを持たないようにして、メモリに問題がありました。
しかし、まだ完全には機能しません。 Jmapでは、csvプロセスの終わりに、ヒープスペースにロードされた40000台以上の車両があり、ガベージコレクションは行われませんでした。 Yourkitプロファイラで
、(StatefulPersistenceContext
で参照)、これらのエンティティは、休止状態のL1キャッシュに残っているように私には思える、と私はOpenSessionInView
を持っているので、私はこの問題は、会話が少し長いとキャッシュであるということだと思いますきれいにする必要があります...
私のDAOメソッドの読み込み車は、セッションが必要ないサービスの多くで使用されているので、エレガントな方法でこれを行う方法はちょっと思います。
誰かが私ができることを知っていますか?私はDAO /サービスでセッションをクリアする方法を作ることができると思いますが、それはあまりエレガントではありません...
これはかなり大きなプロジェクトであり、私は非常に簡単な説明をしました。私の決定ではありません。);
私の見解層の上にサービスコールの後にセッションを閉じるような何かをし、再度開く方法はあります新しいサービスコールのための新しいセッション?私は、OpenSessionInViewフィルタがない場合と同様に、サービスコールだけでは、行う方法がないことを意味します。 –
はい、あります - あなたが休止状態とやり取りする方法を示すコードを投稿してください。 – Pablojim
私は春の休止状態テンプレートをdaosで使用しています –