flowable/flowable-engine · error · ActivitiException
Could not handle signal: no process instance started
Error message
Could not handle signal: no process instance started
What it means
Thrown by SignalEventHandler.handleEvent when processDefinition.createProcessInstance(null, startActivity) returns null, so the signal cannot start a new process instance. createProcessInstance returns null when the process definition cannot instantiate the given start activity (e.g. the activity is not a valid process start behavior).
Solutions
- Verify the activity bound to the subscription is a real none/signal start event in the deployed BPMN.
- Redeploy a corrected process definition and let a new signal subscription be created.
- Delete the stale subscription and restart the process with runtimeService.startProcessInstanceByKey instead of signaling.
- Inspect ProcessDefinitionEntity.createProcessInstance / getInitialActivityStack for engine-level causes if the model looks correct.
Example fix
// before: expecting a signal on a non-start activity <serviceTask id="doWork"/> <signalEventDefinition signalRef="orderSignal"/> <!-- wrongly attached --> // after: proper signal start event <startEvent id="orderStart"> <signalEventDefinition signalRef="orderSignal"/> </startEvent>
Defensive patterns
Strategy: validation
Validate before calling
// ensure the subscribed activity is a genuine signal start event in the model
ActivityImpl act = processDefinition.findActivity(activityId);
if (act == null || !act.getProperties().containsKey("behavior")) {
throw new IllegalStateException("Activity not a valid start behavior");
} Try / catch
try {
runtimeService.signalEventReceived(signalName);
} catch (org.activiti.engine.ActivitiException e) {
if (e.getMessage().contains("no process instance started")) {
// fall back to starting by key
runtimeService.startProcessInstanceByKey(processKey);
}
} Prevention
- Validate BPMN with the schema before deployment.
- Attach signal definitions only to startEvent elements.
- Restart processes by key when signal-start state is inconsistent.
When it happens
Trigger: A signal start-event subscription is handled, the activity is found, but createProcessInstance with that activity yields no process instance — the activity isn't a start event / cannot initiate execution.
Common situations: Corrupted or hand-edited BPMN where a non-start activity is wired as a signal start; model/subscription mismatch after partial redeploy; engine bugs when the start event lacks proper incoming behavior in older versions.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Not supported to signal this execution
- Cannot find processInstance for id
- Cannot set suspension state for execution
- Cannot throw process-instance scoped message, since the…
- Cannot throw process-instance scoped signal, since the…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/b3186063a4bb109f.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/SignalEventHandler.java:64
} else if (eventSubscription.getProcessDefinitionId() != null) {
// Start event
String processDefinitionId = eventSubscription.getProcessDefinitionId();
DeploymentManager deploymentCache = Context
.getProcessEngineConfiguration()
.getDeploymentManager();
ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) deploymentCache.findDeployedProcessDefinitionById(processDefinitionId);
if (processDefinition == null) {
throw new ActivitiObjectNotFoundException("No process definition found for id '" + processDefinitionId + "'", ProcessDefinition.class);
}
ActivityImpl startActivity = processDefinition.findActivity(eventSubscription.getActivityId());
if (startActivity == null) {
throw new ActivitiException("Could no handle signal: no start activity found with id " + eventSubscription.getActivityId());
}
ExecutionEntity processInstance = processDefinition.createProcessInstance(null, startActivity);
if (processInstance == null) {
throw new ActivitiException("Could not handle signal: no process instance started");
}
if (payload != null) {
if (payload instanceof Map) {
Map<String, Object> variables = (Map<String, Object>) payload;
processInstance.setVariables(variables);
}
}
processInstance.start();
} else {
throw new ActivitiException("Invalid signal handling: no execution nor process definition set");
}
}
}
View on GitHub (pinned to d6d39ce1c6)