diff --git a/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/cmd/DeployCmd.java b/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/cmd/DeployCmd.java index 45a0d146caf..ce28764af46 100644 --- a/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/cmd/DeployCmd.java +++ b/modules/flowable-app-engine/src/main/java/org/flowable/app/engine/impl/cmd/DeployCmd.java @@ -91,6 +91,16 @@ protected boolean deploymentsDiffer(AppDeploymentEntity deployment, AppDeploymen Map resources = deployment.getResources(); Map savedResources = saved.getResources(); + // Check if any non-generated resource was removed in the new deployment + for (String savedResourceName : savedResources.keySet()) { + EngineResource savedResource = savedResources.get(savedResourceName); + if (savedResource != null && !savedResource.isGenerated()) { + if (!resources.containsKey(savedResourceName)) { + return true; + } + } + } + for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); diff --git a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/DeployCmd.java b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/DeployCmd.java index d9cd8d7d691..e9046d94acd 100644 --- a/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/DeployCmd.java +++ b/modules/flowable-cmmn-engine/src/main/java/org/flowable/cmmn/engine/impl/cmd/DeployCmd.java @@ -100,6 +100,15 @@ protected boolean deploymentsDiffer(CmmnDeploymentEntity deployment, CmmnDeploym Map resources = deployment.getResources(); Map savedResources = saved.getResources(); + // Check if any non-generated resource was removed in the new deployment (Modern Java Functional Stream) + boolean hasRemovedResource = savedResources.entrySet().stream() + .filter(entry -> entry.getValue() != null && !entry.getValue().isGenerated()) + .anyMatch(entry -> !resources.containsKey(entry.getKey())); + + if (hasRemovedResource) { + return true; + } + for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); diff --git a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/DeployCmd.java b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/DeployCmd.java index d6ce57bb693..1168b12b33c 100644 --- a/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/DeployCmd.java +++ b/modules/flowable-dmn-engine/src/main/java/org/flowable/dmn/engine/impl/cmd/DeployCmd.java @@ -123,6 +123,15 @@ protected boolean deploymentsDiffer(DmnDeploymentEntity deployment, DmnDeploymen Map resources = deployment.getResources(); Map savedResources = saved.getResources(); + // Check if any non-generated resource was removed in the new deployment (Modern Java Functional Stream) + boolean hasRemovedResource = savedResources.entrySet().stream() + .filter(entry -> entry.getValue() != null && !entry.getValue().isGenerated()) + .anyMatch(entry -> !resources.containsKey(entry.getKey())); + + if (hasRemovedResource) { + return true; + } + for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName); diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/DeployCmd.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/DeployCmd.java index 865c938f787..e0a74bb406a 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/DeployCmd.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/cmd/DeployCmd.java @@ -164,6 +164,16 @@ protected boolean deploymentsDiffer(DeploymentEntity deployment, DeploymentEntit Map resources = deployment.getResources(); Map savedResources = saved.getResources(); + // Check if any non-generated resource was removed in the new deployment + for (String savedResourceName : savedResources.keySet()) { + EngineResource savedResource = savedResources.get(savedResourceName); + if (savedResource != null && !savedResource.isGenerated()) { + if (!resources.containsKey(savedResourceName)) { + return true; + } + } + } + for (String resourceName : resources.keySet()) { EngineResource savedResource = savedResources.get(resourceName);