{"record":{"id":"bd85a5a7601ced35","repo":"quarkusio/quarkus","slug":"custom-jdbc-delegate-implementation-class-s-was","errorCode":null,"errorMessage":"Custom JDBC delegate implementation class '%s' was not found in Jandex index. Make sure the dependency containing this class has proper marker file enabling discovery. Alternatively, you can index a dependency using IndexDependencyBuildItem.","messagePattern":"Custom JDBC delegate implementation class '(.+?)' was not found in Jandex index\\. Make sure the dependency containing this class has proper marker file enabling discovery\\. Alternatively, you can index a dependency using IndexDependencyBuildItem\\.","errorType":"exception","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"extensions/quartz/deployment/src/main/java/io/quarkus/quartz/deployment/QuartzProcessor.java","lineNumber":150,"sourceCode":"        }\n\n        if (capabilities.isMissing(Capability.AGROAL)) {\n            throw new ConfigurationException(\n                    \"The Agroal extension is missing and it is required when a Quartz JDBC store is used.\");\n        }\n\n        Optional<String> driverDelegate = config.driverDelegate();\n        if (driverDelegate.isPresent()) {\n            // user-specified custom delegate\n            IndexView indexView = indexBuildItem.getIndex();\n            ClassInfo customDelegate = indexView.getClassByName(driverDelegate.get());\n            if (customDelegate == null) {\n                String message = String.format(\n                        \"Custom JDBC delegate implementation class '%s' was not found in Jandex index. \" +\n                                \"Make sure the dependency containing this class has proper marker file enabling discovery. \" +\n                                \"Alternatively, you can index a dependency using IndexDependencyBuildItem.\",\n                        driverDelegate.get());\n                throw new ConfigurationException(message);\n            } else {\n                // any custom implementation needs to be a subclass of known Quarkus delegate\n                boolean implementsKnownDelegate = false;\n                for (DotName knownImplementation : Set.of(DELEGATE_MSSQL, DELEGATE_POSTGRESQL, DELEGATE_DB2V8, DELEGATE_STDJDBC,\n                        DELEGATE_HSQLDB)) {\n                    for (ClassInfo classInfo : indexView.getAllKnownSubclasses(knownImplementation)) {\n                        if (classInfo.name().equals(customDelegate.name())) {\n                            implementsKnownDelegate = true;\n                            break;\n                        }\n                    }\n                }\n                if (!implementsKnownDelegate) {\n                    String message = String.format(\n                            \"Custom JDBC delegate implementation with name '%s' needs to be a subclass of one of the existing Quarkus delegates such as io.quarkus.quartz.runtime.jdbc.QuarkusPostgreSQLDelegate.\",\n                            driverDelegate.get());\n                    throw new ConfigurationException(message);\n                }","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/quartz/deployment/src/main/java/io/quarkus/quartz/deployment/QuartzProcessor.java#L132-L168","documentation":"When quarkus.quartz.store-type is a JDBC store and quarkus.quartz.driver-delegate points to a custom class, the QuartzProcessor build step looks that class up in the application's Jandex index at build time. If the class is not present in the index, the processor cannot validate or register it, so it fails the build with this ConfigurationException. This typically means the class lives in a dependency that was not indexed for discovery.","triggerScenarios":"Setting quarkus.quartz.driver-delegate=<fqcn> with quarkus.quartz.store-type=jdbc-job-store (or clustered) when the named class is not in any indexed application dependency: the class is in a third-party jar without a Jandex marker file (META-INF/jandex.idx) and no IndexDependencyBuildItem was produced; or the FQCN is misspelled; or the class is only present at runtime, not at build time.","commonSituations":"Using a vendor delegate from a shared library that was never indexed; typos in the driver-delegate property; upgrading Quarkus where a previously auto-indexed dependency lost its marker file; copying a config from another project where the delegate class existed in the app itself.","solutions":["Verify the quarkus.quartz.driver-delegate value is the exact fully-qualified class name and that the class exists on the deployment classpath.","Move the delegate class into your application (e.g. src/main/java) so Jandex indexes it automatically.","If the class is in a third-party jar, register io.quarkus.deployment.builditem.IndexDependencyBuildItem in a build step, or use quarkus.index-dependency.<name>.group-id / .artifact-id config.","If you don't need a custom delegate, remove the driver-delegate property and let Quarkus guess the driver from the datasource db-kind."],"exampleFix":"// before (application.properties)\nquarkus.quartz.driver-delegate=com.example.mylib.MyDelegate\n// class lives in unindexed jar\n\n// after\nquarkus.index-dependency.mylib.group-id=com.example\nquarkus.index-dependency.mylib.artifact-id=mylib\nquarkus.quartz.driver-delegate=com.example.mylib.MyDelegate","handlingStrategy":"validation","validationCode":"// Ensure the class is indexed: keep it in src/main/java, or in a build step:\n// @BuildStep\n// IndexDependencyBuildItem indexMyLib() {\n//     return new IndexDependencyBuildItem(\"com.example\", \"mylib\");\n// }\n// or via config: quarkus.index-dependency.mylib.group-id / .artifact-id\n// Classpath sanity check:\ntry {\n    Class.forName(\"com.example.mylib.MyDelegate\", false,\n        Thread.currentThread().getContextClassLoader());\n} catch (ClassNotFoundException e) {\n    throw new IllegalStateException(\"driver-delegate class missing: \" + e.getMessage());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep custom delegates in your application sources so Jandex indexes them automatically.","For third-party delegates, always register quarkus.index-dependency.<name>.group-id/artifact-id.","Double-check the fully-qualified class name against the actual package.","Prefer removing driver-delegate and letting Quarkus guess from db-kind unless customization is required."],"tags":["quarkus","quartz","jandex","build-time","jdbc-store"],"backgroundTag":"class-not-in-jandex-index","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"}