ARCmop Java Programacion Solaris Linux

Java-linux-programacion

Solucion (Previa):Las curiosas excepciones de Webflow: SnapshotNotFoundException, FlowExecutionRestorationFailureException, NoSuchConversationException

Posted by Cmop en septiembre 8, 2011

Hola, a todos, bueno despues de estar alejado del blog, he decidido volver a colocar un entrada sobre algunas cosas interesantes acerca de webflow como son las excepciones: SnapshotNotFoundException, FlowExecutionRestorationFailureException, NoSuchConversationException.

Desde que empezamos el desarrollo del nuevo Sistema decidimos usar Webflow ya que nos agiliza muchisimo el manejo de las variables, asi como el control de en que vista se encuentra en cada momento el usuario y que tipo de accion realizo.

Después de meses de programacion estas excepciones estaban colmando la paciencia del equipo de desarrollo, asi que decidi buscar el porque de las excepciones y la solución.

SnapshotNotFoundException : “Thrown when a flow execution snapshot cannot be found This usually occurs when the client references a snapshot that has since been removed. “ –> Se produce cuando una “instantánea de ejecución” del flujo no se puede encontrar Esto generalmente ocurre cuando el cliente hace referencia a una instantánea que ha sido eliminada.
NoSuchConversationException:“Thrown when no logical conversation exists with the specified conversationId. This might occur if the conversation ended, expired, or was otherwise invalidated, but a client view still references it. “ –>Se produce cuando no existe conversación lógica con el “conversationId” especificado. Esto puede ocurrir si la conversación terminó, ha caducado, o de lo contrario es inválida, pero el cliente de la vista sigue siendo referenciandola.

FlowExecutionRestorationFailureException: “Thrown when the flow execution with the persistent identifier provided could not be restored” –>Se produce cuando el flujo de ejecución con el identificador persistente proporcionada no se pudieron restaurar.

Pues ahora hemos de saber que Webflow 2.3 cuenta con algunos numeritos por defecto como son:

max-executions = 5

max-execution-snapshots = 30

Estos son los valores por defecto y a mi parecer los responsables de dichas excepciones, veamos que dice la documentacion:

max-executions
Tune the max-executions attribute to place a cap on the number of flow executions that can be created per user session. When the maximum number of executions is exceeded, the oldest execution is removed. (Cuando el numero maximo de ejecuciones es excedido, la ejecucion mas antigua es removida)
The max-executions attribute is per user session, i.e. it works across instances of any flow definition.

max-execution-snapshots
Tune the max-execution-snapshots attribute to place a cap on the number of history snapshots that can be taken per flow execution. To disable snapshotting, set this value to 0. To enable an unlimited number of snapshots, set this value to -1.(Para desactivar la creacion de instantaneas asigne el valor 0, para permitir la creacion infinita de instantaneas asigne el valor -1)
History snapshots enable browser back button support. When snapshotting is disabled pressing the browser back button will not work. It will result in using an execution key that points to a snapshot that has not be recorded.

Recuerdan el mensaje:

“org.springframework.webflow.execution.repository.snapshot.SnapshotNotFoundException: No flow execution snapshot could be found with id ‘1’; perhaps the snapshot has been removed?

Parece que vamos viendo por donde va la cosa, pues la solución (al menos la aplicacion no presenta problemas con esas excepciones) ha sido modificar nuestro archivo de configuracion de webflow, en el flowexecutor:


<flow:flow-executor id="ejecutaFlujo" flow-registry="registraFlujo" >
 <flow:flow-execution-repository max-execution-snapshots="-1" max-executions="500" />
 </flow:flow-executor>

Con esto le decimos que la creacion de isntantáneas de ejecucion es infinita, y que tenemos un maximo de ejecucion de 500 por sesion, la aplicacion en entorno de desarrollo y de produccion ha dejado de dar los problemas de antes.

Pero, y los recursos del servidor?? mm este es un tema interesante, pero para ello existe: ExpiredFlowCleanupFilter, del cual hablaré en alguna otra entrada, pero basicamente su configuracion es en el web.xml de la siguiente forma:

<filter>
<filter-name>flowCleanup</filter-name>
<filter-class>org.springframework.webflow.execution.servlet.ExpiredFlowCleanupFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>flowCleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

Referencias:

  1. http://static.springsource.org/spring-webflow/docs/2.3.0.RELEASE/spring-webflow-reference/html/ch10s05.html
  2. http://static.springsource.org/spring-webflow/docs/pr5/api/org/springframework/webflow/execution/servlet/ExpiredFlowCleanupFilter.html
  3. http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.3.xsd

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: