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);
}
@BuildStepView on GitHub (pinned to e1c734241f)
Solutions
- Keep exactly one supported reactive SQL client extension in the application
- Remove or exclude the unneeded reactive SQL client dependencies
- 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
- Keep only one reactive SQL client extension in the app that uses oidc-db-token-state-manager
- Audit dependencies with mvn dependency:tree for duplicate SQL client extensions
- Use separate applications/services when multiple databases are needed
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
- Unknown Reactive Sql Client <client>
- The OpenID Connect Database Token State Manager extension re
- The '%s' property can only be set to 'idtoken' for WEB_APP a
- '%s' must be enabled to use '%s'
- UserInfo is required but DefaultTokenStateManager is configu
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/44f26b423675b494.
Report an issue: GitHub.