JSF 1.2 vs JSF 2.0 (Ambitos y Escalabilidad )

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.

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

10 Responses to JSF 1.2 vs JSF 2.0 (Ambitos y Escalabilidad )

  1. Patricio 15 enero, 2013 at 19:20 #

    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

  2. Asier Marcos 22 enero, 2013 at 15:33 #

    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.

    • Cecilio Álvarez Caules 22 enero, 2013 at 16:10 #

      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

  3. Nelson Gadea 26 febrero, 2014 at 23:03 #

    Saludos. cuales son las diferencias entre @Named(name=”nombre”) Y @ManagedBean??

    • Cecilio Álvarez Caules 27 febrero, 2014 at 10:06 #

      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

  4. c 15 octubre, 2014 at 22:27 #

    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

    • Cecilio Álvarez Caules 16 octubre, 2014 at 21:55 #

      intenta usar expression language de JSF

  5. erasmo 7 enero, 2017 at 1:28 #

    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

    • Cecilio Álvarez Caules 7 enero, 2017 at 9:29 #

      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 😕

  6. erasmo 7 enero, 2017 at 1:29 #

    espero su pronto respuesta

Deja un comentario