{"record":{"id":"946de015f2f70ecf","repo":"flowable/flowable-engine","slug":"cmmnengineconfiguration-is-required","errorCode":null,"errorMessage":"CmmnEngineConfiguration is required","messagePattern":"CmmnEngineConfiguration is required","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-cmmn-engine-configurator/src/main/java/org/flowable/cmmn/engine/configurator/CmmnEngineConfigurator.java","lineNumber":182,"sourceCode":"            callbacks.put(CallbackTypes.PLAN_ITEM_CHILD_PROCESS, new ArrayList<>());\n        }\n        callbacks.get(CallbackTypes.PLAN_ITEM_CHILD_PROCESS).add(new ChildProcessInstanceStateChangeCallback(cmmnEngineConfiguration));\n    }\n\n    @Override\n    protected List<Class<? extends Entity>> getEntityInsertionOrder() {\n        return EntityDependencyOrder.INSERT_ORDER;\n    }\n\n    @Override\n    protected List<Class<? extends Entity>> getEntityDeletionOrder() {\n        return EntityDependencyOrder.DELETE_ORDER;\n    }\n\n    @Override\n    protected CmmnEngine buildEngine() {\n        if (cmmnEngineConfiguration == null) {\n            throw new FlowableException(\"CmmnEngineConfiguration is required\");\n        }\n\n        return cmmnEngineConfiguration.buildCmmnEngine();\n    }\n\n    public CmmnEngineConfiguration getCmmnEngineConfiguration() {\n        return cmmnEngineConfiguration;\n    }\n\n    public CmmnEngineConfigurator setCmmnEngineConfiguration(CmmnEngineConfiguration cmmnEngineConfiguration) {\n        this.cmmnEngineConfiguration = cmmnEngineConfiguration;\n        return this;\n    }\n}\n","sourceCodeStart":164,"sourceCodeEnd":197,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-cmmn-engine-configurator/src/main/java/org/flowable/cmmn/engine/configurator/CmmnEngineConfigurator.java#L164-L197","documentation":"The CmmnEngineConfigurator builds its CmmnEngine from a CmmnEngineConfiguration supplied beforehand. If no configuration was set on the configurator before the process engine bootstraps its configurators, buildEngine throws this FlowableException.","triggerScenarios":"Adding a CmmnEngineConfigurator to a ProcessEngineConfiguration without calling setCmmnEngineConfiguration; programmatically invoking buildEngine/buildProcessEngine before configuring.","commonSituations":"Spring Boot auto-configuration bypassed with manual configurator registration; copying configurator setup from older Flowable versions where the configuration was created internally; partial initialization ordering.","solutions":["Call cmmnEngineConfigurator.setCmmnEngineConfiguration(new CmmnEngineConfiguration()... ) before bootstrapping the process engine.","If using Spring Boot, do not manually register the configurator and let flowable-spring-boot autoconfigure it.","Verify configurator ordering so the CMMN configurator is initialized with its configuration present."],"exampleFix":"// before\nengineConfigurator.getEngineConfigurators().add(new CmmnEngineConfigurator());\n// after\nCmmnEngineConfigurator cmmnConfigurator = new CmmnEngineConfigurator();\ncmmnConfigurator.setCmmnEngineConfiguration(CmmnEngineConfiguration.createDefaultCmmnEngineConfiguration());\nengineConfiguration.getEngineConfigurators().add(cmmnConfigurator);","handlingStrategy":"validation","validationCode":"CmmnEngineConfigurator c = new CmmnEngineConfigurator();\nif (c.getCmmnEngineConfiguration() == null) {\n    c.setCmmnEngineConfiguration(CmmnEngineConfiguration.createDefaultCmmnEngineConfiguration());\n}\nprocessEngineConfiguration.setEngineConfigurators(List.of(c));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never register CmmnEngineConfigurator without setCmmnEngineConfiguration","Prefer Spring Boot auto-configuration over manual wiring","Assert configurator completeness in an integration smoke test at startup"],"tags":["cmmn","engine-configuration","bootstrap"],"backgroundTag":"missing-required-config","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}