1 16 package org.mortbay.j2ee.session; 17 18 20 import java.util.Timer ; 21 import java.util.TimerTask ; 22 23 import javax.servlet.http.HttpServletRequest ; 24 25 import org.jfox.ioc.logger.Logger; 26 27 29 public abstract class 30 AbstractStore 31 implements Store 32 { 33 protected final static Logger _log=Logger.getLogger(AbstractStore.class); 34 35 37 40 protected int _scavengerPeriod=60*30; public int getScavengerPeriod() {return _scavengerPeriod;} 42 public void setScavengerPeriod(int secs) {_scavengerPeriod=secs;} 43 47 protected int _scavengerExtraTime=60*30; public int getScavengerExtraTime() {return _scavengerExtraTime;} 49 public void setScavengerExtraTime(int secs) {_scavengerExtraTime=secs;} 50 55 protected int _actualMaxInactiveInterval=60*60*24*28; public int getActualMaxInactiveInterval() {return _actualMaxInactiveInterval;} 57 public void setActualMaxInactiveInterval(int secs) {_actualMaxInactiveInterval=secs;} 58 59 public Object 60 clone() 61 { 62 try 63 { 64 AbstractStore as=(AbstractStore)(getClass().newInstance()); 65 as.setScavengerPeriod(_scavengerPeriod); 66 as.setScavengerExtraTime(_scavengerExtraTime); 67 as.setActualMaxInactiveInterval(_actualMaxInactiveInterval); 68 return as; 69 } 70 catch (Exception e) 71 { 72 _log.warn("could not clone Store", e); 73 return null; 74 } 75 } 76 77 protected Manager _manager; 78 public Manager getManager(){return _manager;} 79 public void setManager(Manager manager){_manager=manager;} 80 81 82 protected Timer _scavenger; 83 84 public void 86 start() 87 throws Exception 88 { 89 _log.trace("starting..."); 90 boolean isDaemon=true; 91 _scavenger=new Timer (isDaemon); 92 long delay=_scavengerPeriod+Math.round(Math.random()*_scavengerPeriod); 93 if (_log.isDebugEnabled()) _log.debug("starting distributed scavenger thread...(period: "+delay+" secs)"); 94 _scavenger.scheduleAtFixedRate(new Scavenger(), delay*1000, _scavengerPeriod*1000); 95 _log.debug("...distributed scavenger thread started"); 96 _log.trace("...started"); 97 } 98 99 public void 100 stop() 101 { 102 _log.trace("stopping..."); 103 _log.debug("stopping distributed scavenger thread..."); 104 _scavenger.cancel(); 105 _scavenger=null; 106 _log.debug("...distributed scavenger thread stopped"); 107 108 try 109 { 110 scavenge(); 111 } 112 catch (Exception e) 113 { 114 _log.warn("error scavenging distributed sessions", e); 115 } 116 117 _log.trace("...stopped"); 118 } 119 120 public void 121 destroy() 122 { 123 _log.trace("destroying..."); 124 _log.trace("...destroyed"); 125 } 126 127 class Scavenger 128 extends TimerTask 129 { 130 public void 131 run() 132 { 133 try 134 { 135 scavenge(); 136 } 137 catch (Throwable e) 138 { 139 _log.warn("could not scavenge distributed sessions", e); 140 } 141 } 142 } 143 144 146 public String 147 allocateId(HttpServletRequest request) 148 { 149 return getManager().getIdGenerator().nextId(request); 150 } 151 152 public void 153 deallocateId(String id) 154 { 155 } 157 158 160 } 175 | Popular Tags |