00001
00027 package org.objectweb.jonas_lib.deployment.work;
00028
00029 import java.util.Enumeration;
00030 import java.util.Vector;
00031
00032 import org.objectweb.util.monolog.api.Logger;
00033 import org.objectweb.util.monolog.api.BasicLevel;
00034
00035 import org.objectweb.jonas.common.Log;
00036
00044 public class WorkCleaner extends Thread {
00045
00049 private static Logger logger = Log.getLogger(Log.JONAS_DEPLOY_WORK_PREFIX);
00050
00054 private static final int SLEEP_TIME = 300000;
00055
00060 private static WorkCleaner unique = null;
00061
00065 private Vector taskList = null;
00066
00070 private WorkCleaner() {
00071 super("WorkCleaner");
00072
00073
00074 this.setPriority(Thread.MIN_PRIORITY);
00075 taskList = new Vector();
00076 }
00077
00081 protected static Logger getLogger() {
00082 return logger;
00083 }
00084
00089 public static synchronized WorkCleaner getInstance() {
00090 if (unique == null) {
00091 unique = new WorkCleaner();
00092 }
00093 getLogger().log(BasicLevel.DEBUG, "getInstance : ->" + unique);
00094 return unique;
00095 }
00096
00102 public synchronized void registerTask(AbsCleanTask absCleanTask) throws CleanerException {
00103 getLogger().log(BasicLevel.DEBUG, "registerTask : called");
00104
00105 if (taskList == null) {
00106 throw new CleanerException("Can not add an entry, the vector is null");
00107 }
00108 if (absCleanTask == null) {
00109 throw new CleanerException("Can not add a null entry");
00110 }
00111
00112 if (!taskList.contains(absCleanTask)) {
00113 taskList.add(absCleanTask);
00114 }
00115 }
00116
00120 public synchronized void executeTasks() {
00121 try {
00122 AbsCleanTask absCleanTask = null;
00123
00124 getLogger().log(BasicLevel.DEBUG, "executeTasks : wake up");
00125 for (Enumeration e = taskList.elements(); e.hasMoreElements();) {
00126
00127 absCleanTask = (AbsCleanTask) e.nextElement();
00128 absCleanTask.execute();
00129 }
00130
00131 } catch (CleanerException e) {
00132 e.printStackTrace();
00133 }
00134 }
00135
00139 public void run() {
00140
00141 for (;;) {
00142 executeTasks();
00143 try {
00144 Thread.sleep(SLEEP_TIME);
00145 } catch (InterruptedException e) {
00146 throw new RuntimeException("Thread fail to sleep");
00147 }
00148 }
00149 }
00150
00151 }