{"record":{"id":"44f26b423675b494","repo":"quarkusio/quarkus","slug":"the-openid-connect-database-token-state-manager-ex","errorCode":null,"errorMessage":"The OpenID Connect Database Token State Manager extension is only supported when exactly one Reactive SQL Client extension is present.","messagePattern":"The OpenID Connect Database Token State Manager extension is only supported when exactly one Reactive SQL Client extension is present\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/oidc-db-token-state-manager/deployment/src/main/java/io/quarkus/oidc/db/token/state/manager/OidcDbTokenStateManagerProcessor.java","lineNumber":92,"sourceCode":"                .alternative(true)\n                .priority(1)\n                .addType(TokenStateManager.class)\n                .unremovable()\n                .scope(Singleton.class)\n                .supplier(recorder.createTokenStateManager(insertStatement, deleteStatement, getQuery))\n                .done();\n    }\n\n    @BuildStep\n    ReactiveSqlClientBuildItem validateReactiveSqlClient(\n            Capabilities capabilities) {\n        ReactiveSqlClientBuildItem sqlClientDbTable = null;\n        for (String reactiveClient : SUPPORTED_REACTIVE_CLIENTS) {\n            if (capabilities.isPresent(reactiveClient)) {\n                if (sqlClientDbTable == null) {\n                    sqlClientDbTable = new ReactiveSqlClientBuildItem(reactiveClient);\n                } else {\n                    throw new ConfigurationException(\"The OpenID Connect Database Token State Manager extension is \"\n                            + \"only supported when exactly one Reactive SQL Client extension is present.\");\n                }\n            }\n        }\n        if (sqlClientDbTable == null) {\n            throw new ConfigurationException(\n                    \"The OpenID Connect Database Token State Manager extension requires Reactive SQL Client extension. \"\n                            + \"Please refer to the https://quarkus.io/guides/reactive-sql-clients for more information.\");\n        }\n        return sqlClientDbTable;\n    }\n\n    @BuildStep\n    AdditionalBeanBuildItem makeDbTokenStateManagerInitializerBean() {\n        return new AdditionalBeanBuildItem(OidcDbTokenStateManagerInitializer.class);\n    }\n\n    @BuildStep","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/oidc-db-token-state-manager/deployment/src/main/java/io/quarkus/oidc/db/token/state/manager/OidcDbTokenStateManagerProcessor.java#L74-L110","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nquarkus-reactive-pg-client + quarkus-reactive-mysql-client\n// after\nkeep only quarkus-reactive-pg-client (remove quarkus-reactive-mysql-client)","handlingStrategy":"validation","validationCode":"List<String> present = SUPPORTED_REACTIVE_CLIENTS.stream()\n    .filter(capabilities::isPresent).toList();\nif (present.size() != 1) {\n    throw new IllegalStateException(\"Exactly one reactive SQL client required, found: \" + present);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["quarkus","oidc","reactive-sql","dependency-conflict"],"backgroundTag":"ambiguous-dependency-configuration","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-15T02:17:10.978Z"}