quarkusio/quarkus · error · IllegalStateException

%s execution model is not supported: %s

Error message

%s execution model is not supported: %s

What it means

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.

Source

Thrown at extensions/signals/deployment/src/main/java/io/quarkus/signals/deployment/SignalsProcessor.java:158

                            }
                        }
                    }
                    if (!seenMethods.add(method.signatureKey())) {
                        // Overridden by a subclass
                        continue;
                    }
                    if (signalParam != null) {
                        if (Modifier.isPrivate(method.flags())) {
                            throw new IllegalStateException(
                                    "A receiver method must not be private: " + methodDesc(method));
                        }
                        if (Modifier.isStatic(method.flags())) {
                            throw new IllegalStateException(
                                    "A receiver method must not be static: " + methodDesc(method));
                        }
                        ExecutionModel executionModel = getExecutionModel(method);
                        if (!receiverExecutorImplementation.isSupported(executionModel)) {
                            throw new IllegalStateException(
                                    "%s execution model is not supported: %s".formatted(executionModel, methodDesc(method)));
                        }
                        InvokerBuilder invokerBuilder = invokerFactory.createInvoker(bean, method)
                                .withInstanceLookup();
                        if (params.size() > 1) {
                            for (MethodParameterInfo param : params) {
                                if (param != signalParam) {
                                    invokerBuilder.withArgumentLookup(param.position());
                                }
                            }
                        }
                        List<AnnotationInstance> qualifiers = new ArrayList<>();
                        for (AnnotationInstance a : signalParam.declaredAnnotations()) {
                            if (knownQualifiers.contains(a.name())) {
                                qualifiers.add(a);
                            }
                        }
                        receivers.produce(

View on GitHub (pinned to e1c734241f)

Solutions

  1. Change the receiver method to match the supported execution model (e.g. make it a plain blocking method, or add/remove @Blocking).
  2. Configure/select a receiver executor implementation that supports the method's execution model.
  3. Change the return type (e.g. void instead of Uni<...>) if reactive return is the problem.

Example fix

// before
@SignalReceiver
Uni<Void> onSig(SignalEvent evt) { ... }

// after (blocking executor)
@SignalReceiver
void onSig(SignalEvent evt) { ... }
Defensive patterns

Strategy: validation

Validate before calling

// Before registering, check the executor supports the model:
ExecutionModel model = getExecutionModel(method);
if (!executor.supports(model)) throw new IllegalArgumentException("unsupported execution model: " + model);

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/21c0a7acbd7b3c52. Report an issue: GitHub.