{"record":{"id":"049c6a61fa8981ba","repo":"flowable/flowable-engine","slug":"not-supported-to-signal-this-execution","errorCode":null,"errorMessage":"Not supported to signal this execution","messagePattern":"Not supported to signal this execution","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java","lineNumber":109,"sourceCode":"            } catch (BpmnError error) {\n                ErrorPropagation.propagateError(error, activityExecution);\n            }\n\n            if (resolveNrOfInstances(activityExecution) == 0) {\n                leave(activityExecution);\n            }\n        } else {\n            innerActivityBehavior.execute(execution);\n        }\n    }\n\n    protected abstract void createInstances(ActivityExecution execution);\n\n    // Intercepts signals, and delegates it to the wrapped {@link ActivityBehavior}.\n    @Override\n    public void signal(ActivityExecution execution, String signalName, Object signalData) throws Exception {\n        if (innerActivityBehavior instanceof org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior) {\n            throw new FlowableException(\"Not supported to signal this execution\");\n        } else {\n            ((AbstractBpmnActivityBehavior) this.innerActivityBehavior).signal(execution, signalName, signalData);\n        }\n    }\n\n    // required for supporting embedded subprocesses\n    @Override\n    public void lastExecutionEnded(ActivityExecution execution) {\n        ScopeUtil.createEventScopeExecution((ExecutionEntity) execution);\n        leave(execution);\n    }\n\n    // required for supporting external subprocesses\n    @Override\n    public void completing(DelegateExecution execution, DelegateExecution subProcessInstance) throws Exception {\n    }\n\n    // required for supporting external subprocesses","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/MultiInstanceActivityBehavior.java#L91-L127","documentation":"MultiInstanceActivityBehavior.signal intercepts signals intended for a multi-instance execution and, when the wrapped inner behavior is an AbstractBpmnActivityBehavior (i.e. the signal targets the multi-instance scope itself rather than an inner activity that supports signaling), it throws this FlowableException because signaling the multi-instance wrapper is not supported.","triggerScenarios":"Calling execution.signal(signalName, signalData) (or task completion / event triggering routed to the execution) on the execution whose behavior is a MultiInstanceActivityBehavior wrapping an AbstractBpmnActivityBehavior.","commonSituations":"Signaling a receive-task-like activity inside a multi-instance block but resolving to the wrong (parent multi-instance) execution; custom code walking the execution tree and signaling the miRoot execution; process-correlation code that signals executions by id after restarts.","solutions":["Signal the correct child/inner execution (the one inside the multi-instance scope), not the multi-instance root execution.","Inspect the execution tree (runtimeService.createExecutionQuery().processInstanceId(...)) and target the active child execution of the multi-instance activity.","If you need to cancel or advance the whole multi-instance block, use process-instance modification (changeActivityState) or deletion of the execution instead of signal().","Check that the inner activity type actually supports signaling; non-waiting inner behaviors have nothing to signal."],"exampleFix":"// before: signals the multi-instance root\nExecution miRoot = executionQuery.list().get(0);\nruntimeService.signal(miRoot.getId());\n\n// after: signal the active child execution inside the scope\nExecution inner = runtimeService.createExecutionQuery()\n    .processInstanceId(processInstanceId)\n    .activityId(\"innerReceiveTask\")\n    .singleExecution();\nruntimeService.signal(inner.getId());","handlingStrategy":"type-guard","validationCode":"// Guard before signaling: only signal executions whose current activity is not the multi-instance wrapper\nboolean isSignable = runtimeService.createExecutionQuery()\n    .executionId(executionId)\n    .activityId(innerActivityId)\n    .singleResult() != null;\nif (!isSignable) throw new IllegalStateException(\"Target the inner child execution, not the multi-instance root\");","typeGuard":"// Narrow to a child execution of the multi-instance scope\nExecution findInnerExecution(String processInstanceId, String innerActivityId) {\n    return runtimeService.createExecutionQuery()\n        .processInstanceId(processInstanceId)\n        .activityId(innerActivityId)\n        .singleResult();\n}","tryCatchPattern":"try {\n    runtimeService.signal(executionId);\n} catch (org.flowable.engine.FlowableException e) {\n    if (\"Not supported to signal this execution\".equals(e.getMessage())) {\n        // look up the child execution inside the multi-instance scope and signal that instead\n    } else {\n        throw e;\n    }\n}","preventionTips":["Never signal the miRoot/parent execution of a multi-instance block; always resolve the active child execution.","Use execution queries filtered by activityId to find the correct signaling target.","For advancing/cancelling whole multi-instance scopes, use runtimeService.createChangeActivityStateBuilder() instead of signal().","Be careful with custom execution-tree walking code after process restarts or async continuations."],"tags":["bpmn","process-engine","multi-instance","signal","workflow"],"backgroundTag":"unsupported-operation","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"}