flowable/flowable-engine · critical · FlowableException

EventRegistryEngineConfiguration is required

Error message

EventRegistryEngineConfiguration is required

What it means

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.

Source

Thrown at modules/flowable-event-registry-configurator/src/main/java/org/flowable/eventregistry/impl/configurator/EventRegistryEngineConfigurator.java:84

    protected void initialiseEventRegistryEngineConfiguration(EventRegistryEngineConfiguration eventRegistryEngineConfiguration) {
        // meant to be overridden
    }

    @Override
    protected List<Class<? extends Entity>> getEntityInsertionOrder() {
        return EntityDependencyOrder.INSERT_ORDER;
    }

    @Override
    protected List<Class<? extends Entity>> getEntityDeletionOrder() {
        return EntityDependencyOrder.DELETE_ORDER;
    }

    @Override
    protected EventRegistryEngine buildEngine() {
        if (eventEngineConfiguration == null) {
            throw new FlowableException("EventRegistryEngineConfiguration is required");
        }

        return eventEngineConfiguration.buildEventRegistryEngine();
    }

    public EventRegistryEngineConfiguration getEventEngineConfiguration() {
        return eventEngineConfiguration;
    }

    public EventRegistryEngineConfigurator setEventEngineConfiguration(EventRegistryEngineConfiguration eventEngineConfiguration) {
        this.eventEngineConfiguration = eventEngineConfiguration;
        return this;
    }

    public EventRegistryEngine getEventRegistryEngine() {
        return buildEngine;
    }

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Create an EventRegistryEngineConfiguration and call configurator.setEventEngineConfiguration(eventRegistryEngineConfiguration) before the engine builds.
  2. In Spring, ensure the EventRegistryEngineConfiguration bean exists and is injected into the configurator.
  3. Check the order/registration of configurators so the event registry configuration is initialized before buildEngine runs.

Example fix

// before
EventRegistryEngineConfigurator configurator = new EventRegistryEngineConfigurator();
processEngineConfiguration.addConfigurator(configurator);
// after
EventRegistryEngineConfiguration eventConfig = new EventRegistryEngineConfiguration();
EventRegistryEngineConfigurator configurator = new EventRegistryEngineConfigurator();
configurator.setEventEngineConfiguration(eventConfig);
processEngineConfiguration.addConfigurator(configurator);
Defensive patterns

Strategy: validation

Validate before calling

EventRegistryEngineConfigurator configurator = new EventRegistryEngineConfigurator();
if (configurator.getEventEngineConfiguration() == null) {
    configurator.setEventEngineConfiguration(new EventRegistryEngineConfiguration());
}
processEngineConfiguration.addConfigurator(configurator);

Type guard

boolean isConfiguratorReady(EventRegistryEngineConfigurator c) { return c.getEventEngineConfiguration() != null; }

Try / catch

try {
    processEngine = processEngineConfiguration.buildProcessEngine();
} catch (FlowableException e) {
    if (e.getMessage() != null && e.getMessage().contains("EventRegistryEngineConfiguration is required")) {
        LOG.error("Set the event engine configuration on the configurator before building the engine");
    }
    throw e;
}

Prevention

When it happens

Trigger: Registering EventRegistryEngineConfigurator in an EngineConfigurationConfigurer / process engine configuration without calling setEventEngineConfiguration(...), then booting the engine.

Common situations: 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.

Understand the failure class

Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/f83359d298e5344c. Report an issue: GitHub.