{"record":{"id":"b3186063a4bb109f","repo":"flowable/flowable-engine","slug":"could-not-handle-signal-no-process-instance-start","errorCode":null,"errorMessage":"Could not handle signal: no process instance started","messagePattern":"Could not handle signal: no process instance started","errorType":"exception","errorClass":"ActivitiException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/SignalEventHandler.java","lineNumber":64,"sourceCode":"        } else if (eventSubscription.getProcessDefinitionId() != null) {\r\n            // Start event\r\n            String processDefinitionId = eventSubscription.getProcessDefinitionId();\r\n            DeploymentManager deploymentCache = Context\r\n                    .getProcessEngineConfiguration()\r\n                    .getDeploymentManager();\r\n\r\n            ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) deploymentCache.findDeployedProcessDefinitionById(processDefinitionId);\r\n            if (processDefinition == null) {\r\n                throw new ActivitiObjectNotFoundException(\"No process definition found for id '\" + processDefinitionId + \"'\", ProcessDefinition.class);\r\n            }\r\n\r\n            ActivityImpl startActivity = processDefinition.findActivity(eventSubscription.getActivityId());\r\n            if (startActivity == null) {\r\n                throw new ActivitiException(\"Could no handle signal: no start activity found with id \" + eventSubscription.getActivityId());\r\n            }\r\n            ExecutionEntity processInstance = processDefinition.createProcessInstance(null, startActivity);\r\n            if (processInstance == null) {\r\n                throw new ActivitiException(\"Could not handle signal: no process instance started\");\r\n            }\r\n\r\n            if (payload != null) {\r\n                if (payload instanceof Map) {\r\n                    Map<String, Object> variables = (Map<String, Object>) payload;\r\n                    processInstance.setVariables(variables);\r\n                }\r\n            }\r\n\r\n            processInstance.start();\r\n        } else {\r\n            throw new ActivitiException(\"Invalid signal handling: no execution nor process definition set\");\r\n        }\r\n    }\r\n\r\n}\r\n","sourceCodeStart":46,"sourceCodeEnd":81,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/SignalEventHandler.java#L46-L81","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before: expecting a signal on a non-start activity\n<serviceTask id=\"doWork\"/>\n<signalEventDefinition signalRef=\"orderSignal\"/> <!-- wrongly attached -->\n// after: proper signal start event\n<startEvent id=\"orderStart\">\n  <signalEventDefinition signalRef=\"orderSignal\"/>\n</startEvent>","handlingStrategy":"validation","validationCode":"// ensure the subscribed activity is a genuine signal start event in the model\nActivityImpl act = processDefinition.findActivity(activityId);\nif (act == null || !act.getProperties().containsKey(\"behavior\")) {\n    throw new IllegalStateException(\"Activity not a valid start behavior\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    runtimeService.signalEventReceived(signalName);\n} catch (org.activiti.engine.ActivitiException e) {\n    if (e.getMessage().contains(\"no process instance started\")) {\n        // fall back to starting by key\n        runtimeService.startProcessInstanceByKey(processKey);\n    }\n}","preventionTips":["Validate BPMN with the schema before deployment.","Attach signal definitions only to startEvent elements.","Restart processes by key when signal-start state is inconsistent."],"tags":["bpmn","signal","process-instance","workflow"],"backgroundTag":"invalid-state-transition","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}