### Eclipse Workspace Patch 1.0 #P jbpm4 Index: modules/api/src/main/java/org/jbpm/api/Execution.java =================================================================== --- modules/api/src/main/java/org/jbpm/api/Execution.java (revision 6375) +++ modules/api/src/main/java/org/jbpm/api/Execution.java (working copy) @@ -184,6 +184,12 @@ * structure. Null will be returned in case this execution itself is the * main execution path. */ Execution getProcessInstance(); + + /** + * the sub path of execution in the execution + * structure. Null will be returned in case there is no sub process execution. + */ + Execution getSubProcessInstance(); /** the parent execution in the execution * structure. Null will be returned in case this execution itself is the 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 6375) +++ modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java (working copy) @@ -1066,6 +1066,9 @@ protected void checkActive() { if (!isActive()) { throw new JbpmException(toString()+" is not active: "+state); + } else if (this.subProcessInstance != null && !Execution.STATE_ENDED.equals(this.subProcessInstance.getState())) { + throw new JbpmException(toString() + " has running subprocess: " + + this.subProcessInstance.toString() + " in state " + this.subProcessInstance.getState()); } } Index: modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessSignalTest.java =================================================================== --- modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessSignalTest.java (revision 0) +++ modules/test-db/src/test/java/org/jbpm/test/activity/subprocess/SubProcessSignalTest.java (revision 0) @@ -0,0 +1,130 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2005, JBoss Inc., and individual contributors as indicated + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ +package org.jbpm.test.activity.subprocess; + +import java.util.HashMap; +import java.util.Map; + +import org.jbpm.api.ProcessInstance; +import org.jbpm.pvm.internal.model.ExecutionImpl; +import org.jbpm.test.JbpmTestCase; + + +/** + * Test case for signal of subprocess state activities. + * + * @author Maciej Swiderski + */ +public class SubProcessSignalTest extends JbpmTestCase { + + + + private static final String SUB_PROCESS_WITH_WAIT_STATE = + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + + + private static final String MAIN_PROCESS_SUB_EL_ID = + "" + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + " " + + ""; + + + public void testSubProcessWithStateFailure() { + deployJpdlXmlString(SUB_PROCESS_WITH_WAIT_STATE); + deployJpdlXmlString(MAIN_PROCESS_SUB_EL_ID); + + Map vars = new HashMap(); + vars.put("dynamic_subprocess", "SubProcessReview-1"); + + ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess", vars); + String subId = ((ExecutionImpl)processInstance).getSubProcessInstance().getId(); + + try { + processInstance = executionService.signalExecutionById(processInstance.getId()); + + processInstance = executionService.signalExecutionById(processInstance.getId()); + + assertProcessInstanceEnded(processInstance); + ProcessInstance subProcessInstance = executionService.findProcessInstanceById(subId); + assertEquals(ProcessInstance.STATE_ENDED, subProcessInstance.getState()); + } catch (Exception e) { + + //expected exception since we are signaling main process while sub process is not finished + assertTrue(e.getMessage().indexOf("has running subprocess") != -1); + + // clean up to let other tests execute + executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId()); + executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId()); + + processInstance = executionService.signalExecutionById(processInstance.getId()); + + } + + } + + public void testSubProcessWithStateSuccess() { + deployJpdlXmlString(SUB_PROCESS_WITH_WAIT_STATE); + deployJpdlXmlString(MAIN_PROCESS_SUB_EL_ID); + + Map vars = new HashMap(); + vars.put("dynamic_subprocess", "SubProcessReview-1"); + + ProcessInstance processInstance = executionService.startProcessInstanceByKey("mainProcess", vars); + String subId = ((ExecutionImpl)processInstance).getSubProcessInstance().getId(); + executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId()); + executionService.signalExecutionById(((ExecutionImpl)processInstance).getSubProcessInstance().getId()); + + processInstance = executionService.signalExecutionById(processInstance.getId()); + + assertProcessInstanceEnded(processInstance); + ProcessInstance subProcessInstance = executionService.findProcessInstanceById(subId); + assertEquals(ProcessInstance.STATE_ENDED, subProcessInstance.getState()); + + } + +} Property changes on: modules\test-db\src\test\java\org\jbpm\test\activity\subprocess\SubProcessSignalTest.java ___________________________________________________________________ Added: svn:keywords + Id Revision Added: svn:eol-style + LF