flowable/flowable-engine · error · IllegalArgumentException

Expected idmEngine configuration to be of type SpringIdmEngi

Error message

Expected idmEngine configuration to be of type SpringIdmEngineConfiguration but was ${actualType}

What it means

Plain IllegalArgumentException thrown by SpringIdmEngineConfigurator.configure when the configured idmEngineConfiguration object is not an instance of SpringIdmEngineConfiguration. The Spring configurator requires its Spring-aware configuration (it sets the Spring transaction manager on it), so a plain IdmEngineConfiguration cannot be used with this configurator.

Source

Thrown at modules/flowable-idm-spring-configurator/src/main/java/org/flowable/idm/spring/configurator/SpringIdmEngineConfigurator.java:30

 */
package org.flowable.idm.spring.configurator;

import org.flowable.common.engine.impl.AbstractEngineConfiguration;
import org.flowable.common.spring.SpringEngineConfiguration;
import org.flowable.idm.engine.configurator.IdmEngineConfigurator;
import org.flowable.idm.spring.SpringIdmEngineConfiguration;

/**
 * @author Tijs Rademakers
 */
public class SpringIdmEngineConfigurator extends IdmEngineConfigurator {

    @Override
    public void configure(AbstractEngineConfiguration engineConfiguration) {
        if (idmEngineConfiguration == null) {
            idmEngineConfiguration = new SpringIdmEngineConfiguration();
        } else if (!(idmEngineConfiguration instanceof SpringIdmEngineConfiguration)) {
            throw new IllegalArgumentException("Expected idmEngine configuration to be of type "
                + SpringIdmEngineConfiguration.class + " but was " + idmEngineConfiguration.getClass());
        }
        initialiseCommonProperties(engineConfiguration, idmEngineConfiguration);
        SpringEngineConfiguration springEngineConfiguration = (SpringEngineConfiguration) engineConfiguration;
        ((SpringIdmEngineConfiguration) idmEngineConfiguration).setTransactionManager(springEngineConfiguration.getTransactionManager());

        initEngine();

        initServiceConfigurations(engineConfiguration, idmEngineConfiguration);
    }

    public SpringIdmEngineConfigurator setIdmEngineConfiguration(SpringIdmEngineConfiguration idmEngineConfiguration) {
        this.idmEngineConfiguration = idmEngineConfiguration;
        return this;
    }

}

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Set idmEngineConfiguration to a SpringIdmEngineConfiguration instance on the configurator
  2. Remove SpringIdmEngineConfigurator if you intentionally run a standalone (non-Spring) idm engine, using StandaloneIdmEngineConfiguration instead
  3. Let the configurator create its own default config: don't call setIdmEngineConfiguration at all (it lazily creates SpringIdmEngineConfiguration)
  4. Check Spring bean definitions so the injected type is SpringIdmEngineConfiguration

Example fix

// before
SpringIdmEngineConfigurator cfg = new SpringIdmEngineConfigurator();
cfg.setIdmEngineConfiguration(new IdmEngineConfiguration());
// after
SpringIdmEngineConfigurator cfg = new SpringIdmEngineConfigurator();
cfg.setIdmEngineConfiguration(new SpringIdmEngineConfiguration());
Defensive patterns

Strategy: validation

Validate before calling

// Java guard before configuring
if (!(cfg.getIdmEngineConfiguration() instanceof SpringIdmEngineConfiguration)
    && cfg.getIdmEngineConfiguration() != null) {
  cfg.setIdmEngineConfiguration(new SpringIdmEngineConfiguration());
}

Type guard

// Java instanceof narrowing
if (idmCfg instanceof SpringIdmEngineConfiguration springCfg) {
    springCfg.setTransactionManager(txManager);
}

Prevention

When it happens

Trigger: Programmatic engine configuration where engineConfig.setIdmEngineConfiguration(new IdmEngineConfiguration()) (standalone config) is combined with new SpringIdmEngineConfigurator(), then any engine (e.g. ProcessEngineConfiguration) is built.

Common situations: Mixing Spring and non-Spring flowable-idm setups after copying configuration code from a standalone example; upgrading Flowable and keeping an old non-Spring idm configuration class in a Spring app; bean of wrong type wired by Spring autowiring.

Related errors


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