Problem with Tax Node
prajatna Aug 3, 2009 3:55 AMHi,
I have a task node with two transitions and a task attached to it.The code is as follows..
<task-node name="HOD_Approval"> <event type="node-enter"> <action class="com.sample.action.ProcessAction" accept-propagated-events="false"></action> </event> <transition to="Finance_Approval" name="Accepted"></transition> <transition to="end-state" name="Denied"></transition> </task-node>
Inside ProcessAction class I am accepting the decision from user and want to go to the next transition accordingly..
public class ProcessAction implements ActionHandler { private static final long serialVersionUID = 1L; public void execute(ExecutionContext executionContext) throws Exception { System.out.println("######################---------ProcessAction------------1-----------------###################### ."); System.out.println("This Node is---"+executionContext.getNode().getName()); System.out.print("Enter your decission: "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String decission = null; try { decission = br.readLine(); } catch (IOException ioe) { System.out.println("IO error trying to read your decission!"); } System.out.println("Thanks for the desission, " + decission); System.out.println("######################---------ProcessAction------------2-----------------###################### ."); if(decission != null && decission.equalsIgnoreCase("a")){ System.out.println("######################---------ProcessAction----a--------3-----------------###################### ."); executionContext.getTaskInstance().end("Accepted"); } else if(decission != null && decission.equalsIgnoreCase("d")){ System.out.println("######################---------ProcessAction-----d-------3-----------------###################### ."); executionContext.leaveNode("Denied"); } else if(decission != null && decission.equalsIgnoreCase("c")){ System.out.println("######################---------ProcessAction-----c-------3-----------------###################### ."); executionContext.leaveNode("checkBudget"); } else{ System.out.println("Error trying to read your decission!..Enter only a/d "); } } }
With this the flow is navigating correctly to the next node as per the decision, But after reaching end -state , again the process is selecting a default transition ..where as it should stop, at end node..
The class I am using to invoke the jBPM is as follows..
public class TravelProcessTest extends TestCase { public static void main(String args[])throws Exception { new TravelProcessTest().execute(); } public void execute() throws Exception { JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); // Extract a process definition from the processdefinition.xml file. ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("simple/processdefinition.xml"); //HashMap map = new HashMap(); //map.put("travelDate",new Integer(100)); //map.put("travelPeriod",new Integer(50)); //Create an instance of the process definition. //ProcessInstance instance = new ProcessInstance(processDefinition,map); ProcessInstance instance = new ProcessInstance(processDefinition); System.out.println("--------------------1-----------------######### ."); displayStatus(instance); System.out.println("---------------------2-----------------########## ."); instance.signal(); System.out.println("---------------------3-----------------###########."); displayStatus(instance); System.out.println("---------------------4-----------------###########."); instance.end(); } private void displayStatus(ProcessInstance instance) { String nodeName = instance.getRootToken().getNode().getName(); System.out.println("You are now in node: "+nodeName); } }
Can you please suggest what is going wrong.. so that even after reaching end state , the process is again propagating to another transition..