{"record":{"id":"1ee9e2a6d23accdb","repo":"flowable/flowable-engine","slug":"invalid-signal-handling-no-execution-nor-process-1ee9e2","errorCode":null,"errorMessage":"Invalid signal handling: no execution nor process definition set","messagePattern":"Invalid signal handling: no execution nor process definition set","errorType":"exception","errorClass":"ActivitiException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/SignalEventHandler.java","lineNumber":76,"sourceCode":"            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":58,"sourceCodeEnd":81,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/event/SignalEventHandler.java#L58-L81","documentation":"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.","triggerScenarios":"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.","commonSituations":"Direct manipulation of ACT_RU_EVENT_SUBSCRIBER; cascade deletion of executions by other jobs leaving orphaned subscriptions; restoring partial DB backups.","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."],"exampleFix":"// before: manually inserting a subscription row\nINSERT INTO ACT_RU_EVENT_SUBSCRIBER (EVENT_TYPE_ID_, ...) VALUES ('signal', NULL, NULL);\n// after: create it through the engine via BPMN\n<startEvent id=\"sigStart\"><signalEventDefinition signalRef=\"orderSignal\"/></startEvent>","handlingStrategy":"validation","validationCode":"EventSubscriptionEntity s = /* loaded subscription */;\nif (s.getExecutionId() == null && s.getProcessDefinitionId() == null) {\n    // corrupt subscription: delete instead of signaling\n    runtimeService.deleteEventSubscription /* or SQL cleanup of ACT_RU_EVENT_SUBSCRIBER */;\n}","typeGuard":null,"tryCatchPattern":"try {\n    handleSignal(subscription);\n} catch (org.activiti.engine.ActivitiException e) {\n    if (e.getMessage().contains(\"no execution nor process definition\")) {\n        LOGGER.warn(\"Removing corrupt subscription {}\", subscription.getId());\n        subscription.delete();\n    }\n}","preventionTips":["Never hand-edit ACT_RU_EVENT_SUBSCRIBER rows.","Use only public APIs to create/signal event subscriptions.","Verify runtime-table integrity after DB restores."],"tags":["bpmn","signal","corrupt-state","event-subscription"],"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-14T05:17:10.506Z"}