JSF es una tecnología útil, pero sin duda puede ahorcarse con ella.
Parece que, o bien está inflando el tamaño del estado de la vista (estableciendo valores grandes en los componentes) o está filtrando las referencias a los componentes en otro estado de sesión (lo que sería malo). Otro posible culpable sería una visión excesivamente grande (he visto la facilidad con la que las personas pueden construir árboles de IU conducen a gráficos de control muy grandes con tablas de datos en todas partes). Sé que IBM proporciona controles de texto enriquecido y hojas de cálculo. No puedo comentar el efecto que tendrá el uso de estos en el tamaño del estado.
La fruta que cuelga más bajo es comprobar los beans gestionados configurados para el alcance de la sesión en faces-config.xml.
JSF ahorra dos cosas entre solicitudes:
- la vista (todos los controles de la página)
- el estado de vista (el estado de los controles)
Estos están separadas porque algunos controles, como los hijos de una tabla de datos, pueden tener múltiples estados (uno para cada fila). El estado se puede guardar en un campo oculto en el formulario (que, si no está encriptado, puede ser un gran peligro para la seguridad) o en la sesión. Para acomodar múltiples ventanas del navegador que comparten la misma sesión (y, en algunas implementaciones, compatibilidad con el botón de retroceso), se almacenan varias vistas.
- Debe haber una opción de configuración para establecer el número de estados de vista que la aplicación mantendrá en la sesión para un usuario dado en un momento dado.
- Puede medir el tamaño del estado de la vista proporcionando StateManager que mide el tamaño de la vista/estado guardado (configure un StateManager en faces-config.xml con un constructor público que toma un StateManager; consulte los archivos PDF JSF spec para obtener más información; el estado es serializable y puede verificar su tamaño volcándolo en una secuencia).
La mayoría de las aplicaciones JSF construidas con IDE tienen respaldos. Sería posible, a través del alcance del bean Session, aferrarse al estado más tiempo de lo que desee, lo que supondría una carga para la sesión. Dado que tiende a haber un bean de respaldo por página, cuantas más páginas tenga, mayor será el problema. Verifique faces-config.xml para ver si esta es una posible fuente de problemas.
Otra cosa que podría hacer sería configurar un HttpSessionAttributeListener en su web.xml. Puede obtener un stack trace para ayudar a identificar áreas problemáticas en su aplicación.
solo una opinión personal, pero creo que la falla radica en IBM y también en su implementación de JSF. No puedo justificar mis sentimientos :) – guyumu
El que vi fallar utilizó Sun JVM y la implementación Apache JSF. Apache es muy IBM, así que no puedo decir cómo son los dos diferentes. Creo que es el modelo JSF, me parece muy pesado. – duffymo