flowable/flowable-engine · error · FlowableException
DMN repository service is not available
Error message
DMN repository service is not available
What it means
GetDecisionsForCaseDefinitionCmd needs the DMN engine's repository service to look up DMN decisions referenced by the case. CommandContextUtil.getDmnEngineConfiguration(...).getDmnRepositoryService() returned null, so the command throws FlowableException('DMN repository service is not available'). This indicates the DMN engine is not initialized/attached to the CMMN engine configuration.
Source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/GetDecisionsForCaseDefinitionCmd.java:66
}
@Override
public List<DmnDecision> execute(CommandContext commandContext) {
CaseDefinition caseDefinition = CaseDefinitionUtil.getCaseDefinition(caseDefinitionId);
if (caseDefinition == null) {
throw new FlowableObjectNotFoundException("Cannot find case definition for id: " + caseDefinitionId, CaseDefinition.class);
}
Case caseModel = CaseDefinitionUtil.getCase(caseDefinitionId);
if (caseModel == null) {
throw new FlowableObjectNotFoundException("Cannot find case definition for id: " + caseDefinitionId, Case.class);
}
dmnRepositoryService = CommandContextUtil.getDmnEngineConfiguration(commandContext).getDmnRepositoryService();
if (dmnRepositoryService == null) {
throw new FlowableException("DMN repository service is not available");
}
List<DmnDecision> decision = getDecisionsFromModel(caseModel, caseDefinition);
return decision;
}
protected List<DmnDecision> getDecisionsFromModel(Case caseModel, CaseDefinition caseDefinition) {
Set<String> decisionKeys = new HashSet<>();
List<DmnDecision> decisions = new ArrayList<>();
List<DecisionTask> decisionTasks = caseModel.getPlanModel().findPlanItemDefinitionsOfType(DecisionTask.class, true);
for (DecisionTask decisionTask : decisionTasks) {
if (decisionTask.getFieldExtensions() != null && decisionTask.getFieldExtensions().size() > 0) {
for (FieldExtension fieldExtension : decisionTask.getFieldExtensions()) {
if ("decisionTableReferenceKey".equals(fieldExtension.getFieldName())) {
String decisionReferenceKey = fieldExtension.getStringValue();
if (!decisionKeys.contains(decisionReferenceKey)) {View on GitHub (pinned to d6d39ce1c6)
Solutions
- Add the flowable-dmn-engine dependency (or use a starter that includes it) so the DMN engine initializes
- Ensure the CMMN engine configuration's dmnEngineConfiguration is set (integrated configuration)
- Check custom ProcessEngineConfiguration code did not disable/omit DMN initialization
- Upgrade to an integrated Flowable configuration (flowable-spring-boot-starter-process/cmmn) rather than standalone engine jars
Example fix
// before (Maven) <dependency><groupId>org.flowable</groupId><artifactId>flowable-cmmn-engine</artifactId></dependency> // after <dependency><groupId>org.flowable</groupId><artifactId>flowable-cmmn-engine</artifactId></dependency> <dependency><groupId>org.flowable</groupId><artifactId>flowable-dmn-engine</artifactId></dependency>
Defensive patterns
Strategy: validation
Validate before calling
boolean dmnAvailable = CommandContextUtil.getDmnEngineConfiguration(commandContext) != null
&& CommandContextUtil.getDmnEngineConfiguration(commandContext).getDmnRepositoryService() != null; Try / catch
try { return getDecisionsForCaseDefinition(id); } catch (FlowableException e) { if (e.getMessage().contains("DMN repository service")) { /* DMN engine missing */ } throw e; } Prevention
- Include flowable-dmn-engine when CMMN references DMN decisions
- Use integrated starters so engine configurations wire automatically
- Smoke-test decision lookup after engine setup changes
When it happens
Trigger: Executing getDecisionsForCaseDefinition in a setup where the DMN engine configuration is absent or not wired — e.g. standalone CMMN engine without flowable-dmn on the classpath or DMN engine disabled in the Flowable 6/7 configuration.
Common situations: Custom FlowableEngineAgenda/standalone cmmn-engine build without the DMN module dependency; using only flowable-cmmn-engine instead of the full flowable-spring-boot-starter; DMN engine bean not injected in a custom process engine configuration.
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
- DMN repository service is not available
- Could not execute decision instance: no dmn service found. F
- Cannot find case definition for id:
- Dmn engine is not configured
- key is null
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/e466e5a515b5a419.
Report an issue: GitHub.