{"record":{"id":"2c998571bc6aaee7","repo":"flowable/flowable-engine","slug":"cannot-start-process-instance-process-definition-2c9985","errorCode":null,"errorMessage":"Cannot start process instance. Process definition ${processDefinitionName} (id = ${processDefinitionId}) is suspended","messagePattern":"Cannot start process instance\\. Process definition (.+?) \\(id = (.+?)\\) is suspended","errorType":"exception","errorClass":"ActivitiException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/CallActivityBehavior.java","lineNumber":106,"sourceCode":"        ProcessDefinition processDefinition = null;\n\n        if (sameDeployment) {\n            String deploymentId = deploymentManager.findDeployedProcessDefinitionById(execution.getProcessDefinitionId()).getDeploymentId();\n            processDefinition = Context.getCommandContext().getProcessDefinitionEntityManager().findProcessDefinitionByDeploymentAndKey(deploymentId, processDefinitonKey);\n            processDefinition = deploymentManager.findDeployedProcessDefinitionById(processDefinition.getId());\n        }\n\n        if (processDefinition == null) {\n            if (execution.getTenantId() == null || ProcessEngineConfiguration.NO_TENANT_ID.equals(execution.getTenantId())) {\n                processDefinition = deploymentManager.findDeployedLatestProcessDefinitionByKey(processDefinitonKey);\n            } else {\n                processDefinition = deploymentManager.findDeployedLatestProcessDefinitionByKeyAndTenantId(processDefinitonKey, execution.getTenantId());\n            }\n        }\n\n        // Do not start a process instance if the process definition is suspended\n        if (deploymentManager.isProcessDefinitionSuspended(processDefinition.getId())) {\n            throw new ActivitiException(\"Cannot start process instance. Process definition \"\n                    + processDefinition.getName() + \" (id = \" + processDefinition.getId() + \") is suspended\");\n        }\n\n        ActivityExecution activityExecution = (ActivityExecution) execution;\n        PvmProcessInstance subProcessInstance = activityExecution.createSubProcessInstance((ProcessDefinitionEntity) processDefinition);\n\n        if (inheritVariables) {\n            Map<String, Object> variables = execution.getVariables();\n            for (Map.Entry<String, Object> entry : variables.entrySet()) {\n                subProcessInstance.setVariable(entry.getKey(), entry.getValue());\n            }\n        }\n\n        String subProcessInstanceBusinessKey = null;\n        if (StringUtils.isNotEmpty(businessKey)) {\n            ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager();\n            Expression expression = expressionManager.createExpression(businessKey);\n            subProcessInstanceBusinessKey = expression.getValue(execution).toString();","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/behavior/CallActivityBehavior.java#L88-L124","documentation":"CallActivityBehavior.execute() resolves the called process definition and checks whether it is suspended before instantiating the subprocess. If the definition is suspended, it throws ActivitiException and refuses to start a new process instance of it.","triggerScenarios":"A call activity executes while its referenced process definition (by key, or key+version, or key+tenant) has been suspended via RuntimeService.suspendProcessDefinitionByKey/ById.","commonSituations":"Administrators suspend a definition for maintenance or a release freeze but a running parent process still reaches the call activity; suspension applied to 'latest' while in-flight instances continue.","solutions":["Resume the definition with runtimeService.activateProcessDefinitionByKey(key) (or byId) including the right tenant handling","Delay or reroute execution of the parent process until the subprocess definition is active","Suspend only process instances, not the definition, if new subprocess starts should remain possible","Coordinate suspension windows with process migration/completion of parent instances"],"exampleFix":"// before\nruntimeService.suspendProcessDefinitionByKey(\"subProcess\");\n// after (resume when needed)\nruntimeService.activateProcessDefinitionByKey(\"subProcess\", true, null);","handlingStrategy":"try-catch","validationCode":"ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()\n    .processDefinitionKey(key).latestVersion().singleResult();\nif (pd != null && pd.isSuspended()) { /* delay or resume before parent reaches call activity */ }","typeGuard":null,"tryCatchPattern":"try { runtimeService.signal(executionId); }\ncatch (ActivitiException e) { if (e.getMessage().contains(\"is suspended\")) { runtimeService.activateProcessDefinitionByKey(key); retry(); } }","preventionTips":["Coordinate definition suspension with in-flight instances","Prefer suspending instances instead of definitions when parents still run","Check isSuspended in monitoring jobs"],"tags":["bpmn","call-activity","suspension","process-definition"],"backgroundTag":"invalid-state-transition","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}