added support for ErrorHandler with DelegatingErrorHandlingRunnable in the TimerManagerTaskScheduler
This commit is contained in:
parent
d5d3104b7b
commit
65e00f7540
|
|
@ -27,6 +27,8 @@ import commonj.timers.TimerListener;
|
||||||
|
|
||||||
import org.springframework.scheduling.TaskScheduler;
|
import org.springframework.scheduling.TaskScheduler;
|
||||||
import org.springframework.scheduling.Trigger;
|
import org.springframework.scheduling.Trigger;
|
||||||
|
import org.springframework.scheduling.support.DelegatingErrorHandlingRunnable;
|
||||||
|
import org.springframework.scheduling.support.ErrorHandler;
|
||||||
import org.springframework.scheduling.support.SimpleTriggerContext;
|
import org.springframework.scheduling.support.SimpleTriggerContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -34,49 +36,62 @@ import org.springframework.scheduling.support.SimpleTriggerContext;
|
||||||
* a CommonJ {@link commonj.timers.TimerManager}.
|
* a CommonJ {@link commonj.timers.TimerManager}.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
|
* @author Mark Fisher
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
*/
|
*/
|
||||||
public class TimerManagerTaskScheduler extends TimerManagerAccessor implements TaskScheduler {
|
public class TimerManagerTaskScheduler extends TimerManagerAccessor implements TaskScheduler {
|
||||||
|
|
||||||
|
private volatile ErrorHandler errorHandler;
|
||||||
|
|
||||||
|
public void setErrorHandler(ErrorHandler errorHandler) {
|
||||||
|
this.errorHandler = errorHandler;
|
||||||
|
}
|
||||||
|
|
||||||
public ScheduledFuture schedule(Runnable task, Trigger trigger) {
|
public ScheduledFuture schedule(Runnable task, Trigger trigger) {
|
||||||
return new ReschedulingTimerListener(task, trigger).schedule();
|
return new ReschedulingTimerListener(errorHandlingTask(task, true), trigger).schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScheduledFuture schedule(Runnable task, Date startTime) {
|
public ScheduledFuture schedule(Runnable task, Date startTime) {
|
||||||
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
|
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, false));
|
||||||
Timer timer = getTimerManager().schedule(futureTask, startTime);
|
Timer timer = getTimerManager().schedule(futureTask, startTime);
|
||||||
futureTask.setTimer(timer);
|
futureTask.setTimer(timer);
|
||||||
return futureTask;
|
return futureTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period) {
|
public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period) {
|
||||||
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
|
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
|
||||||
Timer timer = getTimerManager().scheduleAtFixedRate(futureTask, startTime, period);
|
Timer timer = getTimerManager().scheduleAtFixedRate(futureTask, startTime, period);
|
||||||
futureTask.setTimer(timer);
|
futureTask.setTimer(timer);
|
||||||
return futureTask;
|
return futureTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScheduledFuture scheduleAtFixedRate(Runnable task, long period) {
|
public ScheduledFuture scheduleAtFixedRate(Runnable task, long period) {
|
||||||
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
|
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
|
||||||
Timer timer = getTimerManager().scheduleAtFixedRate(futureTask, 0, period);
|
Timer timer = getTimerManager().scheduleAtFixedRate(futureTask, 0, period);
|
||||||
futureTask.setTimer(timer);
|
futureTask.setTimer(timer);
|
||||||
return futureTask;
|
return futureTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay) {
|
public ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay) {
|
||||||
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
|
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
|
||||||
Timer timer = getTimerManager().schedule(futureTask, startTime, delay);
|
Timer timer = getTimerManager().schedule(futureTask, startTime, delay);
|
||||||
futureTask.setTimer(timer);
|
futureTask.setTimer(timer);
|
||||||
return futureTask;
|
return futureTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay) {
|
public ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay) {
|
||||||
TimerScheduledFuture futureTask = new TimerScheduledFuture(task);
|
TimerScheduledFuture futureTask = new TimerScheduledFuture(errorHandlingTask(task, true));
|
||||||
Timer timer = getTimerManager().schedule(futureTask, 0, delay);
|
Timer timer = getTimerManager().schedule(futureTask, 0, delay);
|
||||||
futureTask.setTimer(timer);
|
futureTask.setTimer(timer);
|
||||||
return futureTask;
|
return futureTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Runnable errorHandlingTask(Runnable delegate, boolean isRepeatingTask) {
|
||||||
|
ErrorHandler errorHandler = this.errorHandler != null ? this.errorHandler
|
||||||
|
: (isRepeatingTask ? ErrorHandler.LOG_AND_SUPPRESS : ErrorHandler.LOG_AND_PROPAGATE);
|
||||||
|
return new DelegatingErrorHandlingRunnable(delegate, errorHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ScheduledFuture adapter that wraps a CommonJ Timer.
|
* ScheduledFuture adapter that wraps a CommonJ Timer.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue