quarkusio/quarkus · error · IllegalStateException

Synthetic bean has ExtendedBeanConfigurator#checkActive(), b

Error message

Synthetic bean has ExtendedBeanConfigurator#checkActive(), but does not have ExtendedBeanConfigurator#supplier() / createWith() / runtimeValue() / runtimeProxy()

What it means

When ExtendedBeanConfigurator#checkActive() is set, done() requires that the bean's creation also be configured through a recorder proxy (supplier/createWith/runtimeValue/runtimeProxy). checkActive alone cannot produce an instance, so done() throws this IllegalStateException to enforce a consistent configuration.

Source

Thrown at extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/SyntheticBeanBuildItem.java:154

        ExtendedBeanConfigurator(DotName implClazz) {
            super(implClazz);
            this.staticInit = true;
        }

        /**
         * Finish the configurator.
         *
         * @return a new build item
         */
        public SyntheticBeanBuildItem done() {
            if (supplier == null && runtimeValue == null && fun == null && runtimeProxy == null && creatorConsumer == null) {
                throw new IllegalStateException(
                        "Synthetic bean does not provide a creation method, use ExtendedBeanConfigurator#creator(), ExtendedBeanConfigurator#supplier(), ExtendedBeanConfigurator#createWith() or ExtendedBeanConfigurator#runtimeValue()");
            }
            if (checkActive != null && supplier == null && runtimeValue == null && fun == null && runtimeProxy == null) {
                // "check active" procedure is set via recorder proxy,
                // creation function must also be set via recorder proxy
                throw new IllegalStateException(
                        "Synthetic bean has ExtendedBeanConfigurator#checkActive(), but does not have ExtendedBeanConfigurator#supplier() / createWith() / runtimeValue() / runtimeProxy()");
            }
            return new SyntheticBeanBuildItem(this);
        }

        /**
         * The contextual bean instance is supplied by a proxy returned from a recorder method.
         * <p>
         * Use {@link #createWith(Function)} if you want to leverage build-time parameters or synthetic injection points.
         *
         * @param supplier A supplier returned from a recorder method
         * @return self
         * @throws IllegalArgumentException If the supplier argument is not a proxy returned from a recorder method
         */
        public ExtendedBeanConfigurator supplier(Supplier<?> supplier) {
            checkReturnedProxy(supplier);
            checkMultipleCreationMethods();
            this.supplier = Objects.requireNonNull(supplier);

View on GitHub (pinned to e1c734241f)

Solutions

  1. Replace .creator(...)/.createWith(lambda) with a recorder-proxy based creation: .supplier(recorder.xxx()) or .createWith(recorder.xxx()) or .runtimeValue(recorder.xxx())
  2. Or remove checkActive() if it is not required
  3. Keep both the checkActive proxy and creation proxy from the same recorder invocation pattern
  4. See SyntheticBeanBuildItem javadoc: checkActive requires proxy-based creation

Example fix

// before
configure(Foo.class).scope(Singleton.class).creator(ctx -> new Foo()).checkActive(recorder.isActive()).done();
// after
configure(Foo.class).scope(Singleton.class).supplier(recorder.fooSupplier()).checkActive(recorder.isActive()).done();
Defensive patterns

Strategy: validation

Validate before calling

// If using .checkActive(recorder.check()), creation must also be a recorder proxy:
// .supplier(recorder.create()) — not .creator(ctx -> ...) and not omitted

Prevention

When it happens

Trigger: Calling .checkActive(recorder.someCheck()) on SyntheticBeanBuildItem.configure(...) but then relying on creator()/fun (non-proxy creation) or omitting creation entirely, then calling done().

Common situations: Extension authors adding an active-check to an existing synthetic bean whose creation is via a plain creator lambda instead of a recorder proxy; partial migration of old bean registrations to the checkActive API.

Related errors


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