3 Replies Latest reply on Dec 29, 2005 4:15 PM by iterrell

    Create timer problem coming from completed task

    iterrell

      I'm experimenting with jBPM before integrating it into my application, and I've run into a small snag.

      My original process went like this:

      <process-definition name="myProcess">
       <swimlane name="myLane">
       <assignment class="com.example.MyAssignmentHandler" />
       </swimlane>
       <start-state name="start">
       <transition name="go" to="call" />
       </start-state>
       <state name="call">
       <transition name="go" to="wait" />
       <transition name="done" to="end" />
       </state>
       <state name="wait">
       <timer duedate="10 seconds" transition="go" />
       <transition name="go" to="fax" />
       </state>
       <state name="fax">
       <transition name="go" to="end" />
       </state>
       <end-state name="end" />
      </process-definition>
      


      And it worked fine. Advancing from "call" went to "wait," and 10 seconds later it went to "fax." But, I wanted to make call a task-node that would advance after the task was done. So I changed the state "call" to

       <task-node name="call">
       <task name="phonecall" swimlane="myLane" />
       <transition name="go" to="wait" />
       <transition name="done" to="end" />
       </task-node>
      


      After the completion of the task the process successfully moved to the state "wait." However, it does not create a timer upon entry, and thus does not automatically advance to "fax."

      I noticed from the log that despite not creating the timer, it was at least firing the event "node-enter" on "wait," so I replaced the state "wait" with the following

       <state name="wait">
       <transition name="go" to="fax" />
       <event type="node-enter">
       <create-timer duedate="10 seconds" transition="go" />
       </event>
       </state>
      


      Now the event is being executed, as seen in the log

      DEBUG [GraphElement] executing action 'CreateTimerAction(...)'
      


      however, the SchedulerThread is not finding the timer.

      I'm developing a simple web application using the SchedulerServlet and the service jbpm.sar provided in the 3.0.2 starter kit, and using servlets to interact with jBPM.

      My task servlet looks like:

      package ...;
      import ...;
      
      public class DoTask extends HttpServlet {
      
       @Override
       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
       String action = (String)request.getParameter("action");
       long id = Long.parseLong(request.getParameter("id"));
      
       JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory.getInstance();
       JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
       jbpmSession.beginTransaction();
      
       TaskInstance task = jbpmSession.getTaskMgmtSession().loadTaskInstance(id);
      
       if ("called".equals(action))
       task.end("go");
       else if ("paid".equals(action))
       task.end("done");
      
       jbpmSession.commitTransaction();
       jbpmSession.close();
      
       request.getRequestDispatcher("/index.html").forward(request,response);
       }
      }
      


      Any ideas why my timer isn't getting created, or at least, not found?

      Is the SchedulerServlet the best place for a scheduler in a full blown J2EE application with all of the business (and thus jBPM) logic in Session EJBs?

      Thanks for your help,
      Ian