application Web
L'application est morte dans OutOfMemory. Le bean de gestion de l'écran fermé est vivant et R.I.P.
Partie suspecte
Annotation | Espace de nom | Durée de vie |
---|---|---|
@RequestScoped |
javax.enterprise.context.RequestScoped | Une requête HTTP/réponse |
@ViewScoped |
javax.faces.view.ViewScoped | Alors que les vues sont les mêmes |
@SessionScoped |
javax.enterprise.context.SessionScoped | Début-fin de session |
@ApplicationScoped |
javax.enterprise.context.ApplcationScoped | Pendant que l'application est en cours d'exécution |
@Dependent |
javax.enterprise.context.Dependent | Dépend de la portée de la destination injectée |
@ConversationScoped |
javax.enterprise.context.ConversationScoped | Vous pouvez spécifier le début et la fin de manière arbitraire |
@FlowScoped |
javax.enterprise.context.FlowScoped | Du début à la fin d'un flux prédéfini |
Hmm.
** Il est pratique si @ ViewScoped
est généré lorsque l'écran est ouvert et jeté lorsqu'il est fermé. ** **
Vous pouvez donner à @ SessionScoped
les informations de l'utilisateur connecté et créer un écran professionnel avec @ ViewScoped
.
Vous pouvez également spécifier le nombre de "vues" qu'une session contient dans "web.xml".
/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>
Sachez s'il sera libéré si la limite supérieure est dépassée.
Quand j'ai fait quelque chose comme ça, le bean de gestion de @ ViewScoped
, qui aurait dû être détruit, était très vivant et la mémoire était écrasée.
Apparemment, le bean de gestion de @ ViewScoped
ne sera pas publié à moins qu'il n'ait le modèle suivant.
Par conséquent, il survit dans le modèle suivant.
Utilisez OmniFaces @ViewScoped au lieu du standard @ ViewScoped
.
Utilisez simplement l'annotation @ ViewScoped
de ʻOmniFaces et elle la publiera lorsque vous récupérerez l'événement ʻunload
de votre navigateur.
Il est conçu pour ne pas affecter autant que possible la dépendance par défaut, je me demande donc s'il peut être introduit simplement pour utiliser @ ViewScoped
.
Je pensais carrément que View serait géré écran par écran, mais ce n'est pas une unité basée sur un écran, mais une unité basée sur une arborescence de composants, il est donc faux de s'attendre à ce qu'elle soit publiée lorsque l'écran est fermé.
C'est un comportement d'interruption qui n'est pas ignoré même si le nombre maximal de vues logiques est dépassé.
~~ Ne tenez pas la session pendant longtemps et ne la rendez pas énorme ~~
jsf-2 - Pourquoi les @ViewScoped Beans qui ont expiré ne sont pas détruits avant l'expiration de la session stack overflow : JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?
Recommended Posts