" <state name='b'/>" +
"</process-definition>"
);
processDefinition = saveAndReload(processDefinition);
ProcessInstance processInstance = new ProcessInstance(processDefinition);
long before = System.currentTimeMillis();
processInstance.signal();
long after = System.currentTimeMillis();
jbpmContext.save(processInstance);
newTransaction();
Iterator iter = schedulerSession.findTimersByDueDate();
assertTrue(iter.hasNext());
Timer timer = (Timer) iter.next();
assertNotNull(timer);
Date date = timer.getDueDate();
assertNotNull(date);
assertTrue(before <= date.getTime());
assertTrue(date.getTime() <= after);
long origDueDate = date.getTime();
assertFalse(iter.hasNext());
commitAndCloseSession();
SchedulerThread schedulerThread = new SchedulerThread(jbpmConfiguration);
schedulerThread.executeTimers();
beginSessionTransaction();
iter = schedulerSession.findTimersByDueDate();
assertTrue(iter.hasNext());
timer = (Timer) iter.next();
assertFalse(iter.hasNext());
assertEquals(origDueDate+5000, timer.getDueDate().getTime());
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
before = System.currentTimeMillis();
processInstance.signal("back");
after = System.currentTimeMillis();
jbpmContext.save(processInstance);
newTransaction();
iter = schedulerSession.findTimersByDueDate();
assertTrue(iter.hasNext());
timer = (Timer) iter.next();
assertNotNull(timer);
date = timer.getDueDate();
assertNotNull(date);
assertTrue(before <= date.getTime());
assertTrue(date.getTime() <= after);
assertFalse(iter.hasNext());
newTransaction();
processInstance = jbpmContext.loadProcessInstance(processInstance.getId());
processInstance.signal();
jbpmContext.save(processInstance);
newTransaction();
iter = schedulerSession.findTimersByDueDate();