timer 4.3 error
lamj1 Apr 6, 2010 3:34 PMI modified the org.jbpm.examples.eventlistener jUnit test case slightly to introduce a timer as follow with a new <on event="NotifyRCP">
<?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"); //START NEW CODE expectedLogs.add("NotifyRCP"); try{ Thread.sleep(6000); } catch(Exception e){} //END NEW CODE 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.
-
LogListener.java.zip 553 bytes
-
process.jpdl.xml 1.3 KB
-
EventListenerTest.java.zip 743 bytes