Cuándo se crean y destruyen las conversaciones
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ó 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 de más ráidamente.
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 anotacion @Begin en un méodo que se ejecute, la conversación activa se promociona a conversación larga.
- Cuando se encuentra una anotacion @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 redirigida, Seam almacena y restaura posteriormente la conversación para preservar su contenido.





Jose Said,
June 23, 2008 @ 4:07 am
Hola tes, muy interesante el post. Te hago una consulta, dentro de una conversación estoy utilizando un page flow, el problema es que cuando el usuario quiere salirse de ese page flow clickeando en algun link que no esta en el page flow me tira IllegalNavigation, hay alguna manera de manejar esto y poder cerrar la conversacion y redigir al usuario?
Gracias! Saludos!
tes Said,
June 24, 2008 @ 12:11 am
La excepción te la tira porque el pageflow es un ’sistema cerrado’. Digamos que en cuanto entras ya no puedes salir de él hasta que lo termines.
Si el jPDL detecta que intentas ir a una página no definida en el flujo, lanza la IllegalNavigation Exception.
Para finalizar el page flow, puedes cerrar la conversacion. Prueba con un metodo con la anotacion @End, o la etiqueta en el fichero de navegacion.
Si no, tambien puedes probar a capturar la IllegalNavigation Exception en el fichero pages.xml. Creo que con eso y el componente #{redirect} (org.jboss.seam.faces.Redirect) podrás encontrar una solución.