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..