2016-04-07 12 views
0

私は@ViewScoped beanを持つJSFアプリケーションを持っています。私はいくつかのAjaxリクエストをするので、viewScopedです。JSF ViewScoped OutOfMemoryException

大量のデータをビューにロードしてユーザーに表示します。

今日私は負荷テストを行い、OutOfMemoryExceptionに遭遇しました。それは私がページを開くと、@PostConstructは今、私は別のページに移動し、(@PreDestroyが呼び出されなかった)、再び戻る

bean created. ID = @54a35e23

と呼ばれ、結局のところそれから私は

bean created. ID = @fee0948

を取得します私は負荷テストでこれをやり直します。そして数時間後に私はOutOfMemoryException

私は別のページにナビゲートすると何とか私のViewScoped豆を破壊するようにJSFを強制することはできますか?

+0

CDIを使用していますか? OmniFaces @ViewScopedは、オンロード時にBeanと関連するJSFビューの状態を明示的に破棄します。しかし、CDIが必要です。 http://showcase.omnifaces.org/cdi/ViewScopedも参照してください。 – BalusC

+0

私はjava ee 6とCDIを使用しません。さらに私はライブに行くのがとても近いので、私は多くを変えたくありません。他の方法はありませんか? – matthias

+0

JSF(Mojarra)はセッション中にビュースコープのBeanを最大25個保持します。その上のメモリスペースを変更します。または、JPAを使用している場合、第2レベルのJPAキャッシュを導入してください。 – BalusC

答えて

0

ViewScoped Beanが大きい場合は、実装に問題があります。ソースを追加してレビューすることができますか?膨大なデータ量を扱う場合は、InfinispanやHazelcastなどのメモリグリッドで何かを使用する必要があります。

+0

も参照してください。私は自分のページ内でいくつかのAjaxリクエストを使用したいときは、ViewScopeまたはSessionScopeを使用する必要があります。 – matthias

+0

はい、私はあなたのページに表示されているデータについて話していますが、どのコンポーネントを表示していますか? –