flowable/flowable-engine · error · FlowableIllegalArgumentException
Unsupported transaction propagation:
Error message
Unsupported transaction propagation:
What it means
SpringTransactionInterceptor.getPropagation maps Flowable's CommandContext transaction propagation enums onto Spring TransactionTemplate constants. Any propagation value other than NOT_SUPPORTED, REQUIRED, or REQUIRES_NEW hits the default branch and throws FlowableIllegalArgumentException. This means the engine configuration carries a propagation value the Spring interceptor cannot translate.
Solutions
- Set transaction propagation to one of NOT_SUPPORTED, REQUIRED, or REQUIRES_NEW on the engine configuration
- If MANDATORY/SUPPORTS/NEVER semantics are needed, use a non-Spring transaction context factory or a custom interceptor that maps them
- Review config properties (e.g. flowable.* propagation settings) for invalid values
- Check for version mismatches where the config class offers propagations the interceptor lacks
Example fix
// before processEngineConfiguration.setTransactionPropagation(Propagation.MANDATORY); // after processEngineConfiguration.setTransactionPropagation(Propagation.REQUIRED);
Defensive patterns
Strategy: validation
Validate before calling
Propagation p = config.getTransactionPropagation();
if (p != Propagation.NOT_SUPPORTED && p != Propagation.REQUIRED && p != Propagation.REQUIRES_NEW) {
throw new IllegalArgumentException("Unsupported propagation for Spring: " + p);
} Type guard
boolean springSupported(Propagation p) { return p == Propagation.NOT_SUPPORTED || p == Propagation.REQUIRED || p == Propagation.REQUIRES_NEW; } Try / catch
try { txInterceptor.execute(command); } catch (FlowableIllegalArgumentException e) { /* log invalid propagation config and correct it */ } Prevention
- Only set NOT_SUPPORTED, REQUIRED, or REQUIRES_NEW in Spring setups
- Validate config property strings against the supported enum before applying
- Recheck propagation settings after engine version upgrades
- Document allowed propagation values in your config schema
When it happens
Trigger: SpringProcessEngineConfiguration (or other Spring engine configuration) is given a transaction propagation value not in {NOT_SUPPORTED, REQUIRED, REQUIRES_NEW} and a command executes (execute) or transactionPropagation is queried.
Common situations: Setting propagation programmatically from a config property string that parses to MANDATORY/SUPPORTS/NEVER; version upgrades introducing new enum values not supported by the Spring interceptor; copy-pasting non-Spring (standalone) engine config into a Spring setup.
Related errors
- transactionManager is required property for…
- transactionManager is required property for…
- ackMode in definition
- At least one of topics, topicPartitions or topicPattern…
- Channel definition cannot resolve as a String[] or a String…
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/e696d19e322eb7d2.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-spring-common/src/main/java/org/flowable/common/spring/SpringTransactionInterceptor.java:72
} else {
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.setPropagationBehavior(transactionPropagation);
return transactionTemplate.execute(status -> next.execute(config, command, commandExecutor));
}
}
private int getPropagation(CommandConfig config) {
switch (config.getTransactionPropagation()) {
case NOT_SUPPORTED:
return TransactionTemplate.PROPAGATION_NOT_SUPPORTED;
case REQUIRED:
return TransactionTemplate.PROPAGATION_REQUIRED;
case REQUIRES_NEW:
return TransactionTemplate.PROPAGATION_REQUIRES_NEW;
default:
throw new FlowableIllegalArgumentException("Unsupported transaction propagation: " + config.getTransactionPropagation());
}
}
}View on GitHub (pinned to d6d39ce1c6)