2 Replies Latest reply on Aug 3, 2009 4:08 AM by Prajatna Mahunta

    Problem with Tax Node

    Prajatna Mahunta Newbie

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