Internetanwendung
Die Anwendung ist in OutOfMemory gestorben. Die Management Bean des geschlossenen Bildschirms ist aktiv und R.I.P.
Verdächtiger Teil
Anmerkung | Namensraum | Lebenszeit |
---|---|---|
@RequestScoped |
javax.enterprise.context.RequestScoped | Eine HTTP-Anfrage/Antwort |
@ViewScoped |
javax.faces.view.ViewScoped | Während die Ansichten gleich sind |
@SessionScoped |
javax.enterprise.context.SessionScoped | Sitzungsstart-Ende |
@ApplicationScoped |
javax.enterprise.context.ApplcationScoped | Während die Anwendung ausgeführt wird |
@Dependent |
javax.enterprise.context.Dependent | Hängt vom Umfang des injizierten Ziels ab |
@ConversationScoped |
javax.enterprise.context.ConversationScoped | Sie können Start und Ende beliebig festlegen |
@FlowScoped |
javax.enterprise.context.FlowScoped | Vom Anfang bis zum Ende eines vordefinierten Flusses |
Hmm. ** Es ist praktisch, wenn "@ ViewScoped" beim Öffnen des Bildschirms generiert und beim Schließen verworfen wird. ** ** ** Sie können "@ SessionScoped" die Informationen des angemeldeten Benutzers geben und mit "@ ViewScoped" einen Geschäftsbildschirm erstellen.
Sie können auch die Anzahl der "Ansichten" angeben, die eine Sitzung in "web.xml" enthält.
/web.xml
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>sever</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.numberOfLogicalViews</param-name>
<param-value>20</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.numberOfViewsInSession</param-name>
<param-value>20</param-value>
</context-param>
Wissen Sie, ob es freigegeben wird, wenn die Obergrenze überschritten wird.
Als ich so etwas tat, war die Management-Bean von "@ ViewScoped", die hätte zerstört werden sollen, sehr lebendig und die Erinnerung wurde zerstört.
Anscheinend wird die Management-Bean von "@ ViewScoped" nur freigegeben, wenn sie das folgende Muster aufweist.
Daher überlebt es im folgenden Muster.
Verwenden Sie OmniFaces @ViewScoped anstelle des Standards "@ ViewScoped". Verwenden Sie einfach die Annotation "@ ViewScoped" von "OmniFaces" und sie wird freigegeben, wenn Sie das "Entladen" -Ereignis Ihres Browsers abrufen. Es ist so konzipiert, dass die Standardabhängigkeit nicht so stark wie möglich beeinflusst wird. Daher frage ich mich, ob es nur für die Verwendung von "@ ViewScoped" eingeführt werden kann.
Ich habe mich gefragt, ob View bildschirmweise verwaltet werden soll. Da es sich jedoch nicht um eine bildschirmbasierte Einheit, sondern um eine komponentenbaumbasierte Einheit handelt, ist es falsch zu erwarten, dass sie beim Schließen des Bildschirms freigegeben wird.
Es handelt sich um ein Trap-Verhalten, das auch dann nicht verworfen wird, wenn die maximale Anzahl logischer Ansichten überschritten wird.
~~ Halte die Sitzung nicht lange und mache sie nicht riesig ~~
jsf-2 - Warum @ViewScoped Beans, die abgelaufen sind, erst nach Ablauf der Sitzung zerstört werden stack overflow : JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?