protected void performUndeployment(ProcessArchive processArchive) { final String paName = processArchive.getName(); ProcessArchiveContext processArchiveContext = installedProcessArchivesByName.get(paName); if (processArchiveContext == null) { return; } try { processArchiveContext.setUndelploying(true); performEngineUndeployment(processArchive); } catch (Exception e) { log.log(Level.SEVERE, "Exception while performing process engine undeployment: ", e); } finally { processArchiveContext.setUndelploying(false); processArchiveContext.setActive(false); installedProcessArchivesByName.remove(paName); ArrayList<ProcessArchive> processArchives = new ArrayList<ProcessArchive>(cachedProcessArchives); processArchives.remove(processArchive); cachedProcessArchives = Collections.unmodifiableList(processArchives); if (processArchiveContext.getActivitiDeployment() != null) { String activitiDeploymentId = processArchiveContext.getActivitiDeployment().getId(); List<ProcessDefinition> processDefinitions = activitiProcessEngine .getRepositoryService() .createProcessDefinitionQuery() .deploymentId(activitiDeploymentId) .list(); for (ProcessDefinition processDefinition : processDefinitions) { installedProcessArchivesByProcessDefinitionKey.remove(processDefinition.getKey()); } } } }