{"record":{"id":"d54b679996e29446","repo":"quarkusio/quarkus","slug":"matching-scheduler-implementation-not-found","errorCode":null,"errorMessage":"Matching scheduler implementation not found: ","messagePattern":"Matching scheduler implementation not found: ","errorType":"exception","errorClass":"java.lang.IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/scheduler/runtime/src/main/java/io/quarkus/scheduler/runtime/CompositeScheduler.java","lineNumber":164,"sourceCode":"                if (schedulers.stream().map(Scheduler::implementation).noneMatch(implementation::equals)) {\n                    throw new IllegalArgumentException(\"Scheduler implementation not available: \" + implementation);\n                }\n            }\n            return super.setExecuteWith(implementation);\n        }\n\n        @Override\n        public Trigger schedule() {\n            String impl = implementation;\n            if (Scheduled.AUTO.equals(impl)) {\n                impl = schedulerContext.autoImplementation();\n            }\n            for (Scheduler scheduler : schedulers) {\n                if (scheduler.implementation().equals(impl)) {\n                    return copy(scheduler.newJob(identity)).schedule();\n                }\n            }\n            throw new IllegalStateException(\"Matching scheduler implementation not found: \" + implementation);\n        }\n\n        private JobDefinition<?> copy(JobDefinition<?> to) {\n            to.setCron(cron);\n            to.setInterval(every);\n            to.setDelayed(delayed);\n            to.setOverdueGracePeriod(overdueGracePeriod);\n            to.setConcurrentExecution(concurrentExecution);\n            to.setTimeZone(timeZone);\n            to.setExecutionMaxDelay(executionMaxDelay);\n            to.setDescription(description);\n            to.setExecuteWith(implementation);\n            if (skipPredicateClass != null) {\n                to.setSkipPredicate(skipPredicateClass);\n            } else if (skipPredicate != null) {\n                to.setSkipPredicate(skipPredicate);\n            }\n            if (taskClass != null) {","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/scheduler/runtime/src/main/java/io/quarkus/scheduler/runtime/CompositeScheduler.java#L146-L182","documentation":"When scheduling a job with an explicit executeWith implementation, CompositeScheduler looks up the matching backing Scheduler. This is a safety net: if no backing scheduler matches the implementation string at schedule time, scheduling fails with this IllegalStateException (the name was accepted earlier but no backend provides it).","triggerScenarios":"JobDefinition.setExecuteWith(\"impl\") where \"impl\" equals the job definition's implementation field but no Scheduler in the composite reports that implementation().","commonSituations":"Composite scheduler assembled without the backend that was referenced; race/registration mismatch between build-time metadata and runtime schedulers; custom scheduler not actually registered at runtime.","solutions":["Ensure the scheduler extension providing the implementation is included and initialized","Use Scheduled.AUTO instead of pinning a specific implementation","Verify the composite's schedulers list contains the implementation at runtime (log scheduler.implementation() values)","Rebuild the application after adding/removing scheduler extensions so metadata matches"],"exampleFix":"// before\nscheduler.newJob(\"id\").setExecuteWith(\"custom\").schedule(); // \"custom\" not registered\n// after\nscheduler.newJob(\"id\").setExecuteWith(Scheduled.AUTO).schedule();\n// or add the extension registering the \"custom\" scheduler","handlingStrategy":"validation","validationCode":"boolean registered = schedulers.stream()\n    .anyMatch(s -> s.implementation().equals(impl));\nif (!registered) throw new IllegalStateException(\"Backend not registered: \" + impl);","typeGuard":null,"tryCatchPattern":"try { scheduler.newJob(id).setExecuteWith(impl).schedule(); }\ncatch (IllegalStateException e) { scheduler.newJob(id).setExecuteWith(Scheduled.AUTO).schedule(); }","preventionTips":["Keep build-time metadata and runtime schedulers in sync by rebuilding after extension changes","Fallback to Scheduled.AUTO on failure","Verify backend registration at startup with a health check","Avoid pinning custom implementations unless their extension is guaranteed present"],"tags":["scheduler","runtime","quarkus"],"backgroundTag":"unknown-scheduler-implementation","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"}