Todos sabemos que JSF es el standard que Oracle define para la construcción de aplicaciones web basadas en controles . Ahora bien los standards siempre pueden mejorar con el paso del tiempo . Esto es algo que ha pasado con JSF . En estos momentos nos encontramos con dos versiones que conviven en el mercado JSF 1.2 y JSF 2.0 .
En la versión 1.2 de JSF existian 3 ambitos o scopes que nuestros ManagedBean podian tener
Request Scope: El ManagedBean tiene un ambito de petición
Session Scope : El ManagedBean vive durante la sesion del usuario
ApplicationScope: El ManagedBean vive durante la propia vida de la aplicación .
Muchas veces el propio funcionamiento de la aplicación con JSF hace que el programador trabaje de una forma mas sencilla utilizando ManagedBeans que tengan un ámbito de sesion como se muestra a continuación.
Lamentablemente todo lo que en JSF se asigne como sessionScoped es almacenado en la session del usuario .
Existen unos casos puntuales como carritos de la compra o aplicaciones pequeñas etc en los cuales se trata de la operación correcta. Pero en muchos casos se acaban almacenando datos que no pertenecen al concepto propiamente dicho de Sesión sino que son simplemente listas de registros o cosas similares.
Esto al final acaba siendo un problema para la aplicación ya que aunque en el momento del desarrollo no tendremos muchos problemas. Al ponerla en producción podremos observar un incremento importante de memoria consumida ,ya que podemos tener tranquilamente 500 o 1000 sessiones de usuario concurrentes y cada uno con una serie de datos en memoria.
Esto en principio nos puede parecer un puro problema de añadir mas memoria al servidor . Sin embargo según la aplicación se vaya complicando o necesite de una mayor escalabilidad el problema será mas dificil de resolver ya que obligaremos a nuestros servidores a replicar las sessiones en el cluster con los problemas de trafico de red y rendimiento que esto supondrá.
Para eliminar este problema JSF 2.o nos provee de un nuevo tipo de ambito denominado ViewScoped que permite almacenar los objetos mientras nos mantengamos en la misma vista . De esta forma podremos de una forma relativamente sencilla eliminar muchos de los datos que antiguamente almacenabamos en la sesión y mejorar la escalabilidad de nuestra aplicación.
Hola, Cecilio. Qué gran trabajo realizas poniendo estas páginas tan claras y concisas y respondiendo a casi todas las consultas. Gracias antes de nada.
Mi pregunta es sobre los ámbitos @ConversationScoped y @Dependent que para mí son nuevas y las desconozco. ¿Qué usos tienen? Un saludo.
Estimado Cecilio:
Siempre tus exposiciones son muy claras y concisas. Te felicito.
Ahora, ¿el uso del ámbito Request no es muy aconsejable?.
Es una simple duda.
Saludos!
Es el más aconsejable , salvo que quieras compartir informacion entre varias ventanas en ese caso tendrás que subir a flash o session
espero su pronto respuesta
Buenas noches estimado una conusulta yo registro un dato y se guarda en la base de datos y al momento de listar desapare tengo que estar actualizando 3 o 4 veces la pagina para que pueda optener
Eso es muy raro , pueden ser tres cosas A) que hayas hecho algo mal y no sepamos muy bien que es. B) Revisar la cache del navegador , C) revisar que no tienes ninguna cache en la parte Java que no se refresque . Es lo que se me ocurre 😕
¿Refrescas el formulario con la función “update”?
Ejemplo: si tu formulario que puede contener un datatable se llama frmListadoUsuarios, en el commandButton deberías agregar el siguiente código:
update=”:frmListadoUsuarios”
Eso te mostaría inmediatamente en el datatable el nuevo registro.
buenas, como puedo mostrar en el mensaje de en un confirmdialog el valor de una propiedad de un Managed bean, mi codigo es este:
Opciones
intenta usar expression language de JSF
Saludos. cuales son las diferencias entre @Named(name=”nombre”) Y @ManagedBean??
Es una etiqueta similar pero que inyecta el managedbean a nivel de CDI y te da acceso a otros ambitos de vida del managed bean unicamente soportados por un servidor JEE Full Stack . Concretamente da acceso al conversationScope
Muy buen artículo que me recuerda mis problemas en el desarrollo de aplicaciones web de alta concurrencia de usuarios. De todas formas, nosé exactamente cómo se soluciona en JSF problemáticas donde tienes que guardar información de estado de otras pantallas (por ejemplo los típicos filtros o bien las pantallas secuenciales donde no se guarda hasta finalizar una serie de pasos concretos). Imagino que hay formas para llevar esa información sin influir en el consumo de memoria de la aplicación, pero simplemente era para saber si JSF proporciona alguna fórmula para resolver esos escenarios.
Muchas gracias y un saludo.
Si a partir de JEE 6 existe el ambito de ConversationScope que permite diseñar conversaciones dentro de JSF que duren varias paginas y no solo se mantengan en una vista
Muy buena tu pagina y me interesa bastante la información que colocas, oye me podrias enviar información para aprender mas sobre JSF 2.0, ya que en la empresa sus aplicaciones estan con esa tecnologia.
Gracias