quarkusio/quarkus · error · ConfigurationException

The OpenID Connect Database Token State Manager extension is

Error message

The OpenID Connect Database Token State Manager extension is only supported when exactly one Reactive SQL Client extension is present.

What it means

validateReactiveSqlClient enforces that exactly one supported Reactive SQL client extension is present when quarkus-oidc-db-token-state-manager is used. If two or more supported clients are detected, the table-creation and statement SQL cannot be unambiguously chosen, so a ConfigurationException is thrown.

Source

Thrown at extensions/oidc-db-token-state-manager/deployment/src/main/java/io/quarkus/oidc/db/token/state/manager/OidcDbTokenStateManagerProcessor.java:92

                .alternative(true)
                .priority(1)
                .addType(TokenStateManager.class)
                .unremovable()
                .scope(Singleton.class)
                .supplier(recorder.createTokenStateManager(insertStatement, deleteStatement, getQuery))
                .done();
    }

    @BuildStep
    ReactiveSqlClientBuildItem validateReactiveSqlClient(
            Capabilities capabilities) {
        ReactiveSqlClientBuildItem sqlClientDbTable = null;
        for (String reactiveClient : SUPPORTED_REACTIVE_CLIENTS) {
            if (capabilities.isPresent(reactiveClient)) {
                if (sqlClientDbTable == null) {
                    sqlClientDbTable = new ReactiveSqlClientBuildItem(reactiveClient);
                } else {
                    throw new ConfigurationException("The OpenID Connect Database Token State Manager extension is "
                            + "only supported when exactly one Reactive SQL Client extension is present.");
                }
            }
        }
        if (sqlClientDbTable == null) {
            throw new ConfigurationException(
                    "The OpenID Connect Database Token State Manager extension requires Reactive SQL Client extension. "
                            + "Please refer to the https://quarkus.io/guides/reactive-sql-clients for more information.");
        }
        return sqlClientDbTable;
    }

    @BuildStep
    AdditionalBeanBuildItem makeDbTokenStateManagerInitializerBean() {
        return new AdditionalBeanBuildItem(OidcDbTokenStateManagerInitializer.class);
    }

    @BuildStep

View on GitHub (pinned to e1c734241f)

Solutions

  1. Keep exactly one supported reactive SQL client extension in the application
  2. Remove or exclude the unneeded reactive SQL client dependencies
  3. Consider managing token state differently if your app genuinely needs multiple reactive SQL clients

Example fix

// before
quarkus-reactive-pg-client + quarkus-reactive-mysql-client
// after
keep only quarkus-reactive-pg-client (remove quarkus-reactive-mysql-client)
Defensive patterns

Strategy: validation

Validate before calling

List<String> present = SUPPORTED_REACTIVE_CLIENTS.stream()
    .filter(capabilities::isPresent).toList();
if (present.size() != 1) {
    throw new IllegalStateException("Exactly one reactive SQL client required, found: " + present);
}

Prevention

When it happens

Trigger: Multiple SUPPORTED_REACTIVE_CLIENTS capabilities present simultaneously (e.g. both reactive-pg-client and reactive-mysql-client on the classpath) while the OIDC DB token state manager extension is installed.

Common situations: Having several reactive SQL clients for different datasources in one application and additionally enabling the OIDC DB token state manager; adding a second client dependency without realizing this extension supports only one.

Related errors


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