Index: modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java =================================================================== --- modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java (revision 6519) +++ modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java (working copy) @@ -1284,7 +1284,13 @@ this.processInstance = processInstance; } public String getKey() { - return key; + if (this.key != null) { + return key; + } + if (this.superProcessExecution != null) { + return this.superProcessExecution.getKey(); + } + return null; } public Propagation getPropagation() { return propagation; Index: modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java =================================================================== --- modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java (revision 6519) +++ modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessTest.java (working copy) @@ -28,9 +28,12 @@ import java.util.Map; import org.eclipse.jdt.internal.compiler.ast.AssertStatement; +import org.jbpm.api.Execution; import org.jbpm.api.JbpmException; import org.jbpm.api.ProcessInstance; import org.jbpm.api.task.Task; + +import org.jbpm.pvm.internal.model.ExecutionImpl; import org.jbpm.test.JbpmTestCase; @@ -137,4 +140,17 @@ assertEquals(0, executionService.createProcessInstanceQuery().list().size()); } + // Test for JBPM-2772 + public void testSubProcessWithKey() { + deployJpdlXmlString(SUB_PROCESS); + deployJpdlXmlString(MAIN_PROCESS); + + ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess", "business key"); + Execution subProcessInstance = processInstance.getSubProcessInstance(); + assertEquals("business key", ((ExecutionImpl)subProcessInstance).getKey()); + + Task task = taskService.findPersonalTasks("johndoe").get(0); + taskService.completeTask(task.getId(), "nok"); + } + }