flowable/flowable-engine · error · FlowableObjectNotFoundException
No case instance found for id = '${caseInstanceId}'.
Error message
No case instance found for id = '${caseInstanceId}'. What it means
Thrown by SetCaseInstanceBusinessStatusCmd.execute when no CMMN case instance exists for the given id. Flowable looks up the CaseInstanceEntity via the entity manager before updating its business status; if findById returns null it raises FlowableObjectNotFoundException with CaseInstance.class as the referenced type. It signals that the target case instance does not exist (or was already deleted).
Source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/SetCaseInstanceBusinessStatusCmd.java:47
private final String caseInstanceId;
private final String businessStatus;
public SetCaseInstanceBusinessStatusCmd(String caseInstanceId, String businessStatus) {
if (caseInstanceId == null || caseInstanceId.isEmpty()) {
throw new FlowableIllegalArgumentException("The case instance id is mandatory, but '" + caseInstanceId + "' has not been provided.");
}
this.caseInstanceId = caseInstanceId;
this.businessStatus = businessStatus;
}
@Override
public Void execute(CommandContext commandContext) {
CaseInstanceEntityManager caseInstanceEntityManager = CommandContextUtil.getCaseInstanceEntityManager(commandContext);
CaseInstanceEntity caseInstanceEntity = caseInstanceEntityManager.findById(caseInstanceId);
if (caseInstanceEntity == null) {
throw new FlowableObjectNotFoundException("No case instance found for id = '" + caseInstanceId + "'.", CaseInstance.class);
}
caseInstanceEntityManager.updateCaseInstanceBusinessStatus(caseInstanceEntity, businessStatus);
return null;
}
}
View on GitHub (pinned to d6d39ce1c6)
Solutions
- Verify the caseInstanceId with cmmnRuntimeService.createCaseInstanceQuery().caseInstanceId(id).singleResult() before setting the status
- Confirm you are not confusing a BPMN process instance id with a CMMN case instance id
- Check you are connected to the same database/schema where the case instance was created
- If the case may no longer exist, catch FlowableObjectNotFoundException and treat it as an idempotent no-op or propagate a 404
Example fix
// before
cmmnRuntimeService.setCaseInstanceBusinessStatus(caseInstanceId, "ACTIVE");
// after
if (cmmnRuntimeService.createCaseInstanceQuery().caseInstanceId(caseInstanceId).count() > 0) {
cmmnRuntimeService.setCaseInstanceBusinessStatus(caseInstanceId, "ACTIVE");
} else {
logger.warn("Case instance {} not found, skipping business status update", caseInstanceId);
} Defensive patterns
Strategy: validation
Validate before calling
boolean exists = cmmnRuntimeService.createCaseInstanceQuery().caseInstanceId(caseInstanceId).count() > 0;
if (!exists) { throw new IllegalArgumentException("Unknown caseInstanceId: " + caseInstanceId); } Type guard
boolean isValidCaseInstance(String id) { return id != null && !id.isEmpty() && cmmnRuntimeService.createCaseInstanceQuery().caseInstanceId(id).count() > 0; } Try / catch
try {
cmmnRuntimeService.setCaseInstanceBusinessStatus(caseInstanceId, status);
} catch (FlowableObjectNotFoundException e) {
throw new NotFoundException("Case instance not found: " + caseInstanceId, e);
} Prevention
- Always derive caseInstanceId from a persisted entity, never from user input unvalidated
- Existence-check with a case instance query before mutation APIs
- Distinguish CMMN case ids from BPMN process ids in your domain model
- Map FlowableObjectNotFoundException to 404 at the REST layer
When it happens
Trigger: Calling CmmnRuntimeService.setCaseInstanceBusinessStatus(caseInstanceId, businessStatus) with an id that does not match any running or completed case instance.
Common situations: Passing a processInstanceId (BPMN) instead of a caseInstanceId; using a stale id after the case instance ended and was removed; typos or truncated ids from external storage; querying a different database/schema than the one the case was created in.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- Cannot find case instance for id ${caseInstanceId}
- Cannot find case instance with id
- Cannot find case instance with id
- case instance ${caseInstanceId} doesn't exist
- No case instance found for id = '${caseInstanceId}'.
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/0451b1146d0855b6.
Report an issue: GitHub.