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
- Set idmEngineConfiguration to a SpringIdmEngineConfiguration instance on the configurator
- Remove SpringIdmEngineConfigurator if you intentionally run a standalone (non-Spring) idm engine, using StandaloneIdmEngineConfiguration instead
- Let the configurator create its own default config: don't call setIdmEngineConfiguration at all (it lazily creates SpringIdmEngineConfiguration)
- 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
- Pair SpringIdmEngineConfigurator only with SpringIdmEngineConfiguration
- Or omit setIdmEngineConfiguration and let the configurator default it
- Review copied standalone examples for Spring projects
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
- Expected dmnEngine configuration to be of type SpringDmnEngi
- no org.flowable.app.engine.AppEngine defined in the applicat
- transactionManager is required property for SpringAppEngineC
- transactionManager is required property for SpringCmmnEngine
- transactionManager is required property for SpringDmnEngineC
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/00cbbbf179cf38ff.
Report an issue: GitHub.