{"record":{"id":"ebc70ecc5b445821","repo":"quarkusio/quarkus","slug":"no-cdi-container-is-available","errorCode":null,"errorMessage":"No CDI container is available","messagePattern":"No CDI container is available","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"critical","filePath":"independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/ArcCDIProvider.java","lineNumber":29,"sourceCode":"\nimport io.quarkus.arc.Arc;\n\n/**\n *\n * @author Martin Kouba\n */\npublic class ArcCDIProvider implements CDIProvider {\n\n    private final ArcCDI arcCDI;\n\n    public ArcCDIProvider() {\n        this.arcCDI = new ArcCDI();\n    }\n\n    @Override\n    public CDI<Object> getCDI() {\n        if (Arc.container() == null) {\n            throw new IllegalStateException(\"No CDI container is available\");\n        }\n        return arcCDI;\n    }\n\n    static class ArcCDI extends CDI<Object> {\n\n        private final Instance<Object> instanceDelegate;\n\n        public ArcCDI() {\n            this.instanceDelegate = Arc.requireContainer().beanManager().createInstance();\n        }\n\n        @Override\n        public Instance<Object> select(Annotation... qualifiers) {\n            return instanceDelegate.select(qualifiers);\n        }\n\n        @Override","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/arc/runtime/src/main/java/io/quarkus/arc/impl/ArcCDIProvider.java#L11-L47","documentation":"ArcCDIProvider.getCDI() throws IllegalStateException when Arc.container() returns null, meaning no CDI container has been initialized (or it was already shut down). CDI.current()/CDIUtils require a running Arc container to return a CDI handle.","triggerScenarios":"Calling CDI.current() or the CDIProvider.getCDI() before Arc.initialize(), after Arc.shutdown(), or in a process/ClassLoader where the Arc container was never started (plain unit tests, static initializers, early startup code).","commonSituations":"Unit tests exercising CDI code without QuarkusTest; code running in a static field initializer before the container boots; use of CDI.current() in a separate thread before/after application lifecycle; calling CDI.current() during container shutdown.","solutions":["Ensure the application/container is started before calling CDI.current() (in Quarkus, run within a @QuarkusTest or the running app)","In plain tests, call Arc.initialize() first and Arc.shutdown() in @AfterAll","Avoid static-initializer use of CDI.current(); obtain beans lazily at runtime","Check for accidental Arc.shutdown() calls or container restarts preceding the access"],"exampleFix":"// before\nMyBean b = CDI.current().select(MyBean.class).get(); // IllegalStateException in plain test\n// after\nArc.initialize();\ntry {\n    MyBean b = CDI.current().select(MyBean.class).get();\n} finally {\n    Arc.shutdown();\n}","handlingStrategy":"validation","validationCode":"ArcContainer c = Arc.container(); if (c == null) { Arc.initialize(); }","typeGuard":"boolean ready = Arc.container() != null;","tryCatchPattern":"try { CDI<Object> cdi = CDI.current(); } catch (IllegalStateException e) { Arc.initialize(); CDI<Object> cdi = CDI.current(); }","preventionTips":["Never call CDI.current() in static initializers","In tests, initialize Arc in @BeforeAll and shut down in @AfterAll","Guard against premature Arc.shutdown() in lifecycle code"],"tags":["cdi","initialization","lifecycle"],"backgroundTag":"cdi-container-not-initialized","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"}