En Seam podríamos definir una conversación como la unidad de trabajo desde el punto de vista del usuario.
La noción de Seam de conversación es el conjunto de tres ideas:
- La idea de workspace. Cada usuario de la aplicación debe tener su propio espacio de trabajo, sin interferir en la actividad del resto de usuarios.
- La idea de transacción. La mayoría de los frameworks están construidos siguiendo una arquitectura sin estado, incapaz de manejar correctamente los contextos de persistencia extendidos, dando lugar a fallos como la famosa LazyLoadException.
- La idea de tarea en un workflow.
Uniendo y respetando estos tres conceptos, obtenemos el modelo conversacional de Seam, que nos
permite construir aplicaciones eficientes más rápidamente.
Este modelo sigue las siguientes reglas para crear o destruir el contexto de conversación:
- Siempre hay una conversación activa durante la petición, el proceso de validación, la actualización de los modelos de datos, la invocación de la aplicación o la respuesta del ciclo de vida de JSF.
- Con cada petición JSF, Seam intenta restaurar una ”conversación larga” (longrunning conversation) que existiese previamente. Si no la encuentra crea una conversación nueva.
- Cuando se encuentra una anotación @Begin en un método que se ejecute, la conversación activa se promociona a conversación larga.
- Cuando se encuentra una anotación @End en un método que se ejecute, cualquier conversación larga se degrada a conversación normal.
- Tras cada respuesta JSF, Seam almacena los contenidos de la conversación larga si existe, y si no destruye el contenido de la conversación normal.
- Cualquier petición JSF propaga el contexto de conversación, y por defecto las peticiones normales no lo propagan.
- Si una petición JSF es re-dirigida, Seam almacena y restaura posteriormente la conversación para preservar su contenido.
0 comentarios