{"record":{"id":"f83359d298e5344c","repo":"flowable/flowable-engine","slug":"eventregistryengineconfiguration-is-required","errorCode":null,"errorMessage":"EventRegistryEngineConfiguration is required","messagePattern":"EventRegistryEngineConfiguration is required","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"critical","filePath":"modules/flowable-event-registry-configurator/src/main/java/org/flowable/eventregistry/impl/configurator/EventRegistryEngineConfigurator.java","lineNumber":84,"sourceCode":"\n    protected void initialiseEventRegistryEngineConfiguration(EventRegistryEngineConfiguration eventRegistryEngineConfiguration) {\n        // meant to be overridden\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 EventRegistryEngine buildEngine() {\n        if (eventEngineConfiguration == null) {\n            throw new FlowableException(\"EventRegistryEngineConfiguration is required\");\n        }\n\n        return eventEngineConfiguration.buildEventRegistryEngine();\n    }\n\n    public EventRegistryEngineConfiguration getEventEngineConfiguration() {\n        return eventEngineConfiguration;\n    }\n\n    public EventRegistryEngineConfigurator setEventEngineConfiguration(EventRegistryEngineConfiguration eventEngineConfiguration) {\n        this.eventEngineConfiguration = eventEngineConfiguration;\n        return this;\n    }\n\n    public EventRegistryEngine getEventRegistryEngine() {\n        return buildEngine;\n    }\n","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-event-registry-configurator/src/main/java/org/flowable/eventregistry/impl/configurator/EventRegistryEngineConfigurator.java#L66-L102","documentation":"EventRegistryEngineConfigurator.buildEngine builds the Event Registry engine during the process engine bootstrap. It throws FlowableException when eventEngineConfiguration was never set on the configurator, because the configurator cannot construct the engine without it. This is a startup-time configuration invariant check.","triggerScenarios":"Registering EventRegistryEngineConfigurator in an EngineConfigurationConfigurer / process engine configuration without calling setEventEngineConfiguration(...), then booting the engine.","commonSituations":"Custom process engine setup code that adds the configurator but forgets the configuration bean, Spring wiring where the EventRegistryEngineConfiguration bean was not injected, or copying configurator boilerplate from another engine (e.g. CMMN) without adapting it.","solutions":["Create an EventRegistryEngineConfiguration and call configurator.setEventEngineConfiguration(eventRegistryEngineConfiguration) before the engine builds.","In Spring, ensure the EventRegistryEngineConfiguration bean exists and is injected into the configurator.","Check the order/registration of configurators so the event registry configuration is initialized before buildEngine runs."],"exampleFix":"// before\nEventRegistryEngineConfigurator configurator = new EventRegistryEngineConfigurator();\nprocessEngineConfiguration.addConfigurator(configurator);\n// after\nEventRegistryEngineConfiguration eventConfig = new EventRegistryEngineConfiguration();\nEventRegistryEngineConfigurator configurator = new EventRegistryEngineConfigurator();\nconfigurator.setEventEngineConfiguration(eventConfig);\nprocessEngineConfiguration.addConfigurator(configurator);","handlingStrategy":"validation","validationCode":"EventRegistryEngineConfigurator configurator = new EventRegistryEngineConfigurator();\nif (configurator.getEventEngineConfiguration() == null) {\n    configurator.setEventEngineConfiguration(new EventRegistryEngineConfiguration());\n}\nprocessEngineConfiguration.addConfigurator(configurator);","typeGuard":"boolean isConfiguratorReady(EventRegistryEngineConfigurator c) { return c.getEventEngineConfiguration() != null; }","tryCatchPattern":"try {\n    processEngine = processEngineConfiguration.buildProcessEngine();\n} catch (FlowableException e) {\n    if (e.getMessage() != null && e.getMessage().contains(\"EventRegistryEngineConfiguration is required\")) {\n        LOG.error(\"Set the event engine configuration on the configurator before building the engine\");\n    }\n    throw e;\n}","preventionTips":["Always pair EventRegistryEngineConfigurator with an EventRegistryEngineConfiguration instance.","When using Spring, inject the configuration bean into the configurator.","Smoke-test engine bootstrapping in CI to catch missing configurator wiring early."],"tags":["configuration","startup","engine-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-14T05:17:10.506Z"}