diff --git a/config/alfresco/messages/patch-service.properties b/config/alfresco/messages/patch-service.properties index cb27296ee5..22d69a62ba 100644 --- a/config/alfresco/messages/patch-service.properties +++ b/config/alfresco/messages/patch-service.properties @@ -131,6 +131,7 @@ patch.groupMembersAsIdentifiers.description=Reindex usr:authorityContainer membe patch.genericWorkflow.result.deployed=Re-deployed {0} workflows. patch.genericWorkflow.result.undeployed=Undeployed {0} workflows. patch.genericWorkflow.property_required=At least one of the properties ''{0}'' or ''{1}'' must be set on this patch: {2} +patch.genericWorkflow.error_engine_deactivated=\nDefinition ''{0}'' cannot be undeployed as the ''{1}'' engine is disabled patch.ReadmeTemplate.description=Deployed ReadMe Template patch.webScriptsReadme.description=Applied ReadMe template to Web Scripts folders diff --git a/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java b/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java index 6c3f40fb4e..2aa93dfa82 100644 --- a/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java +++ b/source/java/org/alfresco/repo/admin/patch/impl/GenericWorkflowPatch.java @@ -18,16 +18,19 @@ */ package org.alfresco.repo.admin.patch.impl; +import java.util.ArrayList; import java.util.List; import java.util.Properties; -import org.springframework.extensions.surf.util.I18NUtil; import org.alfresco.repo.admin.patch.AbstractPatch; +import org.alfresco.repo.workflow.BPMEngineRegistry; import org.alfresco.repo.workflow.WorkflowDeployer; import org.alfresco.service.cmr.admin.PatchException; +import org.alfresco.service.cmr.workflow.WorkflowAdminService; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.extensions.surf.util.I18NUtil; /** * Generic patch that re-deploys a workflow definition @@ -39,6 +42,7 @@ public class GenericWorkflowPatch extends AbstractPatch implements ApplicationCo private static final String MSG_DEPLOYED = "patch.genericWorkflow.result.deployed"; private static final String MSG_UNDEPLOYED = "patch.genericWorkflow.result.undeployed"; private static final String ERR_PROPERTY_REQUIRED = "patch.genericWorkflow.property_required"; + private static final String MSG_ERROR_ENGINE_DEACTIVATED = "patch.genericWorkflow.error_engine_deactivated"; private ApplicationContext applicationContext; private List workflowDefinitions; @@ -88,6 +92,7 @@ public class GenericWorkflowPatch extends AbstractPatch implements ApplicationCo protected String applyInternal() throws Exception { WorkflowDeployer deployer = (WorkflowDeployer)applicationContext.getBean("workflowPatchDeployer"); + WorkflowAdminService workflowAdminService = (WorkflowAdminService)applicationContext.getBean("workflowAdminService"); if(workflowDefinitions != null) { @@ -100,9 +105,23 @@ public class GenericWorkflowPatch extends AbstractPatch implements ApplicationCo } int undeployed = 0; + StringBuilder errorMessages = new StringBuilder(); if(undeployWorkflowNames != null) { - undeployed = deployer.undeploy(undeployWorkflowNames); + List undeployableWorkflows = new ArrayList(undeployWorkflowNames); + for(String workflowName : undeployWorkflowNames) + { + String engineId = BPMEngineRegistry.getEngineId(workflowName); + if (workflowAdminService.isEngineEnabled(engineId)) + { + undeployableWorkflows.add(workflowName); + } + else + { + errorMessages.append(I18NUtil.getMessage(MSG_ERROR_ENGINE_DEACTIVATED, workflowName, engineId)); + } + } + undeployed = deployer.undeploy(undeployableWorkflows); } // done @@ -119,6 +138,10 @@ public class GenericWorkflowPatch extends AbstractPatch implements ApplicationCo } msg.append(I18NUtil.getMessage(MSG_UNDEPLOYED, undeployed)); } + if(errorMessages.length() > 0) + { + msg.append(errorMessages); + } return msg.toString(); } diff --git a/source/java/org/alfresco/repo/workflow/WorkflowDeployer.java b/source/java/org/alfresco/repo/workflow/WorkflowDeployer.java index 2f39933dd5..17d459c0d2 100644 --- a/source/java/org/alfresco/repo/workflow/WorkflowDeployer.java +++ b/source/java/org/alfresco/repo/workflow/WorkflowDeployer.java @@ -457,25 +457,33 @@ public class WorkflowDeployer extends AbstractLifecycleBean int undeployed = 0; for(String workflowName : workflowNames) { - // Undeploy the workflow definition - all versions in JBPM - List defs = workflowService.getAllDefinitionsByName(workflowName); - if(defs.size() > 0) + String engineId = BPMEngineRegistry.getEngineId(workflowName); + if (workflowAdminService.isEngineEnabled(engineId)) { - undeployed++; + // Undeploy the workflow definition - all versions in JBPM + List defs = workflowService.getAllDefinitionsByName(workflowName); + if(defs.size() > 0) + { + undeployed++; + } + for (WorkflowDefinition def: defs) + { + if (logger.isDebugEnabled()) + { + logger.debug("Undeploying workflow '" + workflowName + "' ..."); + } + + workflowService.undeployDefinition(def.getId()); + + if (logger.isDebugEnabled()) + { + logger.debug("... undeployed '" + def.getId() + "' v" + def.getVersion()); + } + } } - for (WorkflowDefinition def: defs) + else { - if (logger.isDebugEnabled()) - { - logger.debug("Undeploying workflow '" + workflowName + "' ..."); - } - - workflowService.undeployDefinition(def.getId()); - - if (logger.isDebugEnabled()) - { - logger.debug("... undeployed '" + def.getId() + "' v" + def.getVersion()); - } + logger.debug("Workflow deployer: Definition '" + workflowName + "' cannot be undeployed as the '" + engineId + "' engine is disabled"); } } return undeployed;