flowable/flowable-engine · error · ActivitiException
Invalid signal handling: no execution nor process definition
Error message
Invalid signal handling: no execution nor process definition set
What it means
Thrown by SignalEventHandler.handleEvent when a signal event subscription has neither a process instance/execution id nor a process definition id, so the handler cannot decide whether to signal an existing execution or start a new process instance. This indicates a corrupt or non-standard event subscription row in the runtime tables.
Source
Thrown at modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/SignalEventHandler.java:76
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)
Solutions
- Delete the orphaned event subscription row (ACT_RU_EVENT_SUBSCRIBER) and re-create the intended signal start event via a fresh deployment.
- Never insert/modify subscription rows manually; use the public API (runtimeService.signalEventReceived, startProcessInstanceBySignal).
- Check foreign-key integrity of the runtime tables; restore consistency by completing/terminating the affected process instances.
- Upgrade the engine if this occurs with normally created subscriptions — it may be an engine bug in subscription cleanup.
Example fix
// before: manually inserting a subscription row
INSERT INTO ACT_RU_EVENT_SUBSCRIBER (EVENT_TYPE_ID_, ...) VALUES ('signal', NULL, NULL);
// after: create it through the engine via BPMN
<startEvent id="sigStart"><signalEventDefinition signalRef="orderSignal"/></startEvent> Defensive patterns
Strategy: validation
Validate before calling
EventSubscriptionEntity s = /* loaded subscription */;
if (s.getExecutionId() == null && s.getProcessDefinitionId() == null) {
// corrupt subscription: delete instead of signaling
runtimeService.deleteEventSubscription /* or SQL cleanup of ACT_RU_EVENT_SUBSCRIBER */;
} Try / catch
try {
handleSignal(subscription);
} catch (org.activiti.engine.ActivitiException e) {
if (e.getMessage().contains("no execution nor process definition")) {
LOGGER.warn("Removing corrupt subscription {}", subscription.getId());
subscription.delete();
}
} Prevention
- Never hand-edit ACT_RU_EVENT_SUBSCRIBER rows.
- Use only public APIs to create/signal event subscriptions.
- Verify runtime-table integrity after DB restores.
When it happens
Trigger: An EventSubscriptionEntity for a signal is handled while both its executionId and processDefinitionId fields are null — e.g. a manually inserted subscription, data corruption, or a subscription whose execution was removed without deleting the subscription.
Common situations: Direct manipulation of ACT_RU_EVENT_SUBSCRIBER; cascade deletion of executions by other jobs leaving orphaned subscriptions; restoring partial DB backups.
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
- Error while sending signal for " + eventSubscription + ": no
- Error while sending signal for event subscription '${eventSu
- Plan item instance for {eventSubscription} can not be found
- Cannot deploy process definition '${processDefinition.getRes
- Cannot throw process-instance scoped signal, since the dispa
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/1ee9e2a6d23accdb.
Report an issue: GitHub.