Class PvmExecutionImpl
- All Implemented Interfaces:
Serializable
,BaseDelegateExecution
,BpmnModelExecutionContext
,DelegateExecution
,ProcessEngineServicesAware
,VariableScope
,VariableEventDispatcher
,ActivityExecution
,PvmExecution
,PvmProcessInstance
- Direct Known Subclasses:
ExecutionEntity
,ExecutionImpl
- Author:
- Daniel Meyer, Roman Smirnov, Sebastian Menski
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected ActivityImpl
current activityprotected boolean
protected String
the unique id of the current activity instanceprotected int
marks the current activity instanceprotected String
the id of a case associated with this executionprotected List<DelayedVariableEvent>
Contains the delayed variable events, which will be dispatched on a save point.protected String
protected boolean
protected boolean
protected boolean
protected boolean
indicates if this execution represents an active path of execution.protected boolean
protected boolean
protected boolean
protected boolean
protected boolean
protected boolean
true for process instances in the initial phase.protected PvmActivity
the activity which is to be started nextprotected boolean
transient; used for process instance modification to preserve a scope from getting deletedprotected ProcessDefinitionImpl
protected PvmExecutionImpl
protected ScopeInstantiationContext
protected long
protected TransitionImpl
the transition that is currently being takenprotected List<PvmTransition>
A list of outgoing transitions from the current activity that are going to be takenFields inherited from class org.camunda.bpm.engine.impl.core.instance.CoreExecution
businessKey, businessKeyWithoutCascade, eventName, eventSource, id, listenerIndex, skipCustomListeners, skipIoMapping, skipSubprocesses, tenantId
Fields inherited from class org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope
cachedElContext
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
void
void
void
void
Cleares the current delayed variable events.void
clearScope
(String reason, boolean skipCustomListeners, boolean skipIoMappings, boolean externallyTerminated) protected void
collectActiveActivityIds
(List<String> activeActivityIds) protected void
collectExecutions
(String activityId, List<PvmExecution> executions) protected void
continueExecutionIfNotCanceled
(Callback<PvmExecutionImpl, Void> continuation, PvmExecutionImpl execution) void
continueIfExecutionDoesNotAffectNextOperation
(Callback<PvmExecutionImpl, Void> dispatching, Callback<PvmExecutionImpl, Void> continuation, PvmExecutionImpl execution) Executes the given depending operations with the given execution.Returns a mapping from scope activities to scope executions for all scopes that are ancestors of the activity currently executed by this execution.createActivityExecutionMapping
(ScopeImpl currentScope) protected Map<ScopeImpl,
PvmExecutionImpl> createActivityExecutionMapping
(ScopeImpl currentScope, Map<ScopeImpl, PvmExecutionImpl> mapping) Creates an extended mapping based on this execution and the given existing mapping.abstract PvmExecutionImpl
creates a new execution.createIncident
(String incidentType, String configuration) Returns the newest incident in this executioncreateIncident
(String incidentType, String configuration, String message) Create an incident associated with this executionprotected IncidentContext
createIncidentContext
(String configuration) abstract CmmnExecution
createSubCaseInstance
(CmmnCaseDefinition caseDefinition) Creates a new sub case instance.abstract CmmnExecution
createSubCaseInstance
(CmmnCaseDefinition caseDefinition, String businessKey) Creates a new sub case instance.createSubProcessInstance
(PvmProcessDefinition processDefinition) creates a new sub process instance.createSubProcessInstance
(PvmProcessDefinition processDefinition, String businessKey) createSubProcessInstance
(PvmProcessDefinition processDefinition, String businessKey, String caseInstanceId) void
delayEvent
(DelayedVariableEvent delayedVariableEvent) Delays and stores the given DelayedVariableEvent on the process instance.void
delayEvent
(PvmExecutionImpl targetScope, VariableEvent variableEvent) Delays a given variable event with the given target scope.void
deleteCascade
(String deleteReason) void
deleteCascade
(String deleteReason, boolean skipCustomListeners, boolean skipIoMappings) void
deleteCascade
(String deleteReason, boolean skipCustomListeners, boolean skipIoMappings, boolean externallyTerminated, boolean skipSubprocesses) void
destroy()
void
destroy
(boolean alwaysSkipIoMappings) void
dispatchDelayedEventsAndPerformOperation
(Callback<PvmExecutionImpl, Void> continuation) Dispatches the current delayed variable events and performs the given atomic operation if the current state was not changed.void
dispatchDelayedEventsAndPerformOperation
(PvmAtomicOperation atomicOperation) Dispatches the current delayed variable events and performs the given atomic operation if the current state was not changed.protected void
dispatchScopeEvents
(PvmExecutionImpl execution) Dispatches the current delayed variable events on the scope of the given execution.void
void
end
(boolean completeScope) Ends an execution.void
Execution finished compensation.void
invoked to notify the execution that a new activity instance is startedvoid
executeActivities
(List<PvmActivity> activityStack, PvmActivity targetActivity, PvmTransition targetTransition, Map<String, Object> variables, Map<String, Object> localVariables, boolean skipCustomListeners, boolean skipIoMappings) Instantiates the given activity stack.void
executeActivitiesConcurrent
(List<PvmActivity> activityStack, PvmActivity targetActivity, PvmTransition targetTransition, Map<String, Object> variables, Map<String, Object> localVariables, boolean skipCustomListeners, boolean skipIoMappings) Instantiates the given activity stack under this execution.void
executeActivity
(PvmActivity activity) Execute an activity which is not contained in normal flow (having no incoming sequence flows).void
executeEventHandlerActivity
(ActivityImpl eventHandlerActivity) void
findExecution
(String activityId) protected PvmExecutionImpl
findExecutionForFlowScope
(String targetScopeId) findExecutionForFlowScope
(PvmScope targetFlowScope) For a given target flow scope, this method returns the corresponding scope execution.findExecutionForScope
(ScopeImpl currentScope, ScopeImpl targetScope) findExecutions
(String activityId) findInactiveChildExecutions
(PvmActivity activity) findInactiveConcurrentExecutions
(PvmActivity activity) Retrieves all executions which are concurrent and inactive at the given activity.findIncidentHandler
(String incidentType) abstract void
protected abstract String
generateActivityInstanceId
(String activityId) ensures initialization and returns the activityreturn the Id of the activity instance currently executed by this executionint
protected List<PvmExecutionImpl>
The business key for the root execution (e.g.Gets the id of the current activity.Gets the name of the current activity.return the Id of the current transitionThe current delayed variable events.List<? extends PvmExecutionImpl>
abstract List<? extends PvmExecutionImpl>
returns the list of execution of which this execution the parent of.abstract List<? extends PvmExecutionImpl>
protected ScopeImpl
protected PvmExecutionImpl
An activity which is to be started next.List<? extends PvmExecutionImpl>
returns child executions that are not event scope executions.abstract PvmExecutionImpl
ensures initialization and returns the parentreturn the Id of the parent activity instance currently executed by this executionGets the id of the parent of this execution.getParentScopeExecution
(boolean considerSuperExecution) The business key for the process instance this execution is associated with.abstract PvmExecutionImpl
ensures initialization and returns the process instance.abstract PvmExecutionImpl
Returns an execution that has replaced this execution for executing activities in their shared scope.protected ScopeImpl
long
abstract CmmnExecution
abstract PvmExecutionImpl
abstract CmmnExecution
abstract PvmExecutionImpl
In case this delegate execution is the process instance execution and this process instance was started by a call activity, this method returns the execution which executed the call activity in the super process instance.protected String
boolean
boolean
boolean
void
Inactivates this execution.void
protected void
initActivityIds
(List<DelayedVariableEvent> delayedEvents, Map<PvmExecutionImpl, String> activityInstanceIds, Map<PvmExecutionImpl, String> activityIds) Initializes the given maps with the target scopes and current activity id's and activity instance id's.abstract void
abstract void
instantiateScopes
(List<PvmActivity> activityStack, boolean skipCustomListeners, boolean skipIoMappings) Instantiates the given set of activities and returns the execution for the bottom-most activityvoid
Interrupts an executionvoid
interrupt
(String reason, boolean skipCustomListeners, boolean skipIoMappings, boolean externallyTerminated) boolean
isActive()
returns whether this execution is currently active.boolean
boolean
This case is special, because the execution tree is different if an async after activity is left via transition (case 1) or not (case 2).boolean
Returns whether this execution has been canceled.boolean
Returns whether this execution completed the parent scope.boolean
returns whether this execution is concurrent or not.boolean
boolean
isEnded()
returns whether this execution has ended or not.boolean
boolean
boolean
boolean
boolean
isInState
(ActivityInstanceState state) boolean
boolean
returns whether this execution is a process instance or not.boolean
boolean
boolean
boolean
isScope()
Returns whether this execution is a scope.boolean
void
invoked to notify the execution that an activity instance is ended.void
leaveActivityViaTransition
(PvmTransition outgoingTransition) void
leaveActivityViaTransitions
(List<PvmTransition> _transitions, List<? extends ActivityExecution> _recyclableExecutions) Takes the given outgoing transitions, and potentially reusing the given list of executions that were previously joined.protected abstract PvmExecutionImpl
void
onConcurrentExpand
(PvmExecutionImpl scopeExecution) Callback on tree expansion when this execution is used as the concurrent execution where the argument's children become a subordinate to.void
Precondition: execution is already ended but this has not been propagated yet.void
remove()
void
protected void
protected abstract void
void
replace
(PvmExecutionImpl execution) Replace an execution by this execution.void
resolveIncident
(String incidentId) Resolves an incident with given id.Instead ofgetReplacedBy()
, which returns the execution that this execution was directly replaced with, this resolves the chain of replacements (i.e.void
setActive
(boolean isActive) makes this execution active or inactive.void
setActivity
(PvmActivity activity) void
setActivityInstanceId
(String activityInstanceId) void
setCanceled
(boolean canceled) void
setCaseInstanceId
(String caseInstanceId) void
setCompleteScope
(boolean completeScope) void
setConcurrent
(boolean isConcurrent) changes the concurrent indicator on this execution.void
setDeleteReason
(String deleteReason) void
setDeleteRoot
(boolean deleteRoot) void
setEnded
(boolean isEnded) void
setEventScope
(boolean isEventScope) void
setExternallyTerminated
(boolean externallyTerminated) void
setIgnoreAsync
(boolean ignoreAsync) void
setNextActivity
(PvmActivity nextActivity) void
setParent
(PvmExecutionImpl parent) Sets the execution's parent and updates the old and new parents' set of child executionsabstract void
setParentExecution
(PvmExecutionImpl parent) Use #setParent to also update the child execution setsvoid
setPreserveScope
(boolean preserveScope) void
setProcessBusinessKey
(String businessKey) Configure a business key on the process instance this execution is associated with.void
setProcessDefinition
(ProcessDefinitionImpl processDefinition) abstract void
setProcessInstance
(PvmExecutionImpl pvmExecutionImpl) void
setProcessInstanceStarting
(boolean starting) void
setScope
(boolean isScope) Changes whether this execution is a scope or notvoid
setSequenceCounter
(long sequenceCounter) void
setStartContext
(ScopeInstantiationContext startContext) void
setStarting
(boolean isStarting) abstract void
setSubCaseInstance
(CmmnExecution subCaseInstance) abstract void
setSubProcessInstance
(PvmExecutionImpl subProcessInstance) abstract void
setSuperCaseExecution
(CmmnExecution superCaseExecution) abstract void
setSuperExecution
(PvmExecutionImpl superExecution) void
setTransition
(PvmTransition transition) void
setTransitionsToTake
(List<PvmTransition> transitionsToTake) void
setVariable
(String variableName, Object value, String targetActivityId) Method to store variable in a specific scope identified by activity ID.void
void
start()
void
protected void
start
(Map<String, Object> variables, VariableMap formProperties) void
startWithFormProperties
(VariableMap formProperties) void
startWithoutExecuting
(Map<String, Object> variables) perform starting behavior but don't execute the initial activityvoid
take()
toString()
boolean
Methods inherited from class org.camunda.bpm.engine.impl.core.instance.CoreExecution
getBusinessKeyWithoutCascade, getEventName, getEventSource, getId, getListenerIndex, getTenantId, invokeListener, isSkipCustomListeners, isSkipIoMappings, isSkipSubprocesses, performOperation, performOperationSync, setBusinessKey, setEventName, setEventSource, setId, setListenerIndex, setSkipCustomListeners, setSkipIoMappings, setSkipSubprocesseses, setTenantId
Methods inherited from class org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope
collectVariableNames, collectVariables, dispatchEvent, getCachedElContext, getSourceActivityVariableScope, getValueFromVariableInstance, getVariable, getVariable, getVariableInstance, getVariableInstanceFactory, getVariableInstanceLifecycleListeners, getVariableInstanceLocal, getVariableInstancesLocal, getVariableInstancesLocal, getVariableLocal, getVariableLocal, getVariableLocalTyped, getVariableLocalTyped, getVariableNames, getVariableNamesLocal, getVariables, getVariablesLocal, getVariablesLocalTyped, getVariablesLocalTyped, getVariableStore, getVariablesTyped, getVariablesTyped, getVariableTyped, getVariableTyped, hasVariable, hasVariableLocal, hasVariables, hasVariablesLocal, initializeVariableStore, invokeVariableLifecycleListenersCreate, invokeVariableLifecycleListenersCreate, invokeVariableLifecycleListenersDelete, invokeVariableLifecycleListenersDelete, invokeVariableLifecycleListenersUpdate, invokeVariableLifecycleListenersUpdate, removeVariable, removeVariable, removeVariableLocal, removeVariableLocal, removeVariables, removeVariables, removeVariablesLocal, removeVariablesLocal, setCachedElContext, setVariable, setVariable, setVariable, setVariable, setVariableLocal, setVariableLocal, setVariableLocal, setVariables, setVariables, setVariablesLocal, setVariablesLocal
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.camunda.bpm.engine.impl.pvm.delegate.ActivityExecution
forceUpdate
Methods inherited from interface org.camunda.bpm.engine.delegate.BaseDelegateExecution
getEventName, getId
Methods inherited from interface org.camunda.bpm.engine.delegate.BpmnModelExecutionContext
getBpmnModelElementInstance, getBpmnModelInstance
Methods inherited from interface org.camunda.bpm.engine.delegate.DelegateExecution
getProcessDefinitionId, getProcessInstanceId, getTenantId
Methods inherited from interface org.camunda.bpm.engine.delegate.ProcessEngineServicesAware
getProcessEngine, getProcessEngineServices
Methods inherited from interface org.camunda.bpm.engine.impl.pvm.PvmExecution
getVariable, getVariables, hasVariable, setVariable
Methods inherited from interface org.camunda.bpm.engine.delegate.VariableScope
getVariable, getVariableLocal, getVariableLocalTyped, getVariableLocalTyped, getVariableNames, getVariableNamesLocal, getVariables, getVariablesLocal, getVariablesLocalTyped, getVariablesLocalTyped, getVariablesTyped, getVariablesTyped, getVariableTyped, getVariableTyped, hasVariable, hasVariableLocal, hasVariables, hasVariablesLocal, removeVariable, removeVariableLocal, removeVariables, removeVariables, removeVariablesLocal, removeVariablesLocal, setVariable, setVariableLocal, setVariables, setVariablesLocal
-
Field Details
-
processDefinition
-
scopeInstantiationContext
-
ignoreAsync
protected transient boolean ignoreAsync -
isStarting
protected transient boolean isStartingtrue for process instances in the initial phase. Currently this controls that historic variable updates created during this phase receive theinitial
flag (seeHistoricVariableUpdateEventEntity#isInitial
). -
activity
current activity -
nextActivity
the activity which is to be started next -
transition
the transition that is currently being taken -
transitionsToTake
A list of outgoing transitions from the current activity that are going to be taken -
activityInstanceId
the unique id of the current activity instance -
caseInstanceId
the id of a case associated with this execution -
replacedBy
-
deleteRoot
protected boolean deleteRoot -
deleteReason
-
externallyTerminated
protected boolean externallyTerminated -
isActive
protected boolean isActiveindicates if this execution represents an active path of execution. Executions are made inactive in the following situations:- an execution enters a nested scope
- an execution is split up into multiple concurrent executions, then the parent is made inactive.
- an execution has arrived in a parallel gateway or join and that join has not yet activated/fired.
- an execution is ended.
-
isScope
protected boolean isScope -
isConcurrent
protected boolean isConcurrent -
isEnded
protected boolean isEnded -
isEventScope
protected boolean isEventScope -
isRemoved
protected boolean isRemoved -
preserveScope
protected boolean preserveScopetransient; used for process instance modification to preserve a scope from getting deleted -
activityInstanceState
protected int activityInstanceStatemarks the current activity instance -
activityInstanceEndListenersFailed
protected boolean activityInstanceEndListenersFailed -
sequenceCounter
protected long sequenceCounter -
delayedEvents
Contains the delayed variable events, which will be dispatched on a save point.
-
-
Constructor Details
-
PvmExecutionImpl
public PvmExecutionImpl()
-
-
Method Details
-
createExecution
creates a new execution. properties processDefinition, processInstance and activity will be initialized.- Specified by:
createExecution
in interfaceActivityExecution
-
createSubProcessInstance
Description copied from interface:ActivityExecution
creates a new sub process instance. The current execution will be the super execution of the created execution.- Specified by:
createSubProcessInstance
in interfaceActivityExecution
- Parameters:
processDefinition
- ThePvmProcessDefinition
of the subprocess.
-
createSubProcessInstance
public PvmExecutionImpl createSubProcessInstance(PvmProcessDefinition processDefinition, String businessKey) - Specified by:
createSubProcessInstance
in interfaceActivityExecution
- Parameters:
processDefinition
- ThePvmProcessDefinition
of the subprocess.businessKey
- the business key of the process instance- See Also:
-
createSubProcessInstance
public PvmExecutionImpl createSubProcessInstance(PvmProcessDefinition processDefinition, String businessKey, String caseInstanceId) - Specified by:
createSubProcessInstance
in interfaceActivityExecution
- Parameters:
processDefinition
- ThePvmProcessDefinition
of the subprocess.businessKey
- the business key of the process instancecaseInstanceId
- the case instance id of the process instance- See Also:
-
newExecution
-
createSubCaseInstance
Description copied from interface:ActivityExecution
Creates a new sub case instance.
This
execution will be the super execution of the created sub case instance.- Specified by:
createSubCaseInstance
in interfaceActivityExecution
- Parameters:
caseDefinition
- TheCmmnCaseDefinition
of the sub case instance.
-
createSubCaseInstance
public abstract CmmnExecution createSubCaseInstance(CmmnCaseDefinition caseDefinition, String businessKey) Description copied from interface:ActivityExecution
Creates a new sub case instance.
This
execution will be the super execution of the created sub case instance.- Specified by:
createSubCaseInstance
in interfaceActivityExecution
- Parameters:
caseDefinition
- TheCmmnCaseDefinition
of the sub case instance.businessKey
- The businessKey to be set on sub case instance.
-
initialize
public abstract void initialize() -
initializeTimerDeclarations
public abstract void initializeTimerDeclarations() -
executeIoMapping
public void executeIoMapping() -
start
public void start()- Specified by:
start
in interfacePvmProcessInstance
-
start
- Specified by:
start
in interfacePvmProcessInstance
-
startWithFormProperties
-
start
-
startWithoutExecuting
perform starting behavior but don't execute the initial activity- Parameters:
variables
- the variables which are used for the start
-
fireHistoricProcessStartEvent
public abstract void fireHistoricProcessStartEvent() -
destroy
public void destroy()- Specified by:
destroy
in interfaceActivityExecution
-
destroy
public void destroy(boolean alwaysSkipIoMappings) - Parameters:
alwaysSkipIoMappings
- set to true to always skip IO mappings, regardless of internal state of execution (=>CoreExecution.isSkipIoMappings()
)
-
removeAllTasks
public void removeAllTasks() -
removeEventScopes
protected void removeEventScopes() -
clearScope
public void clearScope(String reason, boolean skipCustomListeners, boolean skipIoMappings, boolean externallyTerminated) -
interrupt
Interrupts an execution- Specified by:
interrupt
in interfaceActivityExecution
-
interrupt
public void interrupt(String reason, boolean skipCustomListeners, boolean skipIoMappings, boolean externallyTerminated) -
end
public void end(boolean completeScope) Ends an execution. Invokes end listeners for the current activity and notifies the flow scope execution of this happening which may result in the flow scope ending.- Specified by:
end
in interfaceActivityExecution
- Parameters:
completeScope
- true if ending the execution contributes to completing the BPMN 2.0 scope
-
endCompensation
public void endCompensation()Description copied from interface:ActivityExecution
Execution finished compensation. Removes this execution and notifies listeners.- Specified by:
endCompensation
in interfaceActivityExecution
-
propagateEnd
public void propagateEnd()Precondition: execution is already ended but this has not been propagated yet.
Propagates the ending of this execution to the flowscope execution; currently only supports the process instance execution
-
remove
public void remove()- Specified by:
remove
in interfaceActivityExecution
-
isRemoved
public boolean isRemoved() -
createConcurrentExecution
-
tryPruneLastConcurrentChild
public boolean tryPruneLastConcurrentChild()- Specified by:
tryPruneLastConcurrentChild
in interfaceActivityExecution
-
deleteCascade
- Specified by:
deleteCascade
in interfacePvmProcessInstance
-
deleteCascade
-
deleteCascade
public void deleteCascade(String deleteReason, boolean skipCustomListeners, boolean skipIoMappings, boolean externallyTerminated, boolean skipSubprocesses) -
executeEventHandlerActivity
-
getReplacedBy
Returns an execution that has replaced this execution for executing activities in their shared scope.
Invariant: this execution and getReplacedBy() execute in the same scope.
-
resolveReplacedBy
Instead ofgetReplacedBy()
, which returns the execution that this execution was directly replaced with, this resolves the chain of replacements (i.e. in the case the replacedBy execution itself was replaced again) -
hasReplacedParent
public boolean hasReplacedParent() -
isReplacedByParent
public boolean isReplacedByParent() -
replace
Replace an execution by this execution. The replaced execution has a pointer (
getReplacedBy()
) to this execution. This pointer is maintained until the replaced execution is removed or this execution is removed/ended.This is used for two cases: Execution tree expansion and execution tree compaction
- expansion: Before:
------- | e1 | scope -------
After:------- | e1 | scope ------- | ------- | e2 | cc (no scope) -------
e2 replaces e1: it should receive all entities associated with the activity currently executed by e1; these are tasks, (local) variables, jobs (specific for the activity, not the scope) - compaction: Before:
------- | e1 | scope ------- | ------- | e2 | cc (no scope) -------
After:------- | e1 | scope -------
e1 replaces e2: it should receive all entities associated with the activity currently executed by e2; these are tasks, (all) variables, all jobs
- expansion: Before:
-
onConcurrentExpand
Callback on tree expansion when this execution is used as the concurrent execution where the argument's children become a subordinate to. Note that this case is not the inverse of replace because replace has the semantics that the replacing execution can be used to continue execution of this execution's activity instance. -
signal
- Specified by:
signal
in interfaceActivityExecution
- Specified by:
signal
in interfacePvmExecution
-
take
public void take() -
executeActivity
Execute an activity which is not contained in normal flow (having no incoming sequence flows). Cannot be called for activities contained in normal flow.First, the ActivityStartBehavior is evaluated. In case the start behavior is not
ActivityStartBehavior.DEFAULT
, the corresponding start behavior is executed before executing the activity.For a given activity, the execution on which this method must be called depends on the type of the start behavior:
- CONCURRENT_IN_FLOW_SCOPE: scope execution for
PvmScope.getFlowScope()
- INTERRUPT_EVENT_SCOPE: scope execution for
PvmScope.getEventScope()
- CANCEL_EVENT_SCOPE: scope execution for
PvmScope.getEventScope()
- Specified by:
executeActivity
in interfaceActivityExecution
- Parameters:
activity
- the activity to start
- CONCURRENT_IN_FLOW_SCOPE: scope execution for
-
executeActivitiesConcurrent
public void executeActivitiesConcurrent(List<PvmActivity> activityStack, PvmActivity targetActivity, PvmTransition targetTransition, Map<String, Object> variables, Map<String, Object> localVariables, boolean skipCustomListeners, boolean skipIoMappings) Instantiates the given activity stack under this execution. Sets the variables for the execution responsible to execute the most deeply nested activity.- Parameters:
activityStack
- The most deeply nested activity is the last element in the list
-
instantiateScopes
public Map<PvmActivity,PvmExecutionImpl> instantiateScopes(List<PvmActivity> activityStack, boolean skipCustomListeners, boolean skipIoMappings) Instantiates the given set of activities and returns the execution for the bottom-most activity -
executeActivities
public void executeActivities(List<PvmActivity> activityStack, PvmActivity targetActivity, PvmTransition targetTransition, Map<String, Object> variables, Map<String, Object> localVariables, boolean skipCustomListeners, boolean skipIoMappings) Instantiates the given activity stack. Uses this execution to execute the highest activity in the stack. Sets the variables for the execution responsible to execute the most deeply nested activity.- Parameters:
activityStack
- The most deeply nested activity is the last element in the list
-
findInactiveConcurrentExecutions
Description copied from interface:ActivityExecution
Retrieves all executions which are concurrent and inactive at the given activity.- Specified by:
findInactiveConcurrentExecutions
in interfaceActivityExecution
-
findInactiveChildExecutions
- Specified by:
findInactiveChildExecutions
in interfaceActivityExecution
-
getAllChildExecutions
-
leaveActivityViaTransition
- Specified by:
leaveActivityViaTransition
in interfaceActivityExecution
-
leaveActivityViaTransitions
public void leaveActivityViaTransitions(List<PvmTransition> _transitions, List<? extends ActivityExecution> _recyclableExecutions) Description copied from interface:ActivityExecution
Takes the given outgoing transitions, and potentially reusing the given list of executions that were previously joined.- Specified by:
leaveActivityViaTransitions
in interfaceActivityExecution
-
removeVariablesLocalInternal
protected abstract void removeVariablesLocalInternal() -
isActive
-
inactivate
public void inactivate()Description copied from interface:ActivityExecution
Inactivates this execution. This is useful for example in a join: the execution still exists, but it is not longer active.- Specified by:
inactivate
in interfaceActivityExecution
-
getExecutions
Description copied from interface:ActivityExecution
returns the list of execution of which this execution the parent of. This is a copy of the actual list, so a modification has no direct effect.- Specified by:
getExecutions
in interfaceActivityExecution
-
getExecutionsAsCopy
-
getNonEventScopeExecutions
Description copied from interface:ActivityExecution
returns child executions that are not event scope executions.- Specified by:
getNonEventScopeExecutions
in interfaceActivityExecution
-
getEventScopeExecutions
-
findExecution
- Specified by:
findExecution
in interfacePvmProcessInstance
-
findExecutions
- Specified by:
findExecutions
in interfacePvmProcessInstance
-
collectExecutions
-
findActiveActivityIds
- Specified by:
findActiveActivityIds
in interfacePvmProcessInstance
-
collectActiveActivityIds
-
getProcessBusinessKey
Description copied from interface:DelegateExecution
The business key for the process instance this execution is associated with.- Specified by:
getProcessBusinessKey
in interfaceDelegateExecution
-
setProcessBusinessKey
Description copied from interface:DelegateExecution
Configure a business key on the process instance this execution is associated with.- Specified by:
setProcessBusinessKey
in interfaceDelegateExecution
- Parameters:
businessKey
- the new business key
-
getBusinessKey
Description copied from interface:BaseDelegateExecution
The business key for the root execution (e.g. process instance).- Specified by:
getBusinessKey
in interfaceBaseDelegateExecution
-
setProcessDefinition
-
getProcessDefinition
-
getProcessInstance
ensures initialization and returns the process instance.- Specified by:
getProcessInstance
in interfaceDelegateExecution
-
setProcessInstance
-
getCaseInstanceId
-
setCaseInstanceId
-
getActivity
ensures initialization and returns the activity- Specified by:
getActivity
in interfaceActivityExecution
- Specified by:
getActivity
in interfacePvmExecution
-
getActivityId
-
getCurrentActivityName
Description copied from interface:DelegateExecution
Gets the name of the current activity.- Specified by:
getCurrentActivityName
in interfaceDelegateExecution
-
getCurrentActivityId
Description copied from interface:DelegateExecution
Gets the id of the current activity.- Specified by:
getCurrentActivityId
in interfaceDelegateExecution
-
setActivity
- Specified by:
setActivity
in interfaceActivityExecution
-
enterActivityInstance
public void enterActivityInstance()Description copied from interface:ActivityExecution
invoked to notify the execution that a new activity instance is started- Specified by:
enterActivityInstance
in interfaceActivityExecution
-
activityInstanceStarting
public void activityInstanceStarting() -
activityInstanceStarted
public void activityInstanceStarted() -
activityInstanceDone
public void activityInstanceDone() -
activityInstanceEndListenerFailure
public void activityInstanceEndListenerFailure() -
generateActivityInstanceId
-
leaveActivityInstance
public void leaveActivityInstance()Description copied from interface:ActivityExecution
invoked to notify the execution that an activity instance is ended.- Specified by:
leaveActivityInstance
in interfaceActivityExecution
-
getParentActivityInstanceId
Description copied from interface:ActivityExecution
return the Id of the parent activity instance currently executed by this execution- Specified by:
getParentActivityInstanceId
in interfaceActivityExecution
- Specified by:
getParentActivityInstanceId
in interfaceDelegateExecution
-
setActivityInstanceId
- Specified by:
setActivityInstanceId
in interfaceActivityExecution
-
getActivityInstanceId
Description copied from interface:ActivityExecution
return the Id of the activity instance currently executed by this execution- Specified by:
getActivityInstanceId
in interfaceActivityExecution
- Specified by:
getActivityInstanceId
in interfaceDelegateExecution
-
getParent
ensures initialization and returns the parent- Specified by:
getParent
in interfaceActivityExecution
-
getParentId
Description copied from interface:DelegateExecution
Gets the id of the parent of this execution. If null, the execution represents a process-instance.- Specified by:
getParentId
in interfaceDelegateExecution
-
hasChildren
public boolean hasChildren()- Specified by:
hasChildren
in interfaceActivityExecution
- Returns:
- true if this execution has child executions (event scope executions or not)
-
setParent
Sets the execution's parent and updates the old and new parents' set of child executions -
setParentExecution
Use #setParent to also update the child execution sets -
getSuperExecution
Description copied from interface:DelegateExecution
In case this delegate execution is the process instance execution and this process instance was started by a call activity, this method returns the execution which executed the call activity in the super process instance.- Specified by:
getSuperExecution
in interfaceDelegateExecution
- Returns:
- the super execution or null.
-
setSuperExecution
-
getSubProcessInstance
-
setSubProcessInstance
-
getSuperCaseExecution
-
setSuperCaseExecution
-
getSubCaseInstance
-
setSubCaseInstance
-
getScopeActivity
-
isScope
public boolean isScope()Description copied from interface:ActivityExecution
Returns whether this execution is a scope.- Specified by:
isScope
in interfaceActivityExecution
-
setScope
public void setScope(boolean isScope) Description copied from interface:ActivityExecution
Changes whether this execution is a scope or not- Specified by:
setScope
in interfaceActivityExecution
-
findExecutionForFlowScope
For a given target flow scope, this method returns the corresponding scope execution.Precondition: the execution is active and executing an activity. Can be invoked for scope and non scope executions.
- Specified by:
findExecutionForFlowScope
in interfaceActivityExecution
- Parameters:
targetFlowScope
- scope activity or process definition for which the scope execution should be found- Returns:
- the scope execution for the provided targetFlowScope
-
findExecutionForScope
-
createActivityExecutionMapping
-
createActivityExecutionMapping
Description copied from interface:ActivityExecution
Returns a mapping from scope activities to scope executions for all scopes that are ancestors of the activity currently executed by this execution. Assumption: the current execution is active and executing an activity (ActivityExecution.getActivity()
is not null).- Specified by:
createActivityExecutionMapping
in interfaceActivityExecution
-
getFlowScopeExecution
-
getFlowScope
-
createActivityExecutionMapping
protected Map<ScopeImpl,PvmExecutionImpl> createActivityExecutionMapping(ScopeImpl currentScope, Map<ScopeImpl, PvmExecutionImpl> mapping) Creates an extended mapping based on this execution and the given existing mapping. Any entrymapping
in mapping that corresponds to an ancestor scope ofcurrentScope
is reused. -
toString
-
getToStringIdentity
-
getVariableScopeKey
- Specified by:
getVariableScopeKey
in interfaceVariableScope
- Overrides:
getVariableScopeKey
in classAbstractVariableScope
-
getParentVariableScope
- Specified by:
getParentVariableScope
in classAbstractVariableScope
-
setVariable
Method to store variable in a specific scope identified by activity ID.- Specified by:
setVariable
in interfaceDelegateExecution
- Parameters:
variableName
- - name of the variablevalue
- - value of the variabletargetActivityId
- - activity ID which is associated with destination execution, if not existing - exception will be thrown
-
findExecutionForFlowScope
- Parameters:
targetScopeId
- - destination scope to be found in current execution tree- Returns:
- execution with activity id corresponding to targetScopeId
-
getSequenceCounter
public long getSequenceCounter() -
setSequenceCounter
public void setSequenceCounter(long sequenceCounter) -
incrementSequenceCounter
public void incrementSequenceCounter() -
isExternallyTerminated
public boolean isExternallyTerminated() -
setExternallyTerminated
public void setExternallyTerminated(boolean externallyTerminated) -
getDeleteReason
-
setDeleteReason
-
isDeleteRoot
public boolean isDeleteRoot() -
setDeleteRoot
public void setDeleteRoot(boolean deleteRoot) -
getTransition
- Specified by:
getTransition
in interfaceActivityExecution
-
getTransitionsToTake
-
setTransitionsToTake
-
getCurrentTransitionId
Description copied from interface:DelegateExecution
return the Id of the current transition- Specified by:
getCurrentTransitionId
in interfaceDelegateExecution
-
setTransition
-
isConcurrent
public boolean isConcurrent()Description copied from interface:ActivityExecution
returns whether this execution is concurrent or not.- Specified by:
isConcurrent
in interfaceActivityExecution
-
setConcurrent
public void setConcurrent(boolean isConcurrent) Description copied from interface:ActivityExecution
changes the concurrent indicator on this execution.- Specified by:
setConcurrent
in interfaceActivityExecution
-
isActive
public boolean isActive()Description copied from interface:ActivityExecution
returns whether this execution is currently active.- Specified by:
isActive
in interfaceActivityExecution
-
setActive
public void setActive(boolean isActive) Description copied from interface:ActivityExecution
makes this execution active or inactive.- Specified by:
setActive
in interfaceActivityExecution
-
setEnded
public void setEnded(boolean isEnded) - Specified by:
setEnded
in interfaceActivityExecution
-
isEnded
public boolean isEnded()Description copied from interface:ActivityExecution
returns whether this execution has ended or not.- Specified by:
isEnded
in interfaceActivityExecution
- Specified by:
isEnded
in interfacePvmProcessInstance
-
isCanceled
public boolean isCanceled()Description copied from interface:DelegateExecution
Returns whether this execution has been canceled.- Specified by:
isCanceled
in interfaceDelegateExecution
-
setCanceled
public void setCanceled(boolean canceled) -
isCompleteScope
public boolean isCompleteScope()Description copied from interface:ActivityExecution
Returns whether this execution completed the parent scope.- Specified by:
isCompleteScope
in interfaceActivityExecution
-
setCompleteScope
public void setCompleteScope(boolean completeScope) -
setPreserveScope
public void setPreserveScope(boolean preserveScope) -
isPreserveScope
public boolean isPreserveScope() -
getActivityInstanceState
public int getActivityInstanceState() -
isInState
-
hasFailedOnEndListeners
public boolean hasFailedOnEndListeners()- Overrides:
hasFailedOnEndListeners
in classCoreExecution
-
isEventScope
public boolean isEventScope() -
setEventScope
public void setEventScope(boolean isEventScope) -
getScopeInstantiationContext
-
disposeScopeInstantiationContext
public void disposeScopeInstantiationContext() -
getNextActivity
Description copied from interface:ActivityExecution
An activity which is to be started next.- Specified by:
getNextActivity
in interfaceActivityExecution
-
isProcessInstanceExecution
public boolean isProcessInstanceExecution()Description copied from interface:ActivityExecution
returns whether this execution is a process instance or not.- Specified by:
isProcessInstanceExecution
in interfaceActivityExecution
-
setStartContext
-
setIgnoreAsync
public void setIgnoreAsync(boolean ignoreAsync) - Specified by:
setIgnoreAsync
in interfaceActivityExecution
-
isIgnoreAsync
public boolean isIgnoreAsync() -
setStarting
public void setStarting(boolean isStarting) -
isStarting
public boolean isStarting() -
isProcessInstanceStarting
public boolean isProcessInstanceStarting() -
setProcessInstanceStarting
public void setProcessInstanceStarting(boolean starting) -
setNextActivity
-
getParentScopeExecution
-
delayEvent
Delays a given variable event with the given target scope.- Parameters:
targetScope
- the target scope of the variable eventvariableEvent
- the variable event which should be delayed
-
delayEvent
Delays and stores the given DelayedVariableEvent on the process instance.- Parameters:
delayedVariableEvent
- the DelayedVariableEvent which should be store on the process instance
-
getDelayedEvents
The current delayed variable events.- Returns:
- a list of DelayedVariableEvent objects
-
clearDelayedEvents
public void clearDelayedEvents()Cleares the current delayed variable events. -
dispatchDelayedEventsAndPerformOperation
Dispatches the current delayed variable events and performs the given atomic operation if the current state was not changed.- Parameters:
atomicOperation
- the atomic operation which should be executed
-
dispatchDelayedEventsAndPerformOperation
Dispatches the current delayed variable events and performs the given atomic operation if the current state was not changed.- Parameters:
continuation
- the atomic operation continuation which should be executed
-
continueIfExecutionDoesNotAffectNextOperation
public void continueIfExecutionDoesNotAffectNextOperation(Callback<PvmExecutionImpl, Void> dispatching, Callback<PvmExecutionImpl, Void> continuation, PvmExecutionImpl execution) Executes the given depending operations with the given execution. The execution state will be checked with the help of the activity instance id and activity id of the execution before and after the dispatching callback call. If the id's are not changed the continuation callback is called.- Parameters:
dispatching
- the callback to dispatch the variable eventscontinuation
- the callback to continue with the next atomic operationexecution
- the execution which is used for the execution
-
continueExecutionIfNotCanceled
protected void continueExecutionIfNotCanceled(Callback<PvmExecutionImpl, Void> continuation, PvmExecutionImpl execution) -
dispatchScopeEvents
Dispatches the current delayed variable events on the scope of the given execution.- Parameters:
execution
- the execution on which scope the delayed variable should be dispatched
-
initActivityIds
protected void initActivityIds(List<DelayedVariableEvent> delayedEvents, Map<PvmExecutionImpl, String> activityInstanceIds, Map<PvmExecutionImpl, String> activityIds) Initializes the given maps with the target scopes and current activity id's and activity instance id's.- Parameters:
delayedEvents
- the delayed events which contains the information about the target scopeactivityInstanceIds
- the map which maps target scope to activity instance idactivityIds
- the map which maps target scope to activity id
-
createIncident
Returns the newest incident in this execution- Specified by:
createIncident
in interfaceDelegateExecution
- Parameters:
incidentType
- the type of new incidentconfiguration
- configuration of the incident- Returns:
- new incident
-
createIncident
Description copied from interface:DelegateExecution
Create an incident associated with this execution- Specified by:
createIncident
in interfaceDelegateExecution
- Parameters:
incidentType
- the type of incident- Returns:
- a new incident
-
createIncidentContext
-
resolveIncident
Resolves an incident with given id.- Specified by:
resolveIncident
in interfaceDelegateExecution
- Parameters:
incidentId
-
-
findIncidentHandler
-
isExecutingScopeLeafActivity
public boolean isExecutingScopeLeafActivity() -
isAsyncAfterScopeWithoutTransition
public boolean isAsyncAfterScopeWithoutTransition()This case is special, because the execution tree is different if an async after activity is left via transition (case 1) or not (case 2). In case 1, when the execution becomes async, the scope execution is already removed. In case 2 it is not.- Returns:
- true if
- the execution is in asyncAfter state and completes
- leaves a scope activity
- completes the parent scope (i.e. does not leave via a transition but propagates control to the parent)
-