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

  1. Delete the orphaned event subscription row (ACT_RU_EVENT_SUBSCRIBER) and re-create the intended signal start event via a fresh deployment.
  2. Never insert/modify subscription rows manually; use the public API (runtimeService.signalEventReceived, startProcessInstanceBySignal).
  3. Check foreign-key integrity of the runtime tables; restore consistency by completing/terminating the affected process instances.
  4. 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

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


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/1ee9e2a6d23accdb. Report an issue: GitHub.