[jboss-user] [JBoss jBPM] - Re: forking tasks

kukeltje do-not-reply at jboss.com
Thu Sep 11 13:03:50 EDT 2008


Ok, basic trial without Seam and no special transaction stuff works


  | package net.vankuijk.jbpm;
  | 
  | import java.util.ArrayList;
  | import java.util.Arrays;
  | import java.util.HashSet;
  | import java.util.Iterator;
  | import java.util.List;
  | import java.util.Set;
  | 
  | import org.apache.commons.logging.Log;
  | import org.apache.commons.logging.LogFactory;
  | import org.jbpm.JbpmContext;
  | import org.jbpm.db.AbstractDbTestCase;
  | import org.jbpm.graph.def.ProcessDefinition;
  | import org.jbpm.graph.exe.ExecutionContext;
  | import org.jbpm.graph.exe.ProcessInstance;
  | import org.jbpm.taskmgmt.def.AssignmentHandler;
  | import org.jbpm.taskmgmt.exe.Assignable;
  | import org.jbpm.taskmgmt.exe.TaskAssignmentDbTest;
  | import org.jbpm.taskmgmt.exe.TaskInstance;
  | import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
  | 
  | import junit.framework.TestCase;
  | 
  | public class ForkedTaskTest extends AbstractDbTestCase {
  | 	void deployProcessDefinition(String xml) {
  | 		ProcessDefinition processDefinition = ProcessDefinition
  | 				.parseXmlString(xml);
  | 		jbpmContext.deployProcessDefinition(processDefinition);
  | 		newTransaction();
  | 	}
  | 
  | 	public void testStartStateSwimlaneInitialization() {
  | 		deployProcessDefinition("<process-definition name='testForkedTasks'>"
  | 				+ "  <swimlane name='gertsGroupSwimlane'>"
  | 				+ "    <assignment pooled-actors='gertsGroup' />"
  | 				+ "  </swimlane>"
  | 				+ "  <start-state>"
  | 				+ "    <transition name='to_0' to='0' />"
  | 				+ "  </start-state>"
  | 				+ "  <task-node name='0'>"
  | 			    + "    <task name='task 0' swimlane='gertsGroupSwimlane' />"
  | 			    + "    <transition name='to_fork1' to='fork1' />"
  | 			    + "  </task-node>"
  | 				+ "  <fork name='fork1'>"
  | 				+ "    <transition name='to_11' to='11' />"
  | 				+ "    <transition name='to_21' to='21' />"
  | 				+ "  </fork>"
  | 			    + "  <task-node name='11'>"
  | 			    + "    <task name='task 11' swimlane='gertsGroupSwimlane' />"
  | 			    + "    <transition name='to_12' to='12' />"
  | 			    + "  </task-node>"
  | 			    + "  <task-node name='12'>"
  | 			    + "    <task name='task 12' swimlane='gertsGroupSwimlane' />"
  | 			    + "    <transition name='to_join' to='join1' />"
  | 			    + "  </task-node>"
  | 			    + "  <task-node name='21'>"
  | 			    + "    <task name='task 21' swimlane='gertsGroupSwimlane' />"
  | 			    + "    <transition name='to_join' to='join1' />"
  | 			    + "  </task-node>"
  | 			    + "  <join name='join1'>"
  | 				+ "    <transition name='end' to='end' />"
  | 				+ "  </join>"
  | 			    + "  <end-state name='end' />"
  | 				+ "</process-definition>");
  | 		
  | 	    ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("testForkedTasks");
  | 	    processInstance.signal();
  | 
  | 	    processInstance = saveAndReload(processInstance);
  | 	    
  | 	    ArrayList actorIDs = new ArrayList();
  | 	    actorIDs.add("gertsGroup");
  | 	    
  | 	    //assertNotNull(processInstance.getTaskMgmtInstance().getTaskInstances());
  | 	    
  | 	    List tasks = jbpmContext.getGroupTaskList(actorIDs);
  | 	    assertEquals(1, tasks.size());
  | 	    assertEquals(false, ((TaskInstance) tasks.get(0)).isStartTaskInstance());
  | 	    TaskInstance task0 = (TaskInstance) tasks.iterator().next();
  | 	    assertEquals("task 0", task0.getName());
  | 	    task0.end();
  | 		
  | 	    processInstance = saveAndReload(processInstance);
  | 	    
  | 	    tasks = jbpmContext.getGroupTaskList(actorIDs);
  | 	    assertEquals(2, tasks.size());
  | 	    ArrayList taskNames = new ArrayList();
  | 	    taskNames.add(((TaskInstance) tasks.get(0)).getName());
  | 	    taskNames.add(((TaskInstance) tasks.get(1)).getName());
  | 	    assertTrue(taskNames.contains("task 11"));	    
  | 	    assertTrue(taskNames.contains("task 21"));
  | 	    assertFalse(taskNames.contains("task 12"));
  | 	    
  | 	    TaskInstance task11 = (TaskInstance) tasks.get(0); //gamble it is the first
  | 	    if (!task11.getName().equals("task 11")) {
  | 	    	task11 = (TaskInstance) tasks.get(1); // ok, it's the second	
  | 	    }
  | 	    task11.end();
  | 
  | 	    processInstance = saveAndReload(processInstance);
  | 
  | 	    tasks = jbpmContext.getGroupTaskList(actorIDs);
  | 	    assertEquals(2, tasks.size());
  | 	    taskNames = new ArrayList();
  | 	    taskNames.add(((TaskInstance) tasks.get(0)).getName());
  | 	    taskNames.add(((TaskInstance) tasks.get(1)).getName());
  | 	    assertFalse(taskNames.contains("task 11")); //ended	    
  | 	    assertTrue(taskNames.contains("task 21"));
  | 	    assertTrue(taskNames.contains("task 12"));
  | 	}
  | 
  | 	private static final Log log = LogFactory
  | 			.getLog(ForkedTaskTest.class);
  | 
  | }
  | 

So it I have no clue what is going wrong in your case. Transactions? What if you try to retrieve the tasklist by using the jBPM api directly?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4175927#4175927

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4175927



More information about the jboss-user mailing list