diff options
author | Simon Rettberg | 2015-08-22 17:29:15 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-22 17:29:15 +0200 |
commit | 5b94675225077ed8c88f39d15279e920f267d954 (patch) | |
tree | 8b55ee6d7a8a881fe49695f23bc5234832a85031 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/Maintenance.java | |
parent | [client] synced image details fetching (diff) | |
download | tutor-module-5b94675225077ed8c88f39d15279e920f267d954.tar.gz tutor-module-5b94675225077ed8c88f39d15279e920f267d954.tar.xz tutor-module-5b94675225077ed8c88f39d15279e920f267d954.zip |
[server] Foundations for the maintenance module
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/Maintenance.java')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/Maintenance.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/Maintenance.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/Maintenance.java new file mode 100644 index 00000000..98f7f09b --- /dev/null +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/Maintenance.java @@ -0,0 +1,58 @@ +package org.openslx.bwlp.sat.maintenance; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +import org.apache.log4j.Logger; + +public class Maintenance extends Thread { + + private static final Logger LOGGER = Logger.getLogger(Maintenance.class); + + private static Maintenance worker = null; + + private static BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(50); + + private Maintenance() { + } + + private synchronized static void ensureRunning() { + if (worker == null || !worker.isAlive()) { + worker = new Maintenance(); + worker.start(); + } + } + + public static void submit(Runnable job) throws InterruptedException { + ensureRunning(); + queue.put(job); + } + + public static boolean trySubmit(Runnable job) { + ensureRunning(); + return queue.offer(job); + } + + @Override + public void run() { + LOGGER.info("Maintenance Thread started"); + try { + Runnable job = queue.take(); + runJob(job); + } catch (InterruptedException e) { + LOGGER.warn("Maintenance Thread was interrupted!", e); + if (!queue.isEmpty()) { + ensureRunning(); + } + } + } + + private void runJob(Runnable job) { + try { + job.run(); + } catch (Throwable t) { + LOGGER.warn("Uncaught exception in job '" + job.getClass().getSimpleName() + "'", t); + } + } + +} |