package org.menacheri.jetserver.service.impl; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import org.menacheri.jetserver.app.Task; import org.menacheri.jetserver.service.TaskManagerService; /** * A thin wrapper on a <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html" * >ScheduledThreadPoolExecutor</a> class. It is used so as to keep track of all * the tasks. In future they could be made durable tasks which can be * transferred between multiple nodes for fail over, etc. * * @author Abraham Menacherry * */ public class SimpleTaskManagerService extends ScheduledThreadPoolExecutor implements TaskManagerService { /** * Used to create a unique identifier for each task */ private AtomicInteger taskNum; public SimpleTaskManagerService(int corePoolSize) { super(corePoolSize); taskNum = new AtomicInteger(0); } @Override public void execute(Task task) { super.execute(task); } @Override @SuppressWarnings("rawtypes") public ScheduledFuture schedule(final Task task, long delay, TimeUnit unit) { task.setId(taskNum.incrementAndGet()); return super.schedule(task, delay, unit); } @Override @SuppressWarnings("rawtypes") public ScheduledFuture scheduleAtFixedRate(Task task, long initialDelay, long period, TimeUnit unit) { task.setId(taskNum.incrementAndGet()); return super.scheduleAtFixedRate(task, initialDelay, period, unit); } @Override @SuppressWarnings("rawtypes") public ScheduledFuture scheduleWithFixedDelay(Task task, long initialDelay, long delay, TimeUnit unit) { task.setId(taskNum.incrementAndGet()); return super.scheduleWithFixedDelay(task, initialDelay, delay, unit); } }