diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2014-09-10 00:12:30 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2014-09-12 09:08:00 +0200 |
commit | d6989f1e54104d09b8af6d22cf46ea4f6fc5f4dc (patch) | |
tree | 2e9cd83b8a9425ea184b72c12721d7e08ea87d52 /src/main/java/io/trygvis/jz14/db/RobustTimerTask.java | |
download | javazone-2014-master.tar.gz javazone-2014-master.tar.bz2 javazone-2014-master.tar.xz javazone-2014-master.zip |
Diffstat (limited to 'src/main/java/io/trygvis/jz14/db/RobustTimerTask.java')
-rw-r--r-- | src/main/java/io/trygvis/jz14/db/RobustTimerTask.java | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/jz14/db/RobustTimerTask.java b/src/main/java/io/trygvis/jz14/db/RobustTimerTask.java new file mode 100644 index 0000000..af55aa7 --- /dev/null +++ b/src/main/java/io/trygvis/jz14/db/RobustTimerTask.java @@ -0,0 +1,47 @@ +package io.trygvis.jz14.db; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.TimerTask; +import java.util.concurrent.Callable; + +public abstract class RobustTimerTask extends TimerTask { + private static final Logger log = LoggerFactory.getLogger(RobustTimerTask.class); + + private final Class<?> klass; + + private RobustTimerTask(Class<?> klass) { + this.klass = klass; + } + + protected RobustTimerTask() { + this.klass = getClass(); + } + + public static TimerTask robustTimerTask(final TimerTask timerTask) { + return new RobustTimerTask(timerTask.getClass()) { + public void timerRun() throws Exception { + timerTask.run(); + } + }; + } + + public static <T> TimerTask robustTimerTask(final Callable<T> callable) { + return new RobustTimerTask(callable.getClass()) { + public void timerRun() throws Exception { + callable.call(); + } + }; + } + + public void run() { + try { + timerRun(); + } catch (Exception e) { + log.error("Timer task " + klass.getName() + " failed.", e); + } + } + + public abstract void timerRun() throws Exception; +} |