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]>