Skip to content

Commit 65e00f7

Browse files
committed
added support for ErrorHandler with DelegatingErrorHandlingRunnable in the TimerManagerTaskScheduler
1 parent d5d3104 commit 65e00f7

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

org.springframework.context.support/src/main/java/org/springframework/scheduling/commonj/TimerManagerTaskScheduler.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,56 +27,71 @@
2727

2828
import org.springframework.scheduling.TaskScheduler;
2929
import org.springframework.scheduling.Trigger;
30+
import org.springframework.scheduling.support.DelegatingErrorHandlingRunnable;
31+
import org.springframework.scheduling.support.ErrorHandler;
3032
import org.springframework.scheduling.support.SimpleTriggerContext;
3133

3234
/**
3335
* Implementation of Spring's {@link TaskScheduler} interface, wrapping
3436
* a CommonJ {@link commonj.timers.TimerManager}.
3537
*
3638
* @author Juergen Hoeller
39+
* @author Mark Fisher
3740
* @since 3.0
3841
*/
3942
public class TimerManagerTaskScheduler extends TimerManagerAccessor implements TaskScheduler {
4043

44+
private volatile ErrorHandler errorHandler;
45+
46+
public void setErrorHandler(ErrorHandler errorHandler) {
47+
this.errorHandler = errorHandler;
48+
}
49+
4150
public ScheduledFuture schedule(Runnable task, Trigger trigger) {
42-
return new ReschedulingTimerListener(task, trigger).schedule();
51+
return new ReschedulingTimerListener(errorHandlingTask(task, true), trigger).schedule();
4352
}
4453

4554
public ScheduledFuture schedule(Runnable task, Date startTime) {
46-
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
55+
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, false));
4756
Timer timer = getTimerManager().schedule(futureTask, startTime);
4857
futureTask.setTimer(timer);
4958
return futureTask;
5059
}
5160

5261
public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period) {
53-
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
62+
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
5463
Timer timer = getTimerManager().scheduleAtFixedRate(futureTask, startTime, period);
5564
futureTask.setTimer(timer);
5665
return futureTask;
5766
}
5867

5968
public ScheduledFuture scheduleAtFixedRate(Runnable task, long period) {
60-
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
69+
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
6170
Timer timer = getTimerManager().scheduleAtFixedRate(futureTask, 0, period);
6271
futureTask.setTimer(timer);
6372
return futureTask;
6473
}
6574

6675
public ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay) {
67-
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
76+
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
6877
Timer timer = getTimerManager().schedule(futureTask, startTime, delay);
6978
futureTask.setTimer(timer);
7079
return futureTask;
7180
}
7281

7382
public ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay) {
74-
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
83+
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
7584
Timer timer = getTimerManager().schedule(futureTask, 0, delay);
7685
futureTask.setTimer(timer);
7786
return futureTask;
7887
}
7988

89+
private Runnable errorHandlingTask(Runnable delegate, boolean isRepeatingTask) {
90+
ErrorHandler errorHandler = this.errorHandler != null ? this.errorHandler
91+
: (isRepeatingTask ? ErrorHandler.LOG_AND_SUPPRESS : ErrorHandler.LOG_AND_PROPAGATE);
92+
return new DelegatingErrorHandlingRunnable(delegate, errorHandler);
93+
}
94+
8095

8196
/**
8297
* ScheduledFuture adapter that wraps a CommonJ Timer.

0 commit comments

Comments
 (0)