2 Replies Latest reply on Apr 29, 2013 3:57 PM by jamesbeam

    Simple process with WorkItemHandler doesn't end

      Using jBPM 5.4 with persistence (Hibernate 4, and JPA2) I have a 4 node process: 

       

          start->MyWorkItemHandler->Script (System.out.println("done") ->(terminating) end.

       

      The only thing my workItemhandler does is complete the workitem.   workItemManager.completeWorkItem(workItem.getId(),null);

       

      The process starts, and the workitem handler completes.  I get the "done" printed on the screen.  I see in the NodeInstanceLog that my terminating end node is reached and completed (type=1).  I also set up a ProcessEventlistener and see that the afterProcessCompleted() gets called with the processID I'm expecting.

       

      HOWEVER, my process is never marked as completed in the ProcessInstanceLog (Status = 0);

       

      Has anyone seen this?  Does anyone have any thoughts as to what is going on?  A bug?

       

      Thanks,

       

      -J

        • 1. Re: Simple process with WorkItemHandler doesn't end
          swiderski.maciej

          you mean that process is not reported as completed in history logs but it is in fact completed, right? If so, it could be a bug that is db specific. What db do you run with, is it oracle? Recently there was a fix for this but it was on master (6.0).

           

          HTH

          1 of 1 people found this helpful
          • 2. Re: Simple process with WorkItemHandler doesn't end

            Thank you for the information.  Yes that is what I mean; and suspiciously, yes, I am running with Oracle (11g).  As you mentioned, it looks like the issue https://issues.jboss.org/browse/JBPM-3719.  As a work-around until 6 is released, does it seem reasonable to just add an update statement into my ProcessEventListener?  Something like:

             

               EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa");

               EntityManager em = emf.createEntityManager();

               em.getTransaction().begin();

               ProcessInstanceLog pil = em.find(ProcessInstanceLog.class,event.getProcessInstance().getId());

               pil.setEnd(new Date());

               pil.setStatus(2);

               em.getTransaction().commit();

               em.close();

             

            Thanks again,

            -J