{"record":{"id":"e4b46adac3a2662f","repo":"quarkusio/quarkus","slug":"tls-configuration-name-is-set-but-the-tls-regis","errorCode":null,"errorMessage":"TLS configuration name '' is set but the TLS registry is not available.","messagePattern":"TLS configuration name '' is set but the TLS registry is not available\\.","errorType":"exception","errorClass":"io.quarkus.runtime.configuration.ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/reactive-datasource/runtime/src/main/java/io/quarkus/reactive/datasource/runtime/ReactivePoolUtil.java","lineNumber":172,"sourceCode":"        if (config.preparedStatementCacheSqlLimit().isPresent()) {\n            connectOptions.setPreparedStatementCacheSqlLimit(config.preparedStatementCacheSqlLimit().getAsInt());\n        }\n    }\n\n    /**\n     * Apply SSL/TLS, reconnect, and hostname verification settings from the generic reactive\n     * datasource config to connect options.\n     * <p>\n     * When a named TLS configuration is set via {@code tls-configuration-name}, it takes precedence\n     * over manual SSL properties (trust-certificate-*, key-certificate-*, trust-all, hostname-verification-algorithm).\n     */\n    public static void configureSsl(SqlConnectOptions connectOptions,\n            DataSourceReactiveRuntimeConfig config,\n            TlsConfigurationRegistry tlsRegistry) {\n        if (config.tlsConfigurationName().isPresent()) {\n            String tlsConfigName = config.tlsConfigurationName().get();\n            if (tlsRegistry == null) {\n                throw new ConfigurationException(\n                        \"TLS configuration name '\" + tlsConfigName + \"' is set but the TLS registry is not available.\");\n            }\n            Optional<TlsConfiguration> maybeTlsConfig = tlsRegistry.get(tlsConfigName);\n            if (maybeTlsConfig.isEmpty()) {\n                throw new ConfigurationException(\"Unable to find the TLS configuration '\" + tlsConfigName\n                        + \"' for the reactive datasource.\");\n            }\n            TlsConfiguration tlsConfig = maybeTlsConfig.get();\n            ClientSSLOptions sslOptions = tlsConfig.getClientSSLOptions();\n            if (sslOptions == null) {\n                sslOptions = new ClientSSLOptions();\n            }\n            connectOptions.setSslOptions(sslOptions);\n\n            if (hasManualSslProperties(config)) {\n                log.warn(\"Manual SSL properties (trust-certificate-*, key-certificate-*, trust-all,\"\n                        + \" hostname-verification-algorithm) are ignored when a named TLS configuration\"\n                        + \" (tls-configuration-name=\" + tlsConfigName + \") is set.\");","sourceCodeStart":154,"sourceCodeEnd":190,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/reactive-datasource/runtime/src/main/java/io/quarkus/reactive/datasource/runtime/ReactivePoolUtil.java#L154-L190","documentation":"When quarkus.datasource.\"x\".reactive.tls-configuration-name is set, ReactivePoolUtil.configureSsl() resolves it via the injected TlsConfigurationRegistry. If the TLS registry is null — meaning the TLS registry support (quarkus-tls-registry) is not on the classpath/available — a ConfigurationException is thrown because the named TLS config can never be resolved.","triggerScenarios":"Setting quarkus.datasource.\"<name>\".reactive.tls-configuration-name while the application lacks the quarkus-tls-registry extension (or a null registry is passed programmatically to configureSsl).","commonSituations":"Copying a datasource config that uses a named TLS configuration into a project that never added the TLS registry extension; using the reactive datasource without its TLS-registry-capable deployment.","solutions":["Add the quarkus-tls-registry extension: add io.quarkus:quarkus-tls-registry to pom.xml","Remove quarkus.datasource.\"<name>\".reactive.tls-configuration-name if you intend to use inline trust/keystore settings instead","Rebuild the application so the registry bean is generated"],"exampleFix":"<!-- before -->\n<dependency>io.quarkus:quarkus-reactive-pg-client</dependency>\n<!-- after -->\n<dependency>io.quarkus:quarkus-tls-registry</dependency>\n<dependency>io.quarkus:quarkus-reactive-pg-client</dependency>","handlingStrategy":"validation","validationCode":"if (config.tlsConfigurationName().isPresent()\n        && !CdiUtil.current().select(TlsConfigurationRegistry.class).isResolvable()) {\n    throw new IllegalStateException(\"Add io.quarkus:quarkus-tls-registry to use tls-configuration-name\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    ReactivePoolUtil.configureSsl(opts, config, registry);\n} catch (ConfigurationException e) {\n    throw new IllegalStateException(\"TLS registry missing: add quarkus-tls-registry extension\", e);\n}","preventionTips":["Add quarkus-tls-registry whenever tls-configuration-name is used","Check dependency list when porting datasource configs between projects","Prefer inline TLS properties if the registry extension is not desired"],"tags":["quarkus","tls","configuration","reactive-datasource"],"backgroundTag":"missing-tls-registry","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}