problems creating task instances
sgrassie Jan 22, 2008 9:23 AMHi,
I'm having a problem creating task instances, specifically for the 1st task node in the fairly simple workflow I've created. I can create the first task ok, and I can end it, and save the instance.
However upon creating the context again and reloading the process instance, things go badly - I can't create a task instance from there.
Here is a JUnit4 test case that illustrates what I am trying to do, and the processdefinition.xml is below. If anyone can point out what I'm doing wrong or point me in the right direction, I'd be most grateful.
@Test public void nativeTaskInstanceCommits() { File f = TestFiles.getFile("SimpleWorkflow"); JbpmContext context = JbpmConfiguration.getInstance().createJbpmContext(); try { jbpmContext.setActorId("user"); ProcessDefinition processDefinition = ProcessDefinition.parseXmlReader(new FileReader(f)); context.deployProcessDefinition(processDefinition); ProcessInstance processInstance = new ProcessInstance(processDefinition); context.save(processInstance); TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance(); Long id = processInstance.getId(); Assert.assertTrue("startTask".equals(taskInstance.getName())); taskInstance.end(); context.save(taskInstance); context.close(); context = JbpmConfiguration.getInstance().createJbpmContext(); //this doesn't seem to work for me processInstance = context.loadProcessInstanceForUpdate(id); taskInstance = processInstance.getTaskMgmtInstance().createTaskInstance(); Assert.assertTrue("firstTask".equals(taskInstance.getName())); List<?> list = taskInstance.getToken().getNode().getLeavingTransitions(); for(Object o : list) { Transition trans = (Transition)o; String name = trans.getName(); Assert.assertTrue( (name.equals("finish")) || (name.equals("to taskNode2")) ); } taskInstance.end("finish"); Assert.assertTrue("end".equals(taskInstance.getToken().getNode().getName())); } catch (RuntimeException e) { Assert.fail(e.getMessage()); } catch (Exception e) { Assert.fail(e.getMessage()); } }
<?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="" name="SimpleWorkflow"> <swimlane name="swimlane1"> <assignment expression="user(test)"></assignment> </swimlane> <start-state name="start"> <task name="startTask" swimlane="swimlane1"> <description> The start node's Task </description> </task> <transition to="taskNode1" name="starting transition"></transition> </start-state> <task-node name="taskNode1"> <task swimlane="swimlane1" name="firstTask"> <description> The first task in the workflow </description> </task> <transition to="taskNode2" name="to taskNode2"></transition> <transition to="end" name="finish"></transition> </task-node> <task-node name="taskNode2"> <task name="secondTask" swimlane="swimlane1"> <description> The second task in the workflow </description> </task> <transition to="end" name="to end"></transition> </task-node> <end-state name="end"></end-state> </process-definition>