flowable/flowable-engine · critical · FlowableException

Could not start process instance: no

Error message

Could not start process instance: no 

What it means

Flowable's CMMN engine throws this when a process task plan item must start a child BPMN process instance, but the CmmnEngineConfiguration has no ProcessInstanceService implementation registered. Without that service the engine cannot delegate process instantiation, so execute() aborts with a FlowableException naming the plan item instance.

Source

Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/behavior/impl/ProcessTaskActivityBehavior.java:74

    protected boolean sameDeployment;
    protected ProcessTask processTask;

    public ProcessTaskActivityBehavior(Process process, Expression processRefExpression, ProcessTask processTask) {
        super(processTask.isBlocking(), processTask.getBlockingExpression(), processTask.getInParameters(), processTask.getOutParameters());
        this.process = process;
        this.processRefExpression = processRefExpression;
        this.processRef = processTask.getProcessRef();
        this.fallbackToDefaultTenant = processTask.getFallbackToDefaultTenant();
        this.sameDeployment = processTask.isSameDeployment();
        this.processTask = processTask;
    }

    @Override
    public void execute(CommandContext commandContext, PlanItemInstanceEntity planItemInstanceEntity, ChildTaskActivityBehavior.VariableInfo variableInfo) {
        CmmnEngineConfiguration cmmnEngineConfiguration = CommandContextUtil.getCmmnEngineConfiguration(commandContext);
        ProcessInstanceService processInstanceService = cmmnEngineConfiguration.getProcessInstanceService();
        if (processInstanceService == null) {
            throw new FlowableException("Could not start process instance: no " + ProcessInstanceService.class + " implementation found for " + planItemInstanceEntity);
        }

        String externalRef = null;
        if (process != null) {
            externalRef = process.getExternalRef();
        } else if (processRefExpression != null) {
            externalRef = processRefExpression.getValue(planItemInstanceEntity).toString();
        } else if (processRef != null) {
            externalRef = processRef;
        }
        if (StringUtils.isEmpty(externalRef)) {
            throw new FlowableException("Could not start process instance: no externalRef defined for " + planItemInstanceEntity);
        }

        Map<String, Object> inParametersMap = new HashMap<>();
        handleInParameters(planItemInstanceEntity, cmmnEngineConfiguration, inParametersMap, cmmnEngineConfiguration.getExpressionManager());

        FormInfo variableFormInfo = null;

View on GitHub (pinned to d6d39ce1c6)

Solutions

  1. Run the CMMN engine together with the BPMN engine integration (e.g. use ProcessEngineConfiguration with CMMN enabled, or the combined app engine) so a ProcessInstanceService is registered
  2. Verify the engine configuration actually wires ProcessInstanceService: call cmmnEngineConfiguration.getProcessInstanceService() at startup and assert non-null
  3. If using a custom CmmnEngineConfiguration subclass, call the configuration hook that installs the process instance service (or set it explicitly: cmmnEngineConfiguration.setProcessInstanceService(...))
  4. Check dependency set: flowable-cmmn-spring / flowable-spring-boot-starter-process + cmmn bring the integration; a minimal flowable-cmmn-engine-only setup will not have it

Example fix

// before (standalone cmmn engine, no bpmn integration)
CmmnEngineConfiguration cfg = CmmnEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
CmmnEngine cmmnEngine = cfg.buildEngine(); // process tasks fail at runtime
// after (combined engine config registers ProcessInstanceService)
CmmnEngineConfiguration cfg = CmmnEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
cfg.setProcessInstanceService(new DefaultProcessInstanceService()); // or use the combined engine config
CmmnEngine cmmnEngine = cfg.buildEngine();
Defensive patterns

Strategy: validation

Validate before calling

// at engine bootstrap
if (cmmnEngineConfiguration.getProcessInstanceService() == null) {
    throw new IllegalStateException("CMMN engine misconfigured: ProcessInstanceService missing; process tasks will fail");
}

Type guard

boolean canRunProcessTasks =
    org.flowable.cmmn.engine.CmmnEngineConfiguration cfg != null && cfg.getProcessInstanceService() != null;

Prevention

When it happens

Trigger: A case definition containing a process task plan item reaches activation and ProcessTaskActivityBehavior.execute() runs while cmmnEngineConfiguration.getProcessInstanceService() returns null.

Common situations: Embedding the CMMN engine standalone (CmmnEngineConfiguration) without the BPMN engine integration that supplies ProcessInstanceService; custom engine configuration that removed or never installed the process-instance module; using the cmmn engine in tests with only partial 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/d051869bda03875d. Report an issue: GitHub.