1 Reply Latest reply on Jun 9, 2008 2:05 AM by kukeltje

    Timer never stop

    greenhand

      I ran into a situation like this when I try a test process. I have a very simple process:

      <?xml version="1.0" encoding="UTF-8"?>
      
      <process-definition xmlns="" name="TryTimer">
       <start-state name="start-state1">
       <transition to="task-node1"></transition>
       </start-state>
       <task-node name="task-node1">
       <task name="asignApprover">
       <assignment class="com.pbsg.mst.wf.ApproverAssignmentHandler"></assignment>
       </task>
       <event type="node-enter">
       <create-timer duedate="5 seconds" name="myTimer" repeat="10 seconds">
       <action name="printsomething" class="com.pbsg.mst.wf.ApproverReminderAction"></action>
       </create-timer>
       </event>
       <event type="node-leave">
       <cancel-timer name="myTimer"></cancel-timer>
       </event>
       <transition to="end-state1"></transition>
       </task-node>
       <end-state name="end-state1"></end-state>
      </process-definition>


      I have this in onMessage in my MDB:
      NewProcessInstanceCommand newProcessInstanceCommand = new NewProcessInstanceCommand(
       "TryTimer");
       newProcessInstanceCommand.setKey(msg.getJMSCorrelationID());
       RemoteCommandServiceHome commandServiceHome = (RemoteCommandServiceHome) ctx
       .lookup("ejb/CommandServiceBean");
       RemoteCommandService commandService = commandServiceHome.create();
       ProcessInstance pi = (ProcessInstance) commandService
       .execute(newProcessInstanceCommand);
      
       String name = pi.getRootToken().getNode().getName();
       long id = pi.getId();
       JbpmContext jbpmContext = getJbpmContext();
       ProcessInstance pi2 = jbpmContext.getProcessInstance(id);
       pi2.signal(); //leaving start node
       name = pi2.getRootToken().getNode().getName();
       id = pi2.getId();
       jbpmContext.close();
       jbpmContext = getJbpmContext();
      
       name = pi2.getRootToken().getNode().getName();
       pi2.signal();
       jbpmContext.close();


      The the session time out because of a breakpoint, then an exception is thrown. I believe this caused that the process never leave the node, so the timer never gets cancelled.

      Now the ActionHandler prints the debug message 10 seconds. Even I shut down the app server. When the server is restarted, it starts printing without getting new MQ message.

      I am not sure how to stop the running timer. Can anyone help?

      A more fundemental question is that how to end the task and leave the node programatically and hopefully the timer can be stopped? I did not specify actorId for the task. The methods in TaskMgmtSession require a instance or an id. Is there a way that I get all the task instance without requiring an id?

      Thanks!

        • 1. Re: Timer never stop
          kukeltje

           


          The the session time out because of a breakpoint, then an exception is thrown. I believe this caused that the process never leave the node, so the timer never gets cancelled.


          Then make sure the token/process is signalled again. In case of errors you need to have your own retry mechanisms

          The methods in TaskMgmtSession require a instance or an id. Is there a way that I get all the task instance without requiring an id?
          Yes, look at the api