From 3333454cef0c9519ca38c36cc4a40ebc64de1a67 Mon Sep 17 00:00:00 2001 From: Stuart Douglas Date: Wed, 3 Aug 2011 14:27:22 +1000 Subject: [PATCH] Fix bug with removing non-persistent timers --- .../main/java/org/jboss/ejb3/timerservice/mk2/TimerImpl.java | 5 +++-- .../org/jboss/ejb3/timerservice/mk2/TimerServiceImpl.java | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerImpl.java b/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerImpl.java index dc7b63b..4bb2fa0 100644 --- a/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerImpl.java +++ b/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerImpl.java @@ -214,12 +214,12 @@ public void cancel() throws IllegalStateException, NoSuchObjectLocalException, E if (currentTx == null) { // cancel any scheduled Future for this timer this.cancelTimeout(); + // persist changes + timerService.persistTimer(this); } else { this.registerTimerCancellationWithTx(currentTx); } - // persist changes - timerService.persistTimer(this); } /** @@ -720,6 +720,7 @@ public void afterCompletion(int status) { case IN_TIMEOUT: case RETRY_TIMEOUT: this.timer.cancelTimeout(); + timerService.persistTimer(timer); break; } diff --git a/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerServiceImpl.java b/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerServiceImpl.java index 9b15825..1de6816 100644 --- a/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerServiceImpl.java +++ b/timerservice-mk2/src/main/java/org/jboss/ejb3/timerservice/mk2/TimerServiceImpl.java @@ -1008,8 +1008,10 @@ public void afterCompletion(int status) { TimerState timerState = this.timer.getState(); switch (timerState) { case ACTIVE: + if (this.timer.isPersistent()) { + timerPersistence.removeTimer(this.timer.getPersistentState()); + } this.timer.setTimerState(TimerState.CANCELED); - timerPersistence.removeTimer(this.timer.getPersistentState()); break; }