flowable/flowable-engine · error · FlowableException
deployment '" + deploymentId + "' didn't put an app resource
Error message
deployment '" + deploymentId + "' didn't put an app resource in the cache
What it means
Flowable throws FlowableException when, after re-deploying an app deployment, the app resource cache still holds no entry for the deployment id. The .app resource was present (the earlier check passed) but the app deployer failed to parse it or register the model — an internal consistency failure during cache rebuild.
Source
Thrown at modules/flowable-engine/src/main/java/org/flowable/engine/impl/persistence/deploy/DeploymentManager.java:164
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;
}
public void removeDeployment(String deploymentId, boolean cascade) {
DeploymentEntity deployment = deploymentEntityManager.findById(deploymentId);View on GitHub (pinned to d6d39ce1c6)
Solutions
- Validate the .app resource content (open it, check it is valid XML/AppModel)
- Redeploy the app archive freshly and use the new deployment id
- Restart the engine to clear the app resource cache
- Check engine version compatibility of the app resource format
Example fix
// before
AppModel model = repositoryService.getAppResourceModel(oldDeploymentId); // stale/corrupt
// after
repositoryService.createDeployment().addClasspathResource("myApp.app").tenantId("acme").deploy();
AppModel model = repositoryService.getAppResourceModel(newDeploymentId); Defensive patterns
Strategy: try-catch
Validate before calling
// ensure resources are parseable before caching: inspect the .app resource content
String appXml = new String(repositoryService.getResourceAsStream(deploymentId, appName).readAllBytes());
if (!appXml.contains("<app")) { /* treat as corrupt, redeploy */ } Try / catch
try {
AppModel model = repositoryService.getAppResourceModel(deploymentId);
} catch (FlowableException e) {
// redeploy the app archive and use the new deployment id
} Prevention
- Validate .app archives in CI before deployment
- Avoid hand-editing deployed app resources
- Redeploy after engine upgrades
When it happens
Trigger: getAppResourceObject on a deployment whose .app resource exists but fails to parse into the cache (corrupt app XML, malformed app model), or engine version mismatch where the app deployer cannot handle the resource format.
Common situations: Corrupted or hand-edited .app archives; Flowable 5 app resources loaded by a 6.x engine; upgrade leaving old deployments whose resources the new deployer rejects.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- deployment '" + deploymentId + "' didn't put process definit
- App resource is not of type AppModel
- deployment '${deploymentId}' didn't put event definition '${
- deployment '' didn't put app definition '' in the cache
- Process model for ${executionEntity} could not be found
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/602378accda0302d.
Report an issue: GitHub.