Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

org.objectweb.cjdbc.controller.cache.result.threads.EagerCacheThread Class Reference

Collaboration diagram for org.objectweb.cjdbc.controller.cache.result.threads.EagerCacheThread:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 EagerCacheThread (ResultCache cache)
void run ()
long getThreadWakeUpTime ()

Package Attributes

int refreshCacheRate = 60
int refreshCacheTime = 60 / refreshCacheRate

Detailed Description

This thread manages eager cache entries and remove them from the cache if they have expired.

Author:
Nicolas Modrzyk
Version:
1.0

Definition at line 42 of file EagerCacheThread.java.


Constructor & Destructor Documentation

org.objectweb.cjdbc.controller.cache.result.threads.EagerCacheThread.EagerCacheThread ResultCache  cache  ) 
 

Creates a new EagerCacheThread object

Parameters:
cache ResultCache creating this thread

Definition at line 58 of file EagerCacheThread.java.

00059   {
00060     super("EagerCacheThread");
00061     this.cache = cache;
00062   }


Member Function Documentation

long org.objectweb.cjdbc.controller.cache.result.threads.EagerCacheThread.getThreadWakeUpTime  ) 
 

Returns the threadWakeUpTime value.

Returns:
Returns the threadWakeUpTime.

Definition at line 163 of file EagerCacheThread.java.

00164   {
00165     return threadWakeUpTime;
00166   }

void org.objectweb.cjdbc.controller.cache.result.threads.EagerCacheThread.run  ) 
 

See also:
java.lang.Runnable#run()

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   }


The documentation for this class was generated from the following file:
Generated on Mon Apr 11 22:03:37 2005 for C-JDBC by  doxygen 1.3.9.1