Ard Schrijvers suggested changing use of "jcs" below to "cache" because he 
thought "jcs" just had default configuration.  This is wrong.  I stepped 
through the code and saw that when the elements were being put in the cache 
they were put in with an idle time of 5 seconds as I setup in the 
setupProperties() method, not with a default value of idle time.  Anyway, the 
"cache" object doesn't have get() and put() methods so it can't be used 
directly for storing information in JCS.  I access the "cache" object directly 
only to be able to retrieve the element attributes associated with the cache 
(getElementAttributes) and the count of expired items (getMissCountExpired).

It looks to me like there is a bug in JCS as I originally thought.  Stepping in 
the code, when it tries to get the item from the cache (in 
LRUMemoryCache.get()) it sets the last access time to now which messes up the 
later checking of how long the item has been idle.  I think the code that is 
getting the item from the cache should call LRUMemoryCache.getQuiet() instead 
of LRUMemoryCache.get().  That code is in CompositeCache.get().  I'm not sure 
what other effects calling LRUMemoryCache.getQuiet() instead of 
LRUMemoryCache.get() will have though.



 


-----Original Message-----

From: Ard Schrijvers [mailto:[EMAIL PROTECTED] 
To: jcs-users@jakarta.apache.org

Subject: RE: Possible bug in JCS with IdleTime element attribute


 


 


> 


> I think I may have found a bug in JCS with regards
to the


> IdleTime element attribute.  Either that


> or I don't understand how this setting works.


 


I thin you have a bug in your test...


 


> 


> import junit.framework.TestCase;


> 


> public class TestMissCountExpiredBug extends
TestCase


> {


>   public void
testSomething()


>     throws
Exception


>   {


>     // setup
JCS


>    
CompositeCacheManager mgr = 


> CompositeCacheManager.getUnconfiguredInstance();


>    
mgr.configure( setupProperties() );


>     


>     // get access to bug test cache region


>     JCS jcs =
JCS.getInstance( "BugTest" );


>    
CompositeCache cache = mgr.getCache( "BugTest" );


 


now, cache is the cache you get from your configured
CompositeCacheManager. I think, your jcs has just default configuration,
because I do not see where it is configured..?


 


If you replace jcs below, with cache, you probably will
see, everything works just fine,


 


Regards Ard


 


>        


>     // put
five items in cache


>     for ( int
i = 0; i < 5; i++ )


>     {


>       String
key = "key" + i;


>       String
value = "value" + i;


>       jcs.put(
key, value );


>     }


>     


>     // sleep
for twice the length of the max idle time of 


> items in the cache


>     // region


>    
IElementAttributes attrs = cache.getElementAttributes();


>     long
idleTimeSeconds = attrs.getIdleTime();


>    
assertEquals( 5L, idleTimeSeconds );


>    
System.out.println( "idle time seconds=" + idleTimeSeconds );


>     long
sleepTime = 1000 * 2 * idleTimeSeconds;


>    
System.out.println( "sleeping for " + sleepTime


>       + "
millis to allow cache elements to be flagged as 


> idle for too long" );


>    
Thread.sleep( sleepTime );


>     


>     // try to
access the five items - they should have 


> expired so this should


>     // fail


>     for ( int
i = 0; i < 5; i++ )


>     {


>       String
key = "key" + i;


>       Object
value = jcs.get( key );


>       if (
value != null )


>       {


>        
System.out.println( "found a value for key " + key + 


> ": " + value );


>       }


>     }


>     


>     // check
miss count expired - should be five


>     int
missCountExpired = cache.getMissCountExpired();


>    
System.out.println( "miss count expired: " + missCountExpired
);


>    
assertEquals( 5, missCountExpired );


>   }


>   


>   private
Properties setupProperties()


>   {


>     Properties
answer = new Properties();


>     


>     //
defaults


>    
answer.setProperty( "jcs.default", "" );


>     answer.setProperty(
"jcs.default.cacheattributes", 


>
"org.apache.jcs.engine.CompositeCacheAttributes" );


>    
answer.setProperty( 


>
"jcs.default.cacheattributes.MemoryCacheName", 


>
"org.apache.jcs.engine.memory.lru.LRUMemoryCache" );


>    
answer.setProperty( 


> "jcs.default.cacheattributes.MaxObjects",
"100000" );


> 


>     // bug
test region - elements won't go to disk, but 


> should be marked as expired after five seconds of
non-use


>    
answer.setProperty( "jcs.region.BugTest", "" );


>    
answer.setProperty( "jcs.region.BugTest.cacheattributes", 


>
"org.apache.jcs.engine.CompositeCacheAttributes" );


>    
answer.setProperty( 


>
"jcs.region.BugTest.cacheattributes.MemoryCacheName", 


>
"org.apache.jcs.engine.memory.lru.LRUMemoryCache" );


>    
answer.setProperty( 


>
"jcs.region.BugTest.cacheattributes.MaxObjects", "1000" );


>    
answer.setProperty( 


>
"jcs.region.BugTest.cacheattributes.UseMemoryShrinker",
"false" );


>    
answer.setProperty( 


> "jcs.region.BugTest.elementattributes", 


> "org.apache.jcs.engine.ElementAttributes"
);


>    
answer.setProperty( 


>
"jcs.region.BugTest.elementattributes.IsEternal", "false"
);


>    
answer.setProperty( 


>
"jcs.region.BugTest.elementattributes.IdleTime", "5" );


>     


>     return
answer;


>   }


> }


> 


> 


> 


> 


> 


> 


>  


>
______________________________________________________________


> ______________________


> Now that's room service!  Choose from over 150,000 hotels


> in 45,000 destinations on Yahoo! Travel to find your
fit.


> http://farechase.yahoo.com/promo-generic-14795097


> 


>
---------------------------------------------------------------------


> To unsubscribe, e-mail:
[EMAIL PROTECTED]


> For additional commands, e-mail:
[EMAIL PROTECTED]


> 


> 


 


---------------------------------------------------------------------


To unsubscribe, e-mail:
[EMAIL PROTECTED]


For additional commands, e-mail:
[EMAIL PROTECTED]







 
____________________________________________________________________________________
Do you Yahoo!?
Everyone is raving about the all-new Yahoo! Mail beta.
http://new.mail.yahoo.com

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

Reply via email to