package org.jbpm.taskmgmt.exe; import org.jbpm.db.AbstractDbTestCase; import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; public class BlockingTaskDbTest extends AbstractDbTestCase { public void testBlockingTask() { ProcessDefinition processDefinition = ProcessDefinition.parseXmlString("<process-definition name='blockingprocess'>" + " <start-state>" + " <transition to='approval' />" + " </start-state>" + " <task-node name='approval'>" + " <task name='approve' blocking='true' />" + " <transition name='approve' to='order'/>" + " <transition name='reject' to='cancelled'/>" + " </task-node>" + " <state name='order' />" + " <state name='cancelled' />" + "</process-definition>"); deployProcessDefinition(processDefinition); ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("blockingprocess"); processInstance.signal(); processInstance = saveAndReload(processInstance); assertEquals("approval", processInstance.getRootToken().getNode().getName()); TaskInstance taskInstance = (TaskInstance) processInstance.getTaskMgmtInstance() .getTaskInstances() .iterator() .next(); assertTrue(taskInstance.isBlocking()); try { processInstance.signal(); fail("expected RuntimeException"); } catch (IllegalStateException e) { assertTrue("expected " + e + " to be about blocking tasks", e.getMessage() .indexOf("blocking tasks") != -1); } } }