flowable/flowable-engine · error · FlowableException
Error while sending signal for " + eventSubscription + ": no
Error message
Error while sending signal for " + eventSubscription + ": no activity associated with event subscription
What it means
Thrown by AbstractEventHandler.handleEvent when an event subscription (signal/message) points to an execution whose currentFlowElement is null. The engine cannot deliver the signal or payload because it doesn't know which BPMN activity the subscription is bound to - i.e. the execution's persisted activity state is inconsistent with the subscription.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/event/AbstractEventHandler.java:36
import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.EventSubscriptionUtil;
import org.flowable.eventsubscription.service.impl.persistence.entity.EventSubscriptionEntity;
/**
* @author Tijs Rademakers
*/
public abstract class AbstractEventHandler implements EventHandler {
@Override
public void handleEvent(EventSubscriptionEntity eventSubscription, Object payload, CommandContext commandContext) {
String executionId = eventSubscription.getExecutionId();
ExecutionEntity execution = CommandContextUtil.getExecutionEntityManager(commandContext).findById(executionId);
FlowNode currentFlowElement = (FlowNode) execution.getCurrentFlowElement();
if (currentFlowElement == null) {
throw new FlowableException("Error while sending signal for " + eventSubscription + ": no activity associated with event subscription");
}
EventSubscriptionUtil.processPayloadMap(payload, execution, currentFlowElement, commandContext);
CommandContextUtil.getAgenda().planTriggerExecutionOperation(execution);
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Check whether the execution already consumed the event; don't signal twice (guard with a process variable or idempotent correlation).
- Verify runtime data consistency: inspect ACT_RU_EVENT_SUBSCR and ACT_RU_EXECUTION for the executionId; if stale, delete the process instance (deleteProcessInstance) and restart.
- Restore from a consistent backup or re-deploy the process definition if runtime tables are corrupted.
- If reproducible after an upgrade, check for known Flowable upgrade bugs and run the appropriate upgrade scripts.
Defensive patterns
Strategy: try-catch
Validate before calling
EventSubscription sub = runtimeService.createEventSubscriptionQuery().executionId(executionId).singleResult();
if (sub == null) {
throw new IllegalStateException("no active subscription to signal");
} Try / catch
try {
runtimeService.signal(executionId, payload);
} catch (FlowableException e) {
if (e.getMessage().contains("no activity associated with event subscription")) {
// treat as already-delivered / stale subscription; log and skip
}
} Prevention
- Make signal delivery idempotent; never signal the same subscription twice.
- Never hand-edit or restore partial ACT_RU_* tables.
- Correlate messages/signals only for instances confirmed to be waiting.
- Follow official upgrade scripts when upgrading engine versions.
When it happens
Trigger: runtimeService.signal(eventSubscriptionId/eventName/payload) or message correlation hitting an EventSubscriptionEntity whose execution has no current flow element - e.g. execution already moved past the boundary/catch event, corrupted or manually-modified ACT_RU_EXECUTION rows, or signaling a subscription for an execution in a state where the flow element is not (re)loaded.
Common situations: Double signal delivery racing with execution continuing; DB state tampered with or restored from inconsistent backups; engine version upgrade leaving stale runtime rows; signaling a process instance that already passed the catch event.
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
- Compensating execution not set for " + eventSubscription
- Not supported to signal this execution
- Error while sending signal for event subscription '${eventSu
- Invalid signal handling: no execution nor process definition
- Plan item instance for {eventSubscription} can not be found
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/0b1da941602c7020.
Report an issue: GitHub.