Community

timer 4.3 error

created by Jas Lam in jBPM - View the full discussion

I modified the org.jbpm.examples.eventlistener jUnit test case slightly to introduce a timer as follow: the red code is the newly insert timer.

 

 

<?xml version="1.0" encoding="UTF-8"?>
 
<process name="EventListener" xmlns="http://jbpm.org/4.2/jpdl">
  <on event="start">
    <event-listener>
      <field name="msg"><string value="start on process definition"/></field>
    </event-listener>
  </on>
 
  <start g="17,19,48,48">
    <transition to="wait"/>
  </start>
 
  <state name="wait" g="96,16,104,52">
  <on event="start">
   <event-listener>
        <field name="msg"><string value="start on activity wait"/></field>
   </event-listener>
  </on>
 
  <on event="NotifyRCP">
      <timer duedate="5 seconds"/>
       <event-listener>
          <field name="msg"><string value="NotifyRCP"/></field>       
       </event-listener>      
    </on>      
 
    <on event="end">
      <event-listener>
        <field name="msg"><string value="end on activity wait"/></field>
      </event-listener>
    </on>
 
    <transition to="park">
      <event-listener>
        <field name="msg"><string value="take transition"/></field>
      </event-listener>
    </transition>
  </state>
 
  <state name="park" g="231,19,80,52"/>
 
</process>
 
 
 
 

 

In the test case i just add an additional text to the expectedLogs and a sleep

 

public void testEventListener() {
    ProcessInstance processInstance = executionService.startProcessInstanceByKey("EventListener");
    List<String> expectedLogs = new ArrayList<String>();
    expectedLogs.add("start on process definition");
    expectedLogs.add("start on activity wait");
    expectedLogs.add("NotifyRCP");
    try{ Thread.sleep(6000); } catch(Exception e){}
 
    List<String> logs = (List<String>) executionService.getVariable(processInstance.getId(), "logs");
    
    assertEquals(expectedLogs, logs);
    
    Execution execution = processInstance.findActiveExecutionIn("wait");    
    executionService.signalExecutionById(execution.getId());
    
    logs = (List<String>) executionService.getVariable(processInstance.getId(), "logs");
    expectedLogs.add("end on activity wait");
    expectedLogs.add("take transition");
    
    assertEquals(expectedLogs, logs);
  }

 

When I run this code the first time, it always work!!!! BUT after that I kept failing when the timer triggered!!!  with the following error trace. Could some one confirm this? i tried this on two separate machine and getting the same behavior. Full source code is attached.

 

 

15:09:12,216 FIN | [ExecuteActivity] execution[EventListener.50007.wait] executes activity(wait)
[start on process definition, start on activity wait]
15:09:12,232 FIN | [HibernateSessionResource] ----- committing hibernate tx 23511316 -------------------------------------------------------
15:09:12,240 FIN   | [HibernateSessionResource] ----- beginning hibernate tx 31798998 --------------------------------------------------------
15:09:12,241 FIN   | [HibernateSessionResource] ----- committing hibernate tx 32102833 -------------------------------------------------------
15:09:12,242 FIN   | [HibernateSessionResource] ----- beginning hibernate tx 22677439 --------------------------------------------------------
15:09:12,251 FIN   | [HibernateSessionResource] ----- committing hibernate tx 32700170 -------------------------------------------------------
15:09:17,210 FIN   | [HibernateSessionResource] ----- beginning hibernate tx 28678425 --------------------------------------------------------
### EXCEPTION ###########################################
15:09:17,217 SEV   | [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.jbpm.pvm.internal.job.TimerImpl#50012]
     at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1792)
     at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2435)
     at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)
     at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)
     at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
     at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
     at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
     at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
     at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
     at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
     at org.jbpm.pvm.internal.tx.HibernateSessionResource.prepare(HibernateSessionResource.java:56)
     at org.jbpm.pvm.internal.tx.StandardTransaction.commit(StandardTransaction.java:107)
     at org.jbpm.pvm.internal.tx.StandardTransaction.complete(StandardTransaction.java:64)
     at org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:61)
     at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
     at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
     at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
     at org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)
     at org.jbpm.pvm.internal.jobexecutor.DispatcherThread.acquireJobs(DispatcherThread.java:126)
     at org.jbpm.pvm.internal.jobexecutor.DispatcherThread.run(DispatcherThread.java:67)
### EXCEPTION ###########################################
15:09:17,219 FIN   | [HibernateSessionResource] ----- rolling back hibernate tx 28848200 -----------------------------------------------------
15:09:17,270 FIN   | [HibernateSessionResource] ----- beginning hibernate tx 1191324 --------------------------------------------------------

Thank you in advance.

Reply to this message by going to Community

Start a new discussion in jBPM at Community