Updating Timer
drashmi Oct 17, 2007 7:03 AMHi All,
I have a requirement according to which I need to add one more column to the JBPM_TIMER table and update that value before executing the Timer.
I have updated the Timer.hbm.xml and Timer.java accordingly after making changes in the database.
Below is the JUnit test which I am using to update the Timer object. However, I am getting an AssertionFailure.
public void testUpdateThreadStatus() throws Exception { JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); SchedulerSession schedulerSession = null; Session session = null; Timer timer = null; Long timerId = new Long(3919710); try { session = jbpmContext.getSession(); schedulerSession = jbpmContext.getSchedulerSession(); timer = (Timer)session.load(Timer.class, timerId); System.out.println("Timer object retrieved from Database : " + timer.getName()); if(timer.getThreadStatus() == 0) { System.out.println("Going to update the THREADSTATUS_ column for the Timer " + timer.getId()); timer.setThreadStatus(1); schedulerSession.saveTimer(timer); } } finally { if(jbpmContext != null) { jbpmContext.close(); } } }
The error which I get is as given below:
DEBUG> org.hibernate.event.def.AbstractFlushingEventListener[main]: post flush
ERROR> org.hibernate.AssertionFailure[main]: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: collection [org.jbpm.graph.def.Node.leavingTransitions] was not processed by flush()
at org.hibernate.engine.CollectionEntry.postFlush(CollectionEntry.java:205)
at org.hibernate.event.def.AbstractFlushingEventListener.postFlush(AbstractFlushingEventListener.java:332)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:28)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:161)
at org.jbpm.svc.Services.close(Services.java:211)
at org.jbpm.JbpmContext.close(JbpmContext.java:138)
at com.ssc.faw.idf.junit.bpm.UpdateThreadStatusForSchedulerThread.testUpdateThreadStatus(UpdateThreadStatusForSchedulerThread.java:72)
My requirement is only to update the Timer object before actually executing the Timer.
Any help in this regard will be very useful for me.
Thanks in advance.