1 17 18 package org.apache.james.fetchpop; 19 import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger; 20 import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler; 21 import org.apache.avalon.framework.activity.Disposable; 22 import org.apache.avalon.framework.activity.Initializable; 23 import org.apache.avalon.framework.component.Component; 24 import org.apache.avalon.framework.component.ComponentException; 25 import org.apache.avalon.framework.component.ComponentManager; 26 import org.apache.avalon.framework.component.Composable; 27 import org.apache.avalon.framework.component.DefaultComponentManager; 28 import org.apache.avalon.framework.configuration.Configurable; 29 import org.apache.avalon.framework.configuration.Configuration; 30 import org.apache.avalon.framework.configuration.ConfigurationException; 31 import org.apache.avalon.framework.logger.AbstractLogEnabled; 32 import org.apache.james.services.MailServer; 33 34 import java.util.ArrayList ; 35 import java.util.Iterator ; 36 37 43 public class FetchScheduler 44 extends AbstractLogEnabled 45 implements Component, Composable, Configurable, Initializable, Disposable, FetchSchedulerMBean { 46 47 50 private Configuration conf; 51 52 55 private ComponentManager compMgr; 56 57 60 private TimeScheduler scheduler; 61 62 65 private volatile boolean enabled = false; 66 67 private ArrayList theFetchTaskNames = new ArrayList (); 68 69 72 public void compose(ComponentManager comp) throws ComponentException { 73 compMgr = comp; 74 } 75 76 79 public void configure(Configuration conf) throws ConfigurationException { 80 this.conf = conf; 81 } 82 83 86 public void initialize() throws Exception { 87 enabled = conf.getAttributeAsBoolean("enabled", false); 88 if (enabled) { 89 scheduler = (TimeScheduler) compMgr.lookup(TimeScheduler.ROLE); 90 Configuration[] fetchConfs = conf.getChildren("fetch"); 91 for (int i = 0; i < fetchConfs.length; i++) { 92 FetchPOP fp = new FetchPOP(); 93 Configuration fetchConf = fetchConfs[i]; 94 String fetchTaskName = fetchConf.getAttribute("name"); 95 fp.enableLogging(getLogger().getChildLogger(fetchTaskName)); 96 fp.compose(compMgr); 97 fp.configure(fetchConf); 98 Integer interval = new Integer (fetchConf.getChild("interval").getValue()); 99 PeriodicTimeTrigger fetchTrigger = new PeriodicTimeTrigger(0, interval.intValue()); 100 scheduler.addTrigger(fetchTaskName, fetchTrigger, fp); 101 theFetchTaskNames.add(fetchTaskName); 102 } 103 getLogger().info("Fetch POP Started"); 104 System.out.println("Fetch POP Started "); 105 } else { 106 getLogger().info("Fetch POP Disabled"); 107 System.out.println("Fetch POP Disabled"); 108 } 109 } 110 111 114 public void dispose() { 115 if (enabled) { 116 getLogger().info( "Fetch POP dispose..." ); 117 Iterator nameIterator = theFetchTaskNames.iterator(); 118 while (nameIterator.hasNext()) { 119 scheduler.removeTrigger((String )nameIterator.next()); 120 } 121 122 getLogger().info( "Fetch POP ...dispose end" ); 123 } 124 } 125 126 131 public final boolean isEnabled() { 132 return enabled; 133 } 134 135 } 136 | Popular Tags |