This is my BPMN:
I’m using the Spring Boot Starter from Camunda
- A REST-Endpoint starts a new ProcessInstance and returns the ProcessInstanceId
- A second REST-Endpoint inserts MessageCorrelation to a given ProcessInstanceId
- The “Task 3” throws an Exception
This is the Code from the IncidentHandler.handleIncident(context, message) Method:
`
public Incident handleIncident(final IncidentContext context, final String message) {
log.info("CONTEXT activityId = {}", context.getActivityId());
log.info("CONTEXT executionId = {}", context.getExecutionId());
log.info("CONTEXT jobDefinitionId = {}", context.getJobDefinitionId());
log.info("CONTEXT processDefinitionId = {}", context.getProcessDefinitionId());
log.info("CONTEXT tenantId = {}", context.getTenantId());
log.info("CONTEXT configuration = {}", context.getConfiguration());
log.info("CONTEXT className = {}", context.getClass().getName());
final List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery()
.activityIdIn(context.getActivityId()).list();
log.info("PROCESS_INSTANCES size = {}", processInstances.size());
processInstances.forEach(processInstance -> {
log.info("PROCESS_INSTANCE id = {}", processInstance.getId());
log.info("PROCESS_INSTANCE processInstanceId = {}", processInstance.getProcessInstanceId());
log.info("PROCESS_INSTANCE rootProcessInstanceId = {}", processInstance.getRootProcessInstanceId());
log.info("PROCESS_INSTANCE processDefinitionId = {}", processInstance.getProcessDefinitionId());
log.info("PROCESS_INSTANCE caseInstanceId = {}", processInstance.getCaseInstanceId());
log.info("PROCESS_INSTANCE businessKey = {}", processInstance.getBusinessKey());
log.info("PROCESS_INSTANCE tenantId = {}", processInstance.getTenantId());
log.info("PROCESS_INSTANCE isSuspended = {}", processInstance.isSuspended());
log.info("PROCESS_INSTANCE className = {}", processInstance.getClass().getName());
final ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.getId());
log.info("ACTIVITY_INSTANCE id = {}", activityInstance.getId());
log.info("ACTIVITY_INSTANCE activityId = {}", activityInstance.getActivityId());
log.info("ACTIVITY_INSTANCE activityName = {}", activityInstance.getActivityName());
log.info("ACTIVITY_INSTANCE activityType = {}", activityInstance.getActivityType());
log.info("ACTIVITY_INSTANCE parentActivityInstanceId = {}", activityInstance.getParentActivityInstanceId());
log.info("ACTIVITY_INSTANCE activityInstances = {}", Arrays.asList(activityInstance.getChildActivityInstances())
.stream().map(ai -> ai.getId()).collect(Collectors.toList()));
});
final List<Execution> executions = runtimeService.createExecutionQuery().activityId(context.getActivityId()).list();
log.info("EXECUTIONS size = {}", executions.size());
executions.forEach(execution -> {
log.info("---------------------------------------------------------------------");
log.info("EXECUTION id = {}", execution.getId());
log.info("EXECUTION tenantId = {}", execution.getTenantId());
log.info("EXECUTION processInstanceId = {}", execution.getProcessInstanceId());
log.info("EXECUTION isSuspended = {}", execution.isSuspended());
log.info("EXECUTION isEnded = {}", execution.isEnded());
});
final List<HistoricTaskInstance> historicTaskInstances = historyService.createHistoricTaskInstanceQuery()
.processDefinitionId(context.getProcessDefinitionId()).list();
log.info("HISTORIC_TASK_INSTANCES size = {}", historicTaskInstances.size());
historicTaskInstances.forEach(historicTaskInstance -> {
log.info("---------------------------------------------------------------------");
log.info("HISTORIC_TASK_INSTANCE id = {}", historicTaskInstance.getId());
log.info("HISTORIC_TASK_INSTANCE name = {}", historicTaskInstance.getName());
log.info("HISTORIC_TASK_INSTANCE executionId = {}", historicTaskInstance.getExecutionId());
});
final List<Task> tasks = taskService.createTaskQuery().processDefinitionId(context.getProcessDefinitionId()).list();
log.info("TASKS size = {}", tasks.size());
tasks.forEach(task -> {
log.info("---------------------------------------------------------------------");
log.info("TASK id = {}", task.getId());
log.info("TASK name = {}", task.getName());
log.info("TASK executionId = {}", task.getExecutionId());
log.info("TASK processInstanceId = {}", task.getProcessInstanceId());
log.info("TASK processDefinitionId = {}", task.getProcessDefinitionId());
log.info("TASK tenantId = {}", task.getTenantId());
log.info("TASK parentTaskId = {}", task.getParentTaskId());
log.info("TASK caseExecutionId = {}", task.getCaseExecutionId());
log.info("TASK caseInstanceId = {}", task.getCaseInstanceId());
log.info("TASK caseDefinitionId = {}", task.getCaseDefinitionId());
log.info("TASK className = {}", task.getClass().getName());
if (task instanceof Activity) {
log.info("TASK is activity = true");
final Activity activity = (Activity) task;
log.info("TASK isForCompensation = {}", activity.isForCompensation());
} else {
log.info("TASK is activity = false");
}
});
log.info("---------------------------------------------------------------------");
final Incident incident = runtimeService.createIncident("CustomType", context.getExecutionId(),
context.getConfiguration(), message);
log.info("INCIDENT id = {}", incident.getId());
log.info("INCIDENT incidentType = {}", incident.getIncidentType());
log.info("INCIDENT processInstanceId = {}", incident.getProcessInstanceId());
log.info("INCIDENT processDefinitionId = {}", incident.getProcessDefinitionId());
log.info("INCIDENT jobDefinitionId = {}", incident.getJobDefinitionId());
log.info("INCIDENT activityId = {}", incident.getActivityId());
log.info("INCIDENT executionId = {}", incident.getExecutionId());
log.info("INCIDENT causeIncidentId = {}", incident.getCauseIncidentId());
log.info("INCIDENT tenantId = {}", incident.getTenantId());
log.info("INCIDENT configuration = {}", incident.getConfiguration());
log.info("INCIDENT incidentMessage = {}", incident.getIncidentMessage());
return incident;
}
`
This is my Logging-Output:
`
CONTEXT activityId = Task_1rpk00g
CONTEXT executionId = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
CONTEXT jobDefinitionId = 4c3bff5b-4ae4-11e9-ad03-0242dc4520e1
CONTEXT processDefinitionId = test_prozess:1:4c3bd846-4ae4-11e9-ad03-0242dc4520e1
CONTEXT tenantId = null
CONTEXT configuration = 6395a0f4-4ae4-11e9-ad03-0242dc4520e1
CONTEXT className = org.camunda.bpm.engine.impl.incident.IncidentContext
PROCESS_INSTANCES size = 1
PROCESS_INSTANCE id = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
PROCESS_INSTANCE processInstanceId = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
PROCESS_INSTANCE rootProcessInstanceId = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
PROCESS_INSTANCE processDefinitionId = test_prozess:1:4c3bd846-4ae4-11e9-ad03-0242dc4520e1
PROCESS_INSTANCE caseInstanceId = null
PROCESS_INSTANCE businessKey = null
PROCESS_INSTANCE tenantId = null
PROCESS_INSTANCE isSuspended = false
PROCESS_INSTANCE className = org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
ACTIVITY_INSTANCE id = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
ACTIVITY_INSTANCE activityId = test_prozess:1:4c3bd846-4ae4-11e9-ad03-0242dc4520e1
ACTIVITY_INSTANCE activityName = Test_Prozess
ACTIVITY_INSTANCE activityType = processDefinition
ACTIVITY_INSTANCE parentActivityInstanceId = null
ACTIVITY_INSTANCE activityInstances = []
EXECUTIONS size = 1
EXECUTION id = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
EXECUTION tenantId = null
EXECUTION processInstanceId = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
EXECUTION isSuspended = false
EXECUTION isEnded = false
HISTORIC_TASK_INSTANCES size = 0
TASKS size = 0
Incident happend!
INCIDENT id = 63a690f0-4ae4-11e9-ad03-0242dc4520e1
INCIDENT incidentType = CustomType
INCIDENT processInstanceId = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
INCIDENT processDefinitionId = test_prozess:1:4c3bd846-4ae4-11e9-ad03-0242dc4520e1
INCIDENT jobDefinitionId = null
INCIDENT activityId = Task_1rpk00g
INCIDENT executionId = 5e421a55-4ae4-11e9-ad03-0242dc4520e1
INCIDENT causeIncidentId = 63a690f0-4ae4-11e9-ad03-0242dc4520e1
INCIDENT tenantId = null
INCIDENT configuration = 6395a0f4-4ae4-11e9-ad03-0242dc4520e1
INCIDENT incidentMessage = Error while evaluating expression: ${my.taskThree(execution)}. Cause: java.lang.IllegalArgumentException: Message is not allowed to be ‘exception’!
`