flowable/flowable-engine · error · FlowableException
transactionManager is required property for SpringDmnEngineC
Error message
transactionManager is required property for SpringDmnEngineConfiguration, use StandaloneDmnEngineConfiguration otherwise
What it means
SpringDmnEngineConfiguration.createTransactionInterceptor() requires a Spring PlatformTransactionManager to build its SpringTransactionInterceptor. If transactionManager is null, it throws FlowableException telling you to use StandaloneDmnEngineConfiguration for non-Spring, non-transaction-managed setups.
Source
Thrown at modules/flowable-dmn-spring/src/main/java/org/flowable/dmn/spring/SpringDmnEngineConfiguration.java:97
beans = new SpringBeanFactoryProxyMap(applicationContext);
}
}
public void setTransactionSynchronizationAdapterOrder(Integer transactionSynchronizationAdapterOrder) {
this.transactionSynchronizationAdapterOrder = transactionSynchronizationAdapterOrder;
}
@Override
public void initDefaultCommandConfig() {
if (defaultCommandConfig == null) {
defaultCommandConfig = new CommandConfig().setContextReusePossible(true);
}
}
@Override
public CommandInterceptor createTransactionInterceptor() {
if (transactionManager == null) {
throw new FlowableException("transactionManager is required property for SpringDmnEngineConfiguration, use " + StandaloneDmnEngineConfiguration.class.getName() + " otherwise");
}
return new SpringTransactionInterceptor(transactionManager);
}
@Override
public void initTransactionContextFactory() {
if (transactionContextFactory == null && transactionManager != null) {
transactionContextFactory = new SpringTransactionContextFactory(transactionManager, transactionSynchronizationAdapterOrder);
}
}
protected void autoDeployResources(DmnEngine dmnEngine) {
if (deploymentResources != null && deploymentResources.length > 0) {
final AutoDeploymentStrategy<DmnEngine> strategy = getAutoDeploymentStrategy(deploymentMode);
strategy.deployResources(deploymentName, deploymentResources, dmnEngine);
}
}View on GitHub (pinned to d6d39ce1c6)
Solutions
- Set the transaction manager: config.setTransactionManager(platformTransactionManager) before building the engine.
- If you don't need Spring transaction management, use StandaloneDmnEngineConfiguration instead.
- In XML, add <property name="transactionManager" ref="transactionManager"/> to the configuration bean.
- If using DmnEngineFactoryBean/Spring wiring, ensure the transactionManager bean exists in the context and the reference name matches.
Example fix
// before SpringDmnEngineConfiguration config = new SpringDmnEngineConfiguration(); config.setDataSource(dataSource); DmnEngine engine = config.buildDmnEngine(); // after SpringDmnEngineConfiguration config = new SpringDmnEngineConfiguration(); config.setDataSource(dataSource); config.setTransactionManager(new DataSourceTransactionManager(dataSource)); DmnEngine engine = config.buildDmnEngine();
Defensive patterns
Strategy: validation
Validate before calling
if (config instanceof SpringDmnEngineConfiguration && config.getTransactionManager() == null) {
throw new IllegalStateException('set transactionManager on SpringDmnEngineConfiguration or use StandaloneDmnEngineConfiguration');
} Try / catch
try { return config.buildDmnEngine(); }
catch (FlowableException e) { if (e.getMessage().contains("transactionManager is required")) { throw new ConfigurationException('Wire a PlatformTransactionManager into SpringDmnEngineConfiguration', e); } throw e; } Prevention
- Always call setTransactionManager before building the engine
- Use StandaloneDmnEngineConfiguration outside Spring
- In XML, add the transactionManager property with a valid bean ref
- Add a startup assertion that the transaction manager is set
When it happens
Trigger: Building a DmnEngine from a SpringDmnEngineConfiguration without calling setTransactionManager(...) — e.g. new SpringDmnEngineConfiguration() constructed programmatically and built directly, or the XML bean missing the transactionManager property.
Common situations: Programmatic engine creation in a Spring app where the datasource was set but the transaction manager wasn't wired, copy-pasting a standalone config and only changing the class name, or XML config where the ref to the transaction manager bean is misnamed/absent.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- transactionManager is required property for SpringAppEngineC
- no org.flowable.app.engine.AppEngine defined in the applicat
- transactionManager is required property for SpringCmmnEngine
- Expected dmnEngine configuration to be of type SpringDmnEngi
- couldn't initialize process engine from spring configuration
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/9ca9f49f650155c1.
Report an issue: GitHub.