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

  1. Add the flowable-dmn-engine dependency (or use a starter that includes it) so the DMN engine initializes
  2. Ensure the CMMN engine configuration's dmnEngineConfiguration is set (integrated configuration)
  3. Check custom ProcessEngineConfiguration code did not disable/omit DMN initialization
  4. 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

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


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/e466e5a515b5a419. Report an issue: GitHub.