flowable/flowable-engine · warning
Requesting form model
Error message
Requesting form model {} without configured formRepositoryService What it means
When a case instance is started whose plan model declares a start form (formKey), applyCaseInstanceBuilder requests the form model from the configured FormRepositoryService. If formInfoRepositoryService is null on the configuration, the form cannot be retrieved, so this warning is logged and form handling is skipped — the case starts without its start form being processed.
Solutions
- Add the form engine and wire it: deploy flowable-form-engine and set formInfoRepositoryService (or use FlowableCmmnEngineConfiguration's form resource initializer / the spring boot starter that auto-wires it)
- Call cmmnEngineConfiguration.setFormInfoRepositoryService(formRepositoryService) before starting the engine
- If forms are intentionally unused, remove the startFormKey from the case plan model or ignore the warning
- Verify the same form definition referenced by the formKey is deployed in the form repository
Example fix
// before: CMMN engine without form engine CmmnEngineConfiguration cfg = new StandaloneCmmnEngineConfiguration(); // after: wire the form repository service cfg.setFormInfoRepositoryService(formEngineConfiguration.getFormRepositoryService());
Defensive patterns
Strategy: validation
Validate before calling
if (cmmnEngineConfiguration.getFormInfoRepositoryService() == null) {
throw new IllegalStateException("FormRepositoryService required: case definitions use start forms");
} Try / catch
try {
caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()
.caseDefinitionKey("myCase").start();
} catch (FlowableException e) {
// check engine config for missing form services and whether the plan model has a formKey
} Prevention
- Include and wire the form engine whenever case plan models declare start forms
- Assert required services are set in an engine startup check
- Remove startFormKey from plan models when forms are not used
When it happens
Trigger: Starting a case via CaseInstanceBuilder (e.g. cmmnRuntimeService.createCaseInstanceBuilder()...start()) where the case definition's plan model has a formKey, but the CmmnEngineConfiguration was built without a FormRepositoryService / formInfoRepositoryService set.
Common situations: Embedding the CMMN engine standalone without the form engine module on the classpath or configured; Spring Boot app with flowable-cmmn but not flowable-form (or form engine disabled); programmatic configurations that skip FormEngineConfiguration wiring.
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
- Form engine is not initialized
- Cannot complete CMMN job. There is no CMMN engine available
- Cannot query external jobs. There is no BPMN or CMMN engine…
- Cannot unacquire CMMN job. There is no CMMN engine available
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/438f4e8dcc094002.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/runtime/CaseInstanceHelperImpl.java:427
Map<String, Object> caseVariables = formService.getVariablesFromFormSubmission(null, "planModel", null,
caseDefinition.getId(), ScopeTypes.CMMN, formInfo, startFormVariables, caseInstanceBuilder.getOutcome());
if (caseVariables != null) {
for (String variableName : caseVariables.keySet()) {
caseInstanceEntity.setVariable(variableName, caseVariables.get(variableName));
}
}
// The caseVariables are the variables that should be used when starting the case
// the actual variables should instead be used when creating the form instances
formService.createFormInstanceWithScopeId(startFormVariables, formInfo, null, caseInstanceEntity.getId(),
ScopeTypes.CMMN, caseInstanceEntity.getCaseDefinitionId(), caseInstanceEntity.getTenantId(), caseInstanceBuilder.getOutcome());
formFieldHandler.handleFormFieldsOnSubmit(formInfo, null, null,
caseInstanceEntity.getId(), ScopeTypes.CMMN, caseVariables, caseInstanceEntity.getTenantId());
}
} else {
LOGGER.warn("Requesting form model {} without configured formRepositoryService", planModel.getFormKey());
}
}
}
}
protected FormInfo resolveFormInfo(Stage planModel, CaseDefinition caseDefinition, String tenantId, FormRepositoryService formRepositoryService,
CmmnEngineConfiguration cmmnEngineConfiguration) {
String formKey = planModel.getFormKey();
FormInfo formInfo;
if (tenantId == null || CmmnEngineConfiguration.NO_TENANT_ID.equals(tenantId)) {
if (planModel.isSameDeployment()) {
String parentDeploymentId = CaseDefinitionUtil.getDefinitionDeploymentId(caseDefinition, cmmnEngineConfiguration);
formInfo = formRepositoryService.getFormModelByKeyAndParentDeploymentId(formKey, parentDeploymentId);
} else {
formInfo = formRepositoryService.getFormModelByKey(formKey);
}
} else {View on GitHub (pinned to d6d39ce1c6)