flowable/flowable-engine · error · FlowableException

SpringCmmnEngineConfigurator accepts only…

Error message

SpringCmmnEngineConfigurator accepts only SpringCmmnEngineConfiguration. ${className}

What it means

FlowableException thrown by SpringCmmnEngineConfigurator.configure when the injected cmmnEngineConfiguration is not an instance of SpringCmmnEngineConfiguration. This configurator only knows how to integrate a Spring-aware CMMN engine configuration, so any other subclass is rejected.

Solutions

  1. Set the configurator's configuration to new SpringCmmnEngineConfiguration() or a subclass of it
  2. If you don't need Spring integration, use the plain CmmnEngineConfigurator instead
  3. Let the configurator create its own SpringCmmnEngineConfiguration by leaving cmmnEngineConfiguration unset
  4. Log the actual class name (appended in the message) and compare against the expected type

Example fix

// before
configurator.setCmmnEngineConfiguration(new CmmnEngineConfiguration());
// after
configurator.setCmmnEngineConfiguration(new SpringCmmnEngineConfiguration());
Defensive patterns

Strategy: validation

Validate before calling

if (!(configurator.getCmmnEngineConfiguration() == null || configurator.getCmmnEngineConfiguration() instanceof SpringCmmnEngineConfiguration)) { throw new IllegalStateException("use SpringCmmnEngineConfiguration"); }

Type guard

boolean accepts(CmmnEngineConfiguration cfg) { return cfg instanceof SpringCmmnEngineConfiguration; }

Try / catch

try { configurator.configure(engineConfiguration); } catch (FlowableException e) { if (e.getMessage().startsWith("SpringCmmnEngineConfigurator accepts only")) { log.error("wrong config type: {}", e.getMessage()); } throw e; }

Prevention

When it happens

Trigger: Programmatically adding SpringCmmnEngineConfigurator to an engine configuration and setting configurator.setCmmnEngineConfiguration(...) to a plain CmmnEngineConfiguration or another subclass instead of SpringCmmnEngineConfiguration.

Common situations: Spring configurator used in a non-Spring build; copy-pasted setup from the non-Spring CmmnEngineConfigurator; refactoring replaced the configuration class; classloader duplication causing instanceof checks to fail in exotic environments.

Related errors


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

Appendix: source

Thrown at modules/flowable-cmmn-spring-configurator/src/main/java/org/flowable/cmmn/spring/configurator/SpringCmmnEngineConfigurator.java:38

import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants;
import org.flowable.common.spring.SpringEngineConfiguration;
import org.flowable.job.service.JobServiceConfiguration;
import org.flowable.spring.SpringProcessEngineConfiguration;

/**
 * @author Tijs Rademakers
 * @author Joram Barrez
 */
public class SpringCmmnEngineConfigurator extends CmmnEngineConfigurator {

    @Override
    public void configure(AbstractEngineConfiguration engineConfiguration) {
        if (cmmnEngineConfiguration == null) {
            cmmnEngineConfiguration = new SpringCmmnEngineConfiguration();
        }

        if (!(cmmnEngineConfiguration instanceof SpringCmmnEngineConfiguration)) {
            throw new FlowableException("SpringCmmnEngineConfigurator accepts only SpringCmmnEngineConfiguration. " + cmmnEngineConfiguration.getClass().getName());
        }

        initialiseCommonProperties(engineConfiguration, cmmnEngineConfiguration);

        SpringEngineConfiguration springEngineConfiguration = (SpringEngineConfiguration) engineConfiguration;
        
        SpringProcessEngineConfiguration springProcessEngineConfiguration = null;
        if (springEngineConfiguration instanceof SpringProcessEngineConfiguration) {
            springProcessEngineConfiguration = (SpringProcessEngineConfiguration) springEngineConfiguration;
        } else {
            AbstractEngineConfiguration processEngineConfiguration = engineConfiguration.getEngineConfigurations().get(EngineConfigurationConstants.KEY_PROCESS_ENGINE_CONFIG);
            if (processEngineConfiguration instanceof SpringProcessEngineConfiguration) {
                springProcessEngineConfiguration = (SpringProcessEngineConfiguration) processEngineConfiguration;
            }
        }
        
        if (springProcessEngineConfiguration != null) {
           copyProcessEngineProperties(springProcessEngineConfiguration);

View on GitHub (pinned to d6d39ce1c6)