Public Member Functions | |
EagerCacheThread (ResultCache cache) | |
void | run () |
long | getThreadWakeUpTime () |
Package Attributes | |
int | refreshCacheRate = 60 |
int | refreshCacheTime = 60 / refreshCacheRate |
Definition at line 42 of file EagerCacheThread.java.
|
Creates a new
Definition at line 58 of file EagerCacheThread.java. 00059 { 00060 super("EagerCacheThread"); 00061 this.cache = cache; 00062 }
|
|
Returns the threadWakeUpTime value.
Definition at line 163 of file EagerCacheThread.java. 00164 {
00165 return threadWakeUpTime;
00166 }
|
|
Definition at line 67 of file EagerCacheThread.java. References org.objectweb.cjdbc.controller.cache.result.entries.ResultCacheEntryEager.getDeadline(), org.objectweb.cjdbc.controller.cache.result.ResultCache.getEagerCache(), org.objectweb.cjdbc.controller.cache.result.entries.ResultCacheEntry.getRequest(), org.objectweb.cjdbc.common.sql.AbstractRequest.getSQL(), and org.objectweb.cjdbc.controller.cache.result.ResultCache.removeFromCache(). 00068 { 00069 ResultCacheEntryEager entry; 00070 long now; 00071 long sleep; 00072 // Keep trace of relaxed cache entries to delete 00073 ArrayList toRemoveFromEagerCache = new ArrayList(); 00074 while (!isKilled) 00075 { 00076 synchronized (this) 00077 { 00078 try 00079 { 00080 threadWakeUpTime = 0; 00081 if (cache.getEagerCache().isEmpty()) 00082 { // Nothing in the cache, just sleep! 00083 if (logger.isDebugEnabled()) 00084 logger.debug(Translate.get("cachethread.cache.empty.sleeping")); 00085 wait(); 00086 } 00087 else 00088 { // Look for first deadline 00089 now = System.currentTimeMillis(); 00090 for (Iterator iter = cache.getEagerCache().iterator(); iter 00091 .hasNext();) 00092 { 00093 entry = (ResultCacheEntryEager) iter.next(); 00094 if (entry.getDeadline() < now) 00095 { // Deadline has expired, remove entry 00096 toRemoveFromEagerCache.add(entry); 00097 continue; 00098 } 00099 00100 // Recompute next wakeup time 00101 if ((threadWakeUpTime == 0) 00102 || (entry.getDeadline() < threadWakeUpTime)) 00103 threadWakeUpTime = entry.getDeadline(); 00104 } 00105 00106 // Clean up all the entries from the eager cache 00107 int size = toRemoveFromEagerCache.size(); 00108 for (int i = 0; i < size; i++) 00109 { 00110 entry = (ResultCacheEntryEager) toRemoveFromEagerCache.get(i); 00111 if (logger.isDebugEnabled()) 00112 logger.debug(Translate.get( 00113 "cachethread.remove.entry.from.cache", entry.getRequest() 00114 .getSQL())); 00115 try 00116 { 00117 cache.removeFromCache(entry.getRequest()); 00118 } 00119 catch (Exception e) 00120 { 00121 logger.warn("cachethread.remove.entry.error", e); 00122 } 00123 try 00124 { 00125 cache.getEagerCache().remove(entry); 00126 } 00127 catch (Exception e) 00128 { 00129 logger.warn("cachethread.remove.entry.error", e); 00130 } 00131 } 00132 toRemoveFromEagerCache.clear(); 00133 if (threadWakeUpTime == 0) 00134 { // All entries were not kept in the cache, therefore 00135 // there is no next deadline. (and no cache entry to wait for) 00136 continue; 00137 } 00138 else 00139 { // Sleep until the next deadline 00140 sleep = (threadWakeUpTime - now) / 1000 + refreshCacheTime; 00141 if (logger.isDebugEnabled()) 00142 { 00143 logger.debug(Translate.get("cachethread.sleeping", sleep)); 00144 } 00145 sleep = (sleep) * 1000; 00146 wait(sleep); 00147 } 00148 } 00149 } 00150 catch (Exception e) 00151 { 00152 logger.warn(e.getMessage(), e); 00153 } 00154 } 00155 } 00156 }
|