public class JpaFlowExecutionListener extends java.lang.Object implements FlowExecutionListener
FlowExecutionListener that implements the Flow Managed Persistence Context (FMPC) pattern using the
standard Java Persistence API (JPA).
This implementation uses standard JPA APIs. The general pattern is as follows:
PERSISTENCE_CONTEXT_ATTRIBUTE.
Note: All data access except for the final commit will, by default, be non-transactional. However, a flow may call into a transactional service layer to fetch objects during the conversation in the context of a read-only system transaction if the underlying JPA Transaction Manager supports this. Spring's JPA TransactionManager does support this when working with a Hibernate JPA provider, for example. In that case, Spring will handle setting the FlushMode to MANUAL to ensure any in-progress changes to managed persistent entities are not flushed, while reads of new objects occur transactionally.
Care should be taken to prevent premature commits of flow data while the flow is in progress. You would generally not want intermediate flushing to happen, as the nature of a flow implies a transient, isolated resource that can be canceled before it ends. Generally, the only time a read-write transaction should be started is upon successful completion of the flow, triggered by reaching a 'commit' end state.
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
PERSISTENCE_CONTEXT_ATTRIBUTE
The name of the attribute the flow
persistence context is indexed under.d |
| Constructor and Description |
|---|
JpaFlowExecutionListener(javax.persistence.EntityManagerFactory entityManagerFactory,
org.springframework.transaction.PlatformTransactionManager transactionManager)
Create a new JPA flow execution listener using given JPA Entity Manager factory.
|
| Modifier and Type | Method and Description |
|---|---|
void |
exceptionThrown(RequestContext context,
FlowExecutionException exception)
Called when an exception is thrown during a flow execution, before the exception is handled by any registered
handler. |
void |
paused(RequestContext context)
Called when a flow execution is paused, for instance when it is waiting for user input (after event processing).
|
void |
resuming(RequestContext context)
Called after a flow execution is successfully reactivated after pause (but before event processing).
|
void |
sessionEnded(RequestContext context,
FlowSession session,
java.lang.String outcome,
AttributeMap<?> output)
Called when a flow execution session ends.
|
void |
sessionEnding(RequestContext context,
FlowSession session,
java.lang.String outcome,
MutableAttributeMap<?> output)
Called when the active flow execution session has been asked to end but before it has ended.
|
void |
sessionStarting(RequestContext context,
FlowSession session,
MutableAttributeMap<?> input)
Called after a new flow session has been created but before it starts.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waiteventSignaled, requestProcessed, requestSubmitted, sessionCreating, sessionStarted, stateEntered, stateEntering, transitionExecuting, viewRendered, viewRenderingpublic static final java.lang.String PERSISTENCE_CONTEXT_ATTRIBUTE
persistence context is indexed under.dpublic JpaFlowExecutionListener(javax.persistence.EntityManagerFactory entityManagerFactory,
org.springframework.transaction.PlatformTransactionManager transactionManager)
entityManagerFactory - the entity manager factory to usepublic void sessionStarting(RequestContext context, FlowSession session, MutableAttributeMap<?> input)
FlowExecutionListenersessionStarting in interface FlowExecutionListenercontext - the current flow request contextsession - the session that was createdinput - a mutable input map - attributes placed in this map are eligible for input mapping by the flow
definition at startuppublic void paused(RequestContext context)
FlowExecutionListenerpaused in interface FlowExecutionListenercontext - the current flow request contextpublic void resuming(RequestContext context)
FlowExecutionListenerresuming in interface FlowExecutionListenercontext - the current flow request contextpublic void sessionEnding(RequestContext context, FlowSession session, java.lang.String outcome, MutableAttributeMap<?> output)
FlowExecutionListenersessionEnding in interface FlowExecutionListenercontext - the current flow request contextsession - the current active session that is endingoutcome - the outcome reached by the ending session, generally the id of the terminating end-stateoutput - the flow output produced by the ending session, this map may be modified by this listener to affect
the output returnedpublic void sessionEnded(RequestContext context, FlowSession session, java.lang.String outcome, AttributeMap<?> output)
FlowExecutionListenersessionEnded in interface FlowExecutionListenercontext - the current flow request contextsession - ending flow sessionoutcome - the outcome reached by the ended session, generally the id of the terminating end-stateoutput - the flow output returned by the ending sessionpublic void exceptionThrown(RequestContext context, FlowExecutionException exception)
FlowExecutionListenerhandler.exceptionThrown in interface FlowExecutionListenercontext - the current flow request contextexception - the exception that occurred