martes, 5 de mayo de 2009

Modelo contextula de componentes en Seam

Jboss-Seam se apoya en este modelo para gestionar los componentes (clases) que forman parte de una aplicación seam. Dicho modelo se puede explicar de la siguiente manera:
  • Seam es una factoría que crea objetos (instancias) según la definición del componente (clase).
  • Después de la creación, cada objeto es almacenado en un contenedor bajo uno de los varios contextos existentes, con distintos tiempos de vida, creando el contexto (scope) de los objetos y capaz de mantener el estado de cada uno.
  • Seam promueve la interacción de estos objetos con estado a través de contextos, ensamblándolos (bijección de dependencias) acorde a los metadatos asociados a sus respectivas clases.
EXPLICACIÓN:

Seam actúa como un contenedor dividido en distintos compartimentos, en cada compartimento se almacenan una serie de componentes. Cada compartimento constituye lo que seam denomina contexto. Un contexto define qué componentes podemos encontrar en él y durante cuánto tiempo. Para ser más precisos, seam gestiona nombres de variables de contexto. Una variable de contexto no es más que una referencia a la instancia de un componente de seam.

¿QUÉ COMPONENTES GESTIONA SEAM Y QUÉ SON?

Jboss-Seam puede gestionar los siguientes componentes:

  • EJB Stateful Bession Beans
  • EJB Stateless Session Beans
  • EJB Message Driven Beans
  • JPA Entity Beans
  • POJO (Plain Old Java Object)
Como podemos ver, un componente en seam no es más que una clase java que se define mediante una programación declarativa (anotaciones, XML), en dicha declaración definimos la variable que accede a una instancia de una clase y su alcance (contexto).

CONTEXTOS EN SEAM

Los contextos están ordenados de menor a mayor duración:

STATELESS

En este contexto no se almacenan las variables. Los componentes en este contexto se instancian cada vez que se resuelve su nombre.

EVENT

Es análogo al scope request de un servlet. La variable existe desde el comienzo de la fase Restore View hasta el final de la fase Render Response del ciclo de vida de una petición en JSF o hasta que se produce una redirección.

PAGE

Comienza al pricipio de la fase Render Response y continua con cada postback JSF hasta que se produce una redirección o se navega a una página distinta.

Aclaración: postback es una acción en una página web en la que se envía una página entera y su contenido al servidor para su procesamiento y éste devulve la misma página (un formulario de logueo por ejemplo). No se debe confundir con actualizar la página.

CONVERSATION

La variable existe desde el final de la fase Restore View hasta el final de la fase Render Response, incluso se se produce una redirección. Si se convierte en una conversación larga (long-running conversation) abarca múltiples peticiones de un mismo usuario hasta que se termina. Las conversaciones se propagan mediante el uso de parámetros especiales de petición para peticiones que no sean postback y a través del árbol de componentes JSF en el caso de peticiones postback.

SESSION

Es análogo al scope session de los servlets. Los accesos a componentes en este contexto son serializados.

APPLICATION

Análogo al scope application de los servlets

BUSINESS PROCESS

Abarca multiples conversaciones de múltiples usuarios. Este contexto se controla de manera declarativa mediante estados de inicio y fin en el fichero de definición del proceso de negocio.

UNSPECIFIED

Es una directiva que indica que el contexto debería ser implícito. Depende de las circunstancias, se le dice a seam para cualquier uso del contexto del componente actual o para ejecutar una búsqueda a través de todos los contextos de manera jerárquica.

CONTEXTOS POR DEFECTO DE LOS COMPONENTES








COMPONENTECONTEXTO
EJB Stateful Session BeanConversation
EJB Stateless Session BeanStateless
EJB Message Driven BeanStateless
JPA Entity BeanConversation
POJOEvent