1 Reply Latest reply on Oct 10, 2005 11:03 AM by julian_k

    nodes are executed multiple times

    alal007

       

      <process-definition name="PssDemoFlow">
       <start-state name="start">
       <transition name="trDetermineWfType" to="DetermineWfType"></transition>
       </start-state>
       <decision name="DetermineWfType">
       <event type="node-enter">
       <action name="DetermineWorkflowType" class="pss.jbpm.demo.DetermineWfType">
       <message>this is test</message>
       </action>
       </event>
       <transition name="trSendNotifications" to="SendNotifications"></transition>
       <transition name="trNode1" to="node1"></transition>
       </decision>
       <task-node name="SendNotifications" create-tasks="false">
       <task name="SendNtfTask">
       <assignment class="pss.jbpm.demo.NtfAssignmentHandler"/>
       </task>
       <event type="node-enter">
       <action name="CreateNotifications" class="org.jbpm.taskmgmt.exe.CreateNotifications">
       <message>this is a test123</message>
       </action>
       </event>
       <transition name="trEnd1" to="end1"></transition>
       </task-node>
       <node name="node1">
       <event type="node-enter">
       <action name="NodeAction" class="pss.jbpm.demo.myaction"></action>
       </event>
       <transition name="trEnd2" to="end1"></transition>
       </node>
       <end-state name="end1">
       <event type="node-leave">
       <action name="endWfInstance" class="pss.jbpm.demo.endWfInstance"></action>
       </event>
       </end-state>
      
      </process-definition>
      



      In my action i am hard coding transition to have flow like
      start->DetermineWfType-> node1>end1

      in end1 node-leave action, I am ending the process by using this code

      public void execute(ExecutionContext context) throws Exception {
      
       ProcessInstance processInstance = context.getProcessInstance();
       Collection listTasks = processInstance.getTaskMgmtInstance().getTaskInstances();
       if (listTasks != null && listTasks.size()>0) {
       for (Iterator iter = listTasks.iterator(); iter.hasNext(); ) {
       TaskInstance ti = (TaskInstance) iter.next();
       if (!ti.hasEnded()) {
       ti.setEnd(new java.util.Date());
      
       Token tk = ti.getToken();
       tk.end();
      
       }
       }
       }
       if (!processInstance.hasEnded()) {
       processInstance.end();
      
       }
       }
      



      everthing works fine and flow get executed as I wanted. But after it reached at the end, it executing some of the node even after instance is ended also it traversing to task node.

      I am totally confused
      1. why some node is executing twice
      2. Why it traversing to task-node even after i have ended instance

      this is my debug log from console
      2:11:08,515 DEBUG GraphElement : event 'process-start' on 'ProcessDefinition(PssDemoFlow)' for 'Token(/)'
      12:11:08,531 DEBUG GraphElement : event 'before-signal' on 'StartState(start)' for 'Token(/)'
      12:11:08,531 DEBUG GraphElement : event 'node-leave' on 'StartState(start)' for 'Token(/)'
      12:11:08,531 DEBUG GraphElement : event 'transition' on 'Transition(trDetermineWfType)' for 'Token(/)'
      12:11:08,531 DEBUG GraphElement : event 'node-enter' on 'Decision(DetermineWfType)' for 'Token(/)'
      12:11:08,531 DEBUG GraphElement : executing action 'action[DetermineWorkflowType]'
      12:11:08,578 DEBUG GraphElement : event 'node-leave' on 'Decision(DetermineWfType)' for 'Token(/)'
      12:11:08,578 DEBUG GraphElement : event 'transition' on 'Transition(trNode1)' for 'Token(/)'
      12:11:08,593 DEBUG GraphElement : event 'node-enter' on 'Node(node1)' for 'Token(/)'
      12:11:08,593 DEBUG GraphElement : executing action 'action[NodeAction]'
      12:11:08,593 DEBUG GraphElement : event 'node-leave' on 'Node(node1)' for 'Token(/)'
      12:11:08,593 DEBUG GraphElement : event 'transition' on 'Transition(trEnd2)' for 'Token(/)'
      12:11:08,593 DEBUG GraphElement : event 'node-enter' on 'EndState(end1)' for 'Token(/)'
      12:11:08,593 DEBUG GraphElement : event 'process-end' on 'ProcessDefinition(PssDemoFlow)' for 'Token(/)'
      12:11:08,609 DEBUG GraphElement : event 'node-leave' on 'Node(node1)' for 'Token(/)'
      12:11:08,609 DEBUG GraphElement : event 'transition' on 'Transition(trEnd2)' for 'Token(/)'
      12:11:08,609 DEBUG GraphElement : event 'node-enter' on 'EndState(end1)' for 'Token(/)'
      12:11:08,609 DEBUG GraphElement : event 'node-leave' on 'EndState(end1)' for 'Token(/)'
      12:11:08,609 DEBUG GraphElement : executing action 'action[endWfInstance]'
      12:11:08,625 DEBUG GraphElement : event 'transition' on 'Transition(trSendNotifications)' for 'Token(/)'
      12:11:08,625 DEBUG GraphElement : event 'node-enter' on 'TaskNode(SendNotifications)' for 'Token(/)'
      12:11:08,625 DEBUG GraphElement : executing action 'action[CreateNotifications]'
      12:11:08,625 DEBUG JbpmConfiguration : jbpm.task.instance.class=org.jbpm.taskmgmt.exe.TaskInstance
      12:11:08,625 DEBUG JbpmConfiguration : jbpm.hibernate.properties=hibernate.properties
      12:11:08,640 DEBUG GraphElement : event 'task-assign' on 'Task(SendNtfTask)' for 'Token(/)'
      12:11:08,656 DEBUG GraphElement : event 'task-create' on 'Task(SendNtfTask)' for 'Token(/)'
      12:11:08,656 DEBUG GraphElement : event 'task-assign' on 'Task(SendNtfTask)' for 'Token(/)'
      12:11:08,656 DEBUG GraphElement : event 'task-create' on 'Task(SendNtfTask)' for 'Token(/)'
      12:11:08,656 DEBUG GraphElement : event 'after-signal' on 'StartState(start)' for 'Token(/)'


      Help!!