org.springframework.webflow.execution.repository.impl
Class DefaultFlowExecutionRepository

java.lang.Object
  extended by org.springframework.webflow.execution.repository.support.AbstractFlowExecutionRepository
      extended by org.springframework.webflow.execution.repository.snapshot.AbstractSnapshottingFlowExecutionRepository
          extended by org.springframework.webflow.execution.repository.impl.DefaultFlowExecutionRepository
All Implemented Interfaces:
FlowExecutionKeyFactory, FlowExecutionRepository

public class DefaultFlowExecutionRepository
extends AbstractSnapshottingFlowExecutionRepository

The default flow execution repository implementation. Takes one to max flow execution snapshots, where each snapshot represents a copy of a FlowExecution taken at a point in time.

The set of active flow executions are managed by a ConversationManager implementation, which this repository delegates to.

This repository is responsible for:

This repository implementation also provides support for execution invalidation after completion, where once a logical flow execution completes, it and all of its snapshots are removed. This cleans up memory and prevents the possibility of duplicate submission after completion.

Author:
Keith Donald

Constructor Summary
DefaultFlowExecutionRepository(ConversationManager conversationManager, FlowExecutionSnapshotFactory snapshotFactory)
          Create a new default flow execution repository using the given state restorer, conversation manager, and snapshot factory.
 
Method Summary
 FlowExecution getFlowExecution(FlowExecutionKey key)
          Return the FlowExecution indexed by the provided key.
 int getMaxSnapshots()
          Returns the max number of snapshots allowed per flow execution by this repository.
 void putFlowExecution(FlowExecution flowExecution)
          Place the FlowExecution in this repository under the provided key.
 void removeAllFlowExecutionSnapshots(FlowExecution execution)
          Remove all snapshots associated with the flow execution from storage, invalidating all history.
 void removeFlowExecutionSnapshot(FlowExecution execution)
          Remove the snapshot that was used to restore this flow execution, discarding it for future use.
 void setMaxSnapshots(int maxSnapshots)
          Sets the maximum number of snapshots allowed per flow execution by this repository.
 void updateFlowExecutionSnapshot(FlowExecution execution)
          Capture the current state of the flow execution by updating its snapshot in storage.
 
Methods inherited from class org.springframework.webflow.execution.repository.snapshot.AbstractSnapshottingFlowExecutionRepository
getSnapshotFactory
 
Methods inherited from class org.springframework.webflow.execution.repository.support.AbstractFlowExecutionRepository
getAlwaysGenerateNewNextKey, getConversationManager, getKey, getLock, parseFlowExecutionKey, removeFlowExecution, setAlwaysGenerateNewNextKey
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DefaultFlowExecutionRepository

public DefaultFlowExecutionRepository(ConversationManager conversationManager,
                                      FlowExecutionSnapshotFactory snapshotFactory)
Create a new default flow execution repository using the given state restorer, conversation manager, and snapshot factory.

Parameters:
conversationManager - the conversation manager to use
snapshotFactory - the flow execution snapshot factory to use
Method Detail

getMaxSnapshots

public int getMaxSnapshots()
Returns the max number of snapshots allowed per flow execution by this repository.


setMaxSnapshots

public void setMaxSnapshots(int maxSnapshots)
Sets the maximum number of snapshots allowed per flow execution by this repository. Use -1 for unlimited. The default is 30.


getFlowExecution

public FlowExecution getFlowExecution(FlowExecutionKey key)
Description copied from interface: FlowExecutionRepository
Return the FlowExecution indexed by the provided key. The returned flow execution represents the restored state of an executing flow from a point in time. This should be called to resume a persistent flow execution. Before calling this method, you should acquire the lock for the keyed flow execution.

Specified by:
getFlowExecution in interface FlowExecutionRepository
Specified by:
getFlowExecution in class AbstractFlowExecutionRepository
Parameters:
key - the flow execution key
Returns:
the flow execution, fully hydrated and ready to resume

putFlowExecution

public void putFlowExecution(FlowExecution flowExecution)
Description copied from interface: FlowExecutionRepository
Place the FlowExecution in this repository under the provided key. This should be called to save or update the persistent state of an active (but paused) flow execution. Before calling this method, you should acquire the lock for the keyed flow execution.

Specified by:
putFlowExecution in interface FlowExecutionRepository
Specified by:
putFlowExecution in class AbstractFlowExecutionRepository
Parameters:
flowExecution - the flow execution

updateFlowExecutionSnapshot

public void updateFlowExecutionSnapshot(FlowExecution execution)
Description copied from interface: FlowExecutionKeyFactory
Capture the current state of the flow execution by updating its snapshot in storage. Does nothing if the no key has been assigned or no snapshot has already been taken.

Parameters:
execution - the flow execution

removeFlowExecutionSnapshot

public void removeFlowExecutionSnapshot(FlowExecution execution)
Description copied from interface: FlowExecutionKeyFactory
Remove the snapshot that was used to restore this flow execution, discarding it for future use. Does nothing if the no key been assigned or no snapshot has been taken.

Parameters:
execution - the flow execution

removeAllFlowExecutionSnapshots

public void removeAllFlowExecutionSnapshots(FlowExecution execution)
Description copied from interface: FlowExecutionKeyFactory
Remove all snapshots associated with the flow execution from storage, invalidating all history. Does nothing if no key has been assigned or no snapshots have been taken.

Parameters:
execution - the flow execution