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
- 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
- Verify the engine configuration actually wires ProcessInstanceService: call cmmnEngineConfiguration.getProcessInstanceService() at startup and assert non-null
- If using a custom CmmnEngineConfiguration subclass, call the configuration hook that installs the process instance service (or set it explicitly: cmmnEngineConfiguration.setProcessInstanceService(...))
- 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
- Deploy CMMN and BPMN engines together via the combined/app engine configuration
- Add a startup assertion that ProcessInstanceService is registered
- Keep integration dependencies (flowable-cmmn-spring / starters) in the build
- Cover process-task execution in a smoke test
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
- Form engine is not initialized
- Could not execute decision instance: no dmn service found. F
- Form engine is not initialized
- Form repository service is not available
- 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/d051869bda03875d.
Report an issue: GitHub.