/* * (c) Rob Gordon 2005 */ package org.oddjob.scheduling; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import org.oddjob.OddjobExecutors; /** * A TimerService that doesn't allow it Executor to be shut down. Not used * at the moment. * * @author Rob Gordon * */ public class OddjobTimerService implements OddjobExecutors { private static final Logger logger = Logger.getLogger(OddjobTimerService.class); private transient String name; /** The scheduler */ private transient ScheduledExecutorService scheduler; private int poolSize = 5; /** * Get the name. * * @return The name. */ public String getName() { return name; } /** * Set the name * * @param name The name. */ public void setName(String name) { this.name = name; } public ExecutorService getPoolExecutor() { return new UnstoppableExecutor(scheduler); } public ScheduledExecutorService getScheduledExecutor() { return new UnstoppableExecutor(scheduler); } /** * Start the shcheduler. * * @throws SchedulerException */ public void start() { scheduler = new ScheduledThreadPoolExecutor(poolSize); } public void stop() { logger.debug("Shutting down scheduler."); // shutdown the scheduler waiting for jobs. Don't close the // persister until the scheduler is closed and jobs have completed. scheduler.shutdownNow(); try { while (!scheduler.awaitTermination(5, TimeUnit.SECONDS)) { logger.debug("Waiting for scheduler to terminate..."); } } catch (InterruptedException e) { logger.warn("Shutdown wait interrupted."); } scheduler = null; } /** */ public Date getTimeNow() { return new Date(); } public int getPoolSize() { return poolSize; } public void setPoolSize(int poolSize) { this.poolSize = poolSize; } public String toString() { if (name == null) { return getClass().getSimpleName(); } return name; } }