asmuts      02/05/09 12:11:51

  Modified:    src/java/org/apache/jcs/engine/memory/shrinking
                        ShrinkerThread.java
  Log:
  Adding an intial idea of how to handle simple events.
  
  Two models:
  
  1.  register handlers with the element and have the handler decide which events to 
act on.
  
  2.  register handlers for only those events that it wants to act on in the first 
place.
  
  The second makes handling multiple events a bit cumbersome.
  
  Revision  Changes    Path
  1.3       +60 -18    
jakarta-turbine-jcs/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java
  
  Index: ShrinkerThread.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ShrinkerThread.java       8 Apr 2002 22:58:16 -0000       1.2
  +++ ShrinkerThread.java       9 May 2002 19:11:51 -0000       1.3
  @@ -53,20 +53,27 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    */
  -
   import java.util.Map;
  +import java.util.ArrayList;
  +import java.util.Iterator;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.apache.jcs.engine.memory.MemoryCache;
   import org.apache.jcs.engine.memory.MemoryElementDescriptor;
   
  +import org.apache.jcs.engine.control.event.ElementEvent;
  +import org.apache.jcs.engine.control.event.behavior.IElementEventHandler;
  +import org.apache.jcs.engine.control.event.behavior.IElementEvent;
  +import org.apache.jcs.engine.control.event.behavior.IElementEventConstants;
  +
  +
   /**
  - * A background memory shrinker. Just started. <u>DON'T USE</u>
  + *  A background memory shrinker. Just started. <u>DON'T USE</u>
    *
  - * @author <a href="mailto:[EMAIL PROTECTED]";>Aaron Smuts</a>
  - * @created February 18, 2002
  - * @version $Id:
  + *@author     <a href="mailto:[EMAIL PROTECTED]";>Aaron Smuts</a>
  + *@created    February 18, 2002
  + *@version    $Id:
    */
   public class ShrinkerThread extends Thread
   {
  @@ -78,9 +85,9 @@
           LogFactory.getLog( ShrinkerThread.class );
   
       /**
  -     * Constructor for the ShrinkerThread object. Should take an IMemoryCache
  +     *  Constructor for the ShrinkerThread object. Should take an IMemoryCache
        *
  -     * @param cache
  +     *@param  cache
        */
       public ShrinkerThread( MemoryCache cache )
       {
  @@ -89,7 +96,7 @@
       }
   
       /**
  -     * Description of the Method
  +     *  Description of the Method
        */
       public void kill()
       {
  @@ -97,7 +104,7 @@
       }
   
       /**
  -     * Main processing method for the ShrinkerThread object
  +     *  Main processing method for the ShrinkerThread object
        */
       public void run()
       {
  @@ -110,7 +117,7 @@
               try
               {
                   this.sleep( cache.getCacheAttributes()
  -                            .getShrinkerIntervalSeconds() * 1000 );
  +                    .getShrinkerIntervalSeconds() * 1000 );
               }
               catch ( InterruptedException ie )
               {
  @@ -121,7 +128,7 @@
       }
   
       /**
  -     * Constructor for the shrink object
  +     *  Constructor for the shrink object
        */
       protected void shrink()
       {
  @@ -168,21 +175,56 @@
                           {
                               log.info( "Exceeded maxLifeSeconds -- " + 
me.ce.getKey() );
                           }
  +
  +                        // handle event, might move to a new method
  +                        ArrayList eventHandlers = 
me.ce.getElementAttributes().getElementEventHandlers();
  +                        if ( log.isDebugEnabled() )
  +                        {
  +                            log.debug( "Handlers are registered.  Event -- 
ELEMENT_EVENT_EXCEEDED_MAXLIFE_BACKGROUND" );
  +                        }
  +                        if ( eventHandlers != null ) {
  +                          IElementEvent event = new ElementEvent(me.ce, 
IElementEventConstants.ELEMENT_EVENT_EXCEEDED_MAXLIFE_BACKGROUND);
  +                          Iterator hIt = eventHandlers.iterator();
  +                          while ( hIt.hasNext() ) {
  +                            IElementEventHandler hand = 
(IElementEventHandler)hIt.next();
  +                            hand.handleElementEvent(event);
  +                          }
  +                        }
  +
                           itr.remove();
  +                        // TODO: this needs to go through the remove chanel
  +                        // since an old copy could be on disk and we may want
  +                        // to clean up the other caches.
  +                        // probably need to call both
                           //cache.remove( me.ce.getKey() );
                       }
                       else
  -
                       // Exceeded maxIdleTime, removal
                           if ( ( me.ce.getElementAttributes().getIdleTime() != -1 ) 
&& ( now - me.ce.getElementAttributes().getLastAccessTime() ) > ( 
me.ce.getElementAttributes().getIdleTime() * 1000 ) )
  +                    {
  +                        if ( log.isInfoEnabled() )
                           {
  -                            if ( log.isInfoEnabled() )
  -                            {
  -                                log.info( "Exceeded maxIdleTime [ 
me.ce.getElementAttributes().getIdleTime() = " + 
me.ce.getElementAttributes().getIdleTime() + " ]-- " + me.ce.getKey() );
  -                            }
  -                            itr.remove();
  -                            //cache.remove( me.ce.getKey() );
  +                            log.info( "Exceeded maxIdleTime [ 
me.ce.getElementAttributes().getIdleTime() = " + 
me.ce.getElementAttributes().getIdleTime() + " ]-- " + me.ce.getKey() );
  +                        }
  +
  +                        // handle event, might move to a new method
  +                        ArrayList eventHandlers = 
me.ce.getElementAttributes().getElementEventHandlers();
  +                        if ( log.isDebugEnabled() )
  +                        {
  +                            log.debug( "Handlers are registered.  Event -- 
ELEMENT_EVENT_EXCEEDED_IDLETIME_BACKGROUND" );
  +                        }
  +                        if ( eventHandlers != null ) {
  +                          IElementEvent event = new ElementEvent(me.ce, 
IElementEventConstants.ELEMENT_EVENT_EXCEEDED_IDLETIME_BACKGROUND);
  +                          Iterator hIt = eventHandlers.iterator();
  +                          while ( hIt.hasNext() ) {
  +                            IElementEventHandler hand = 
(IElementEventHandler)hIt.next();
  +                            hand.handleElementEvent(event);
  +                          }
                           }
  +
  +                        itr.remove();
  +                        //cache.remove( me.ce.getKey() );
  +                    }
                   }
   
               }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to