{"record":{"id":"21c0a7acbd7b3c52","repo":"quarkusio/quarkus","slug":"s-execution-model-is-not-supported-s","errorCode":null,"errorMessage":"%s execution model is not supported: %s","messagePattern":"(.+?) execution model is not supported: (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/signals/deployment/src/main/java/io/quarkus/signals/deployment/SignalsProcessor.java","lineNumber":158,"sourceCode":"                            }\n                        }\n                    }\n                    if (!seenMethods.add(method.signatureKey())) {\n                        // Overridden by a subclass\n                        continue;\n                    }\n                    if (signalParam != null) {\n                        if (Modifier.isPrivate(method.flags())) {\n                            throw new IllegalStateException(\n                                    \"A receiver method must not be private: \" + methodDesc(method));\n                        }\n                        if (Modifier.isStatic(method.flags())) {\n                            throw new IllegalStateException(\n                                    \"A receiver method must not be static: \" + methodDesc(method));\n                        }\n                        ExecutionModel executionModel = getExecutionModel(method);\n                        if (!receiverExecutorImplementation.isSupported(executionModel)) {\n                            throw new IllegalStateException(\n                                    \"%s execution model is not supported: %s\".formatted(executionModel, methodDesc(method)));\n                        }\n                        InvokerBuilder invokerBuilder = invokerFactory.createInvoker(bean, method)\n                                .withInstanceLookup();\n                        if (params.size() > 1) {\n                            for (MethodParameterInfo param : params) {\n                                if (param != signalParam) {\n                                    invokerBuilder.withArgumentLookup(param.position());\n                                }\n                            }\n                        }\n                        List<AnnotationInstance> qualifiers = new ArrayList<>();\n                        for (AnnotationInstance a : signalParam.declaredAnnotations()) {\n                            if (knownQualifiers.contains(a.name())) {\n                                qualifiers.add(a);\n                            }\n                        }\n                        receivers.produce(","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/signals/deployment/src/main/java/io/quarkus/signals/deployment/SignalsProcessor.java#L140-L176","documentation":"Each signal receiver implementation only supports certain CDI execution models (e.g. blocking, non-blocking event loop). During build, the processor computes the method's execution model and rejects it if the configured receiver executor implementation cannot run that model.","triggerScenarios":"A receiver method whose execution model (determined from annotations like @Blocking/@NonBlocking/@RunOnVirtualThread and return type) is unsupported by the selected receiverExecutorImplementation — e.g. an async/Uni-returning method on an executor that only supports blocking methods.","commonSituations":"Mixing reactive receiver signatures with a blocking executor implementation, or returning Uni/CompletionStage from a receiver when the runtime executor does not support reactive execution.","solutions":["Change the receiver method to match the supported execution model (e.g. make it a plain blocking method, or add/remove @Blocking).","Configure/select a receiver executor implementation that supports the method's execution model.","Change the return type (e.g. void instead of Uni<...>) if reactive return is the problem."],"exampleFix":"// before\n@SignalReceiver\nUni<Void> onSig(SignalEvent evt) { ... }\n\n// after (blocking executor)\n@SignalReceiver\nvoid onSig(SignalEvent evt) { ... }","handlingStrategy":"validation","validationCode":"// Before registering, check the executor supports the model:\nExecutionModel model = getExecutionModel(method);\nif (!executor.supports(model)) throw new IllegalArgumentException(\"unsupported execution model: \" + model);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Match receiver return types (void vs Uni/CompletionStage) to the configured executor.","Annotate receivers explicitly with @Blocking/@NonBlocking to make the model unambiguous.","Rebuild after changing executor configuration so build-time checks run."],"tags":["quarkus","execution-model","build-time","signals"],"backgroundTag":"unsupported-execution-model","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}