flowable/flowable-engine · error · FlowableException
Dmn engine is not configured
Error message
Dmn engine is not configured
What it means
CommandContextUtil.getDmnRuleService(commandContext) looks up the DMN engine configuration from the command context's engine configurations; if the DMN engine is not deployed/configured alongside the CMMN engine, it throws this FlowableException instead of returning a null service. It guards against calling DMN decision logic in an installation without the DMN engine.
Source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/util/CommandContextUtil.java:504
return getCaseInstanceHelper(getCommandContext());
}
public static CaseInstanceHelper getCaseInstanceHelper(CommandContext commandContext) {
return getCmmnEngineConfiguration(commandContext).getCaseInstanceHelper();
}
public static CommandContext getCommandContext() {
return Context.getCommandContext();
}
public static DmnEngineConfigurationApi getDmnEngineConfiguration(CommandContext commandContext) {
return (DmnEngineConfigurationApi) commandContext.getEngineConfigurations().get(EngineConfigurationConstants.KEY_DMN_ENGINE_CONFIG);
}
public static DmnDecisionService getDmnRuleService(CommandContext commandContext) {
DmnEngineConfigurationApi dmnEngineConfiguration = getDmnEngineConfiguration(commandContext);
if (dmnEngineConfiguration == null) {
throw new FlowableException("Dmn engine is not configured");
}
return dmnEngineConfiguration.getDmnDecisionService();
}
public static InternalTaskAssignmentManager getInternalTaskAssignmentManager(CommandContext commandContext) {
return getCmmnEngineConfiguration(commandContext).getTaskServiceConfiguration().getInternalTaskAssignmentManager();
}
public static InternalTaskAssignmentManager getInternalTaskAssignmentManager() {
return getInternalTaskAssignmentManager(getCommandContext());
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Add the DMN engine dependency (flowable-dmn-engine / flowable-dmn-spring-configurator) and configure it, e.g. DmnEngineConfiguration.createDefaultDmnEngineConfiguration() and register it in the engine configurations
- In Spring Boot use flowable-spring-boot-starter-cmmn plus DMN support or enable flowable.auto-deployment dmn resources
- If DMN is intentionally absent, remove DMN-dependent decision tasks from case definitions or guard their execution
- Verify EngineConfigurationConstants.KEY_DMN_ENGINE_CONFIG is present in commandContext.getEngineConfigurations() before invoking decision logic
Example fix
// before
CmmnEngineConfiguration cfg = CmmnEngineConfiguration.createCmmnEngineConfiguration(); // DMN missing
// after
CmmnEngineConfiguration cfg = CmmnEngineConfiguration.createCmmnEngineConfiguration();
cfg.addEngineConfiguration(EngineConfigurationConstants.KEY_DMN_ENGINE_CONFIG,
DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildDmnEngine().getDmnEngineConfiguration()); Defensive patterns
Strategy: validation
Validate before calling
if (!commandContext.getEngineConfigurations().containsKey(EngineConfigurationConstants.KEY_DMN_ENGINE_CONFIG)) {
throw new IllegalStateException("DMN engine not configured; add flowable-dmn-engine to the configuration");
} Type guard
boolean isDmnAvailable(CommandContext ctx) { return ctx.getEngineConfigurations().get(EngineConfigurationConstants.KEY_DMN_ENGINE_CONFIG) != null; } Try / catch
try { return CommandContextUtil.getDmnRuleService(commandContext); } catch (FlowableException e) { if ("Dmn engine is not configured".equals(e.getMessage())) { throw new IllegalStateException("Enable flowable-dmn-engine in your engine configuration", e); } throw e; } Prevention
- Include the DMN engine dependency when case models use decision tables
- Register the DMN engine configuration under KEY_DMN_ENGINE_CONFIG in embedded setups
- Validate engine configuration at startup with a smoke DMN decision
When it happens
Trigger: A case (e.g. a decision task/table rule task in CMMN) executes logic requiring DmnDecisionService while the CmmnEngineConfiguration was built without a DMN engine (no dmnEngineConfiguration added to engineConfigurations under EngineConfigurationConstants.KEY_DMN_ENGINE_CONFIG).
Common situations: Embedding only flowable-cmmn-engine without flowable-dmn-engine in a standalone setup; building a custom process/case engine configuration that omits DMN; decision table plan items present in the model but DMN not on the classpath/config.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- Could not execute decision instance: no dmn service found. F
- DMN repository service is not available
- CommandInvoker must be the last interceptor in the chain
- HitPolicy behavior: %s not configured
- To use the case service task a CaseInstanceService implement
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/cbc8a75337f867d9.
Report an issue: GitHub.