Tipos de ámbitos en FundeWeb

PEDRO DELGADO YARZA 2014/02/03 17:10

Cuando nos encontramos en la ejecución de una aplicación, los bean cargados durante el transcurso de esta almacenarán los datos introducidos por el usuario, así como los nuevos bean creados. El ámbito nos define cuánto tiempo queremos que dichos datos cargados en memoria estén disponibles, es decir si queremos que estén disponibles durante un rango de la aplicación o si queremos que se eliminen para dejar memoria libre cuanto antes.

Seam dispone de un conjunto de ámbitos que nos permite ajustar la durabilidad en memoria de un determinado conjunto de datos, de manera que optimicemos en todo momento los recursos utilizados en la ejecución de nuestra aplicación.

Este ámbito representa el conjunto de objetos que queremos que permanezcan en memoria toda la vida de la aplicación. La única manera de liberar de memoria de estos objetos es mediante el reinicio del servidor, tras el cual la aplicación arrancará desde el principio, recargándose estos objetos cuando la aplicación así lo haya establecido. Su principal uso es guardar información de configuración y metamodelos de la aplicación.

Este ámbito representa el conjunto de objetos que estarán cargados en memoria durante toda la sesión abierta por el usuario con el servidor. Estos objetos se cargarán cuando el flujo de la aplicación así lo decida y quedarán persistidos hasta cuando el usuario finalice la sesión.

Es importante saber que si el usuario no invalidara/finalizara la sesión los objetos quedarán cargados en memoria hasta que venza el timeout y sea el propio servidor quien invalide la sesión para que así se pueda limpiar la memoria.

Este ámbito establece un rango de ejecución durante la aplicación en el cual todos los objetos que se creen dentro de él con este ámbito estarán cargados en memoria hasta que finalice dicho rango o sea la aplicación quien explícitamente indique que la conversación ha de ser finalizada.

Este concepto de conversación es muy interesante puesto que nos permite mantener en memoria los objetos que necesitamos durante un flujo de navegación, dándonos la oportunidad de eliminarlos de memoria cuando ya no los consideremos útiles, bien porque ya hemos terminado de trabajar con ellos, bien porque el flujo de navegación va por otro camino y ya no son necesarios.

El programador podrá establecer cuando comienza ese rango y cuando acaba, de manera que los recursos que se utilizan son óptimos puesto que podemos ajustar la vida de los objetos en memoria con mayor precisión que con los rangos anteriores.

La gestión de las conversaciones va más allá de una simple anotación en nuestras clases, por lo que debemos conocerlas en profundidad y saber cómo y cuando utilizarlas. Toda esta información puede ser consultada en esta guía.

Este ámbito está ligado a los componentes que están cargados y “vivos” en la visualización de un formulario web. Todos los componentes se mantienen en memoria hasta el instante en el que el usuario hace “submit” hacia una página diferente. En ese momento los componentes son liberados por el contenedor y si volviésemos a intentar acceder a ellos tendríamos un nuevo componente vacío.

Es importante tener en cuenta que este tipo de funcionalidad está pensada para la introducción simple de datos en un formulario y liberar los recursos utilizados. Por lo que cualquier acción que lance un submit a otra página limpiará los objetos guardados.

Este ámbito es uno de los más cortos de Seam y viene ligado al contexto del lanzamiento de un evento. Por ejemplo, durante el ciclo de vida de JSF se lanzan una serie de eventos en los diferentes pasos del procesamiento de una petición. Bajo este ejemplo, los datos almacenados en memoria se destruirían en cuanto saltara cualquier tipo de evento, validación, refresco, submit, etc…

Bajo este ámbito no debemos presuponer que la información perdurará más allá de la invocación al método concreto, ya que es muy posible que esa invocación lance algún evento tras su realización que cause que se eliminen de memoria los datos cargados.

Este es el ámbito más pequeño disponible, está ligado a la ejecución de un método y tras ello limpia los datos cargados en memoria. Este ámbito es usado cuando no queremos que en memoria quede rastro de las clases cargadas tras cada ejecución, como por ejemplo cuando invocamos a una clase utilidad.

No se recomienda su uso salvo en un escenario con fuertes restricciones de memoria.

  • fdw2.0/fundeweb2.0/gt/tipos_de_ambitos_en_fundeweb.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)