1 17 18 package org.sape.carbon.services.scheduler; 19 20 import java.util.ArrayList ; 21 import java.util.Collection ; 22 import java.util.Iterator ; 23 import java.util.Timer ; 24 25 import org.sape.carbon.core.component.ComponentConfiguration; 26 import org.sape.carbon.core.component.lifecycle.Configurable; 27 import org.sape.carbon.core.component.lifecycle.Startable; 28 import org.sape.carbon.core.component.lifecycle.Suspendable; 29 30 import org.sape.carbon.services.threadpool.ThreadPool; 31 32 import org.apache.commons.logging.Log; 33 import org.apache.commons.logging.LogFactory; 34 35 36 49 public class DefaultSchedulerServiceImpl 50 implements SchedulerService, Configurable, Startable, Suspendable { 51 52 55 private Log log = 56 LogFactory.getLog(this.getClass()); 57 58 59 private Timer internalTimer; 60 61 62 private Collection scheduledTasks = new ArrayList (); 63 64 67 public void configure(ComponentConfiguration configuration) { 68 SchedulerServiceConfiguration schedulerConfiguration = 69 (SchedulerServiceConfiguration) configuration; 70 71 ThreadPool threadPool = schedulerConfiguration.getThreadPool(); 72 73 scheduledTasks.clear(); 74 75 FixedRateTaskConfiguration[] fixedRateTasks = 76 schedulerConfiguration.getFixedRateTask(); 77 for (int i = 0; i < fixedRateTasks.length; i++) { 78 scheduledTasks.add(new FixedRateTask(fixedRateTasks[i], threadPool)); 79 } 80 81 FixedDelayTaskConfiguration[] fixedDelayTasks = 82 schedulerConfiguration.getFixedDelayTask(); 83 for (int i = 0; i < fixedDelayTasks.length; i++) { 84 scheduledTasks.add(new FixedDelayTask(fixedDelayTasks[i], threadPool)); 85 } 86 } 87 88 91 public void start() { 92 scheduleAllTasks(); 93 } 94 95 98 public void stop() { 99 if (log.isTraceEnabled()) { 100 log.trace("stopping scheduler"); 101 } 102 internalTimer.cancel(); 103 } 104 105 108 public void resume() { 109 scheduleAllTasks(); 110 } 111 112 115 public void suspend() { 116 internalTimer.cancel(); 117 } 118 119 122 private void scheduleAllTasks() { 123 this.internalTimer = new Timer (true); 126 127 Iterator taskIterator = this.scheduledTasks.iterator(); 128 129 while (taskIterator.hasNext()) { 130 AbstractTask task = (AbstractTask) taskIterator.next(); 131 task.schedule(this.internalTimer); 132 } 133 } 134 } 135 | Popular Tags |