WorkCleaner.java

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         // set a low priority for this thread in order to reduce
00073         // the impacts on 'functionnal' threads.
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         // checks
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         // Add if don't already exist
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 }

Generated on Tue Feb 15 15:05:51 2005 for JOnAS by  doxygen 1.3.9.1