flowable/flowable-engine · error · FlowableException
No .app resource found for deployment '" + deploymentId + "'
Error message
No .app resource found for deployment '" + deploymentId + "'
What it means
Flowable throws FlowableException when resolving an app resource for a deployment that contains no resource ending in .app. getAppResourceObject checks whether the deployment holds an .app resource before (re)deploying and populating the app resource cache; without one it cannot build an AppModel.
Solutions
- Pass the id of a deployment that actually contains an .app resource (list via repositoryService.getDeploymentResourceNames)
- Rename the archive to end with .app and redeploy
- Only call app-resource APIs for app deployments; guard the call by inspecting resource names first
Example fix
// before
AppModel model = repositoryService.getAppResourceModel(anyDeploymentId);
// after
if (repositoryService.getDeploymentResourceNames(anyDeploymentId).stream()
.anyMatch(n -> n.endsWith(".app"))) {
AppModel model = repositoryService.getAppResourceModel(anyDeploymentId);
} Defensive patterns
Strategy: validation
Validate before calling
boolean isAppDeployment = repositoryService.getDeploymentResourceNames(deploymentId)
.stream().anyMatch(n -> n.endsWith(".app")); Prevention
- Only call app APIs on app deployments
- Keep the .app extension intact in build pipelines
- Separate app deployments from plain BPMN deployments in naming
When it happens
Trigger: repositoryService getAppResource APIs called with a deploymentId of a plain BPMN deployment (no app archive), or an app deployment uploaded with a wrong extension.
Common situations: Passing a process deployment id where an app deployment id is expected; renaming app archives and losing the .app extension; mixed Flowable 5/6 deployments queried with the 6.x app API.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- Active execution could not be found with activity id
- App resource is not of type AppModel
- Batch part with id ' ' does not have a batch part document.
- Batch with id ' ' does not have a batch document.
- Cannot associate execution by id: no execution with id '
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/422a2fd556e4b500.
Report an issue: GitHub.
Appendix: source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/DeploymentManager.java:159
Object appResourceObject = appResourceCache.get(deploymentId);
if (appResourceObject == null) {
boolean appResourcePresent = false;
List<String> deploymentResourceNames = getDeploymentEntityManager().getDeploymentResourceNames(deploymentId);
for (String deploymentResourceName : deploymentResourceNames) {
if (deploymentResourceName.endsWith(".app")) {
appResourcePresent = true;
break;
}
}
if (appResourcePresent) {
DeploymentEntity deployment = deploymentEntityManager.findById(deploymentId);
deployment.setNew(false);
deploy(deployment, null);
} else {
throw new FlowableException("No .app resource found for deployment '" + deploymentId + "'");
}
appResourceObject = appResourceCache.get(deploymentId);
if (appResourceObject == null) {
throw new FlowableException("deployment '" + deploymentId + "' didn't put an app resource in the cache");
}
}
return appResourceObject;
}
public AppModel getAppResourceModel(String deploymentId) {
Object appResourceObject = getAppResourceObject(deploymentId);
if (!(appResourceObject instanceof AppModel)) {
throw new FlowableException("App resource is not of type AppModel");
}
return (AppModel) appResourceObject;View on GitHub (pinned to d6d39ce1c6)