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

  1. Verify the activity bound to the subscription is a real none/signal start event in the deployed BPMN.
  2. Redeploy a corrected process definition and let a new signal subscription be created.
  3. Delete the stale subscription and restart the process with runtimeService.startProcessInstanceByKey instead of signaling.
  4. 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

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


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)