2016-04-07 12 views
0

Ich habe eine JSF-Anwendung mit einer @ViewScoped Bean. Es ist viewScoped, weil ich einige Ajax-Anfragen mache.JSF ViewScoped OutOfMemoryException

Ich lade eine große Menge an Daten in die Ansicht und zeige sie dem Benutzer an.

Heute habe ich einen Belastungstest durchgeführt und ich lief in eine OutOfMemoryException. Wie sich herausstellt, wenn ich die Seite öffnen, wird @PostConstruct

genannt

bean created. ID = @54a35e23

Jetzt steuere ich auf eine andere Seite und wieder zurück (@PreDestroy wurde nicht genannt) Dann bekomme ich

bean created. ID = @fee0948

Ich mache das nochmal im Belastungstest. Und ein paar Stunden später habe ich die

Kann ich irgendwie JSF zwingen, meine ViewScoped Bohne zu zerstören, wenn ich auf eine andere Seite navigiere?

+0

Verwenden Sie CDI oder sind Sie offen für? OmniFaces '@ ViewScoped' zerstört beim Onload explizit Beans und den zugehörigen JSF-Ansichtszustand. Aber es erfordert CDI. Siehe auch http://showcase.omnifaces.org/cdi/ViewScoped – BalusC

+0

Ich benutze Java EE 6 und keine CDI. Außerdem bin ich kurz davor, live zu gehen, also möchte ich nicht viel ändern. Gibt es keinen anderen Weg? – matthias

+0

JSF (Mojarra) behält maximal 25 View-Scoped-Beans in Sitzung. Ändern Sie den Speicherplatz darauf. Oder führen Sie den JPA-Cache der 2. Ebene ein (wenn Sie JPA verwenden). – BalusC

Antwort

0

Wenn Sie ViewScoped Bean ist riesig, haben Sie ein Problem mit Ihrer Implementierung. Könnten Sie Ihre Quelle hinzufügen, um sie zu überprüfen? Wenn Sie eine große Datenmenge verarbeiten, müssen Sie wahrscheinlich etwas im Speicherraster wie Infinispan oder Hazelcast verwenden.

+0

, aber wenn ich eine AJAX-Anfrage innerhalb meiner Seite verwenden möchte, muss ich ViewScope oder SessionScope verwenden, richtig? – matthias

+0

Ja, aber ich spreche über die Daten, die Sie auf Ihrer Seite zeigen. Welche Komponenten zeigen Sie? –