You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-users@jakarta.apache.org by Umut Dogan <ad...@umutdogan.com> on 2009/02/11 14:33:24 UTC
JCS Element Event Handling Problem
Hi,
I created a class as mentioned
http://jakarta.apache.org/jcs/ElementEventHandling.html page:
package com.mytest;
import java.util.EventObject;
import org.apache.jcs.engine.CacheElement;
import org.apache.jcs.engine.control.event.behavior.IElementEvent;
import org.apache.jcs.engine.control.event.behavior.IElementEventConstants;
import org.apache.jcs.engine.control.event.behavior.IElementEventHandler;
import org.apache.log4j.Logger;
public class CacheEventHandler implements IElementEventHandler {
public static final Logger _logger =
Logger.getLogger(CacheEventHandler.class);
private static final String sessionCacheRegionName = "session";
/**
* Listens to cache events and accordingly logs out sessions or clears
folders.
*/
public void handleElementEvent(IElementEvent event)
{
if (_logger.isDebugEnabled())
{
_logger.debug("Handle cache element event: " +
event.getElementEvent());
}
switch(event.getElementEvent())
{
case
IElementEventConstants.ELEMENT_EVENT_EXCEEDED_IDLETIME_BACKGROUND:
case
IElementEventConstants.ELEMENT_EVENT_EXCEEDED_IDLETIME_ONREQUEST:
case
IElementEventConstants.ELEMENT_EVENT_EXCEEDED_MAXLIFE_ONREQUEST:
case
IElementEventConstants.ELEMENT_EVENT_EXCEEDED_MAXLIFE_BACKGROUND:
CacheElement element =
(CacheElement)((EventObject)event).getSource();
if (sessionCacheRegionName.equals(element.getCacheName()))
{
// private codes
}
break;
}
}
}
Then tried to call this class from my CacheManager class. I tried both
approaches you mentioned in the above document like these lines:
private static final String sessionCacheRegionName = "session";
private static JCS sessionCache = null;
// initialize session cache
if(sessionCache == null)
{
try
{
sessionCache = JCS.getInstance(sessionCacheRegionName);
// this should add the event handler to all items as
// they are created.
IElementAttributes attributes =
sessionCache.getDefaultElementAttributes();
attributes.addElementEventHandler(new CacheEventHandler());
sessionCache.setDefaultElementAttributes(attributes);
}
catch (CacheException e)
{
_logger.error( "Problem initializing cache for region name
["
+ sessionCacheRegionName + "].", e );
}
}
Or in the putSession method:
public void putSession(String userId, String session)
{
try
{
CacheEventHandler ceh = new CacheEventHandler();
IElementAttributes attributes =
sessionCache.getDefaultElementAttributes();
attributes.addElementEventHandler(ceh);
sessionCache.put(userId, session, attributes);
}
catch (CacheException e)
{
_logger.error( "Problem initializing cache for region name ["
+ sessionCacheRegionName + "].", e );
}
}
Cache.ccf file is like this:
# DEFAULT CACHE REGION
jcs.default=DC
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru
.LRUMemoryCache
jcs.default.cacheattributes.UseMemoryShrinker=false
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.MaxLifeSeconds=60
jcs.default.elementattributes.IdleTime=1800
jcs.default.elementattributes.IsSpool=true
jcs.default.elementattributes.IsRemote=true
jcs.default.elementattributes.IsLateral=true
# PRE-DEFINED CACHE REGIONS - sessionCache
jcs.region.sessionCache=DC
jcs.region.sessionCache.cacheattributes=
org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.sessionCache.cacheattributes.MaxObjects=1000
jcs.region.sessionCache.cacheattributes.MemoryCacheName=
org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.sessionCache.cacheattributes.UseMemoryShrinker=true
jcs.region.sessionCache.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.sessionCache.cacheattributes.ShrinkerIntervalSeconds=20
jcs.region.sessionCache.cacheattributes.MaxSpoolPerRun=500
jcs.region.sessionCache.cacheattributes.MaxLifeSeconds=3600
jcs.region.sessionCache.elementattributes=org.apache.jcs.engine.ElementAttri
butes
jcs.region.sessionCache.elementattributes.IsEternal=false
# AVAILABLE AUXILIARY CACHES
jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFacto
ry
jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDis
kCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000
jcs.auxiliary.DC.attributes.MaxKeySize=1000000
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=5000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60
But it newer enters to the CacheEventHandler class' handleElementEvent
method when I debug, and it nevers calls the eventhandler to make the things
which I want.
Is this a bug, or am I doing something wrong?
Thanks,
Umut
Re: JCS Element Event Handling Problem
Posted by ramirof <ra...@yahoo.com.ar>.
Hi Umut Dogan!
I'm experiencing the same issue you described in this post, and I can't
solve it. Did you find out which was the problem?
Or anyone knows how..
Thanks in advance!
Ramiro
Umut Dogan wrote:
>
> Hi,
>
>
>
> I created a class as mentioned
> http://jakarta.apache.org/jcs/ElementEventHandling.html page:
>
>
>
> package com.mytest;
>
>
>
> import java.util.EventObject;
>
>
>
> import org.apache.jcs.engine.CacheElement;
>
> import org.apache.jcs.engine.control.event.behavior.IElementEvent;
>
> import
> org.apache.jcs.engine.control.event.behavior.IElementEventConstants;
>
> import org.apache.jcs.engine.control.event.behavior.IElementEventHandler;
>
> import org.apache.log4j.Logger;
>
>
>
> public class CacheEventHandler implements IElementEventHandler {
>
>
>
> public static final Logger _logger =
> Logger.getLogger(CacheEventHandler.class);
>
>
>
> private static final String sessionCacheRegionName = "session";
>
>
>
> /**
>
> * Listens to cache events and accordingly logs out sessions or
> clears
> folders.
>
> */
>
> public void handleElementEvent(IElementEvent event)
>
> {
>
>
>
> if (_logger.isDebugEnabled())
>
> {
>
> _logger.debug("Handle cache element event: " +
> event.getElementEvent());
>
> }
>
> switch(event.getElementEvent())
>
> {
>
> case
> IElementEventConstants.ELEMENT_EVENT_EXCEEDED_IDLETIME_BACKGROUND:
>
> case
> IElementEventConstants.ELEMENT_EVENT_EXCEEDED_IDLETIME_ONREQUEST:
>
> case
> IElementEventConstants.ELEMENT_EVENT_EXCEEDED_MAXLIFE_ONREQUEST:
>
> case
> IElementEventConstants.ELEMENT_EVENT_EXCEEDED_MAXLIFE_BACKGROUND:
>
> CacheElement element =
> (CacheElement)((EventObject)event).getSource();
>
> if (sessionCacheRegionName.equals(element.getCacheName()))
>
> {
>
> // private codes
>
> }
>
> break;
>
> }
>
>
>
> }
>
>
>
> }
>
>
>
> Then tried to call this class from my CacheManager class. I tried both
> approaches you mentioned in the above document like these lines:
>
>
>
> private static final String sessionCacheRegionName = "session";
>
> private static JCS sessionCache = null;
>
>
>
> // initialize session cache
>
> if(sessionCache == null)
>
> {
>
> try
>
> {
>
> sessionCache = JCS.getInstance(sessionCacheRegionName);
>
>
>
> // this should add the event handler to all items as
>
> // they are created.
>
> IElementAttributes attributes =
> sessionCache.getDefaultElementAttributes();
>
> attributes.addElementEventHandler(new CacheEventHandler());
>
> sessionCache.setDefaultElementAttributes(attributes);
>
> }
>
> catch (CacheException e)
>
> {
>
> _logger.error( "Problem initializing cache for region name
> ["
>
> + sessionCacheRegionName + "].", e );
>
> }
>
>
>
> }
>
>
>
> Or in the putSession method:
>
>
>
> public void putSession(String userId, String session)
>
> {
>
> try
>
> {
>
> CacheEventHandler ceh = new CacheEventHandler();
>
> IElementAttributes attributes =
> sessionCache.getDefaultElementAttributes();
>
> attributes.addElementEventHandler(ceh);
>
> sessionCache.put(userId, session, attributes);
>
> }
>
> catch (CacheException e)
>
> {
>
> _logger.error( "Problem initializing cache for region name ["
>
> + sessionCacheRegionName + "].", e );
>
> }
>
> }
>
>
>
> Cache.ccf file is like this:
>
>
>
> # DEFAULT CACHE REGION
>
> jcs.default=DC
>
> jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
>
> jcs.default.cacheattributes.MaxObjects=1000
>
> jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru
> .LRUMemoryCache
>
> jcs.default.cacheattributes.UseMemoryShrinker=false
>
> jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
>
> jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
>
> jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
>
> jcs.default.elementattributes.IsEternal=false
>
> jcs.default.elementattributes.MaxLifeSeconds=60
>
> jcs.default.elementattributes.IdleTime=1800
>
> jcs.default.elementattributes.IsSpool=true
>
> jcs.default.elementattributes.IsRemote=true
>
> jcs.default.elementattributes.IsLateral=true
>
>
>
> # PRE-DEFINED CACHE REGIONS - sessionCache
>
> jcs.region.sessionCache=DC
>
> jcs.region.sessionCache.cacheattributes=
> org.apache.jcs.engine.CompositeCacheAttributes
>
> jcs.region.sessionCache.cacheattributes.MaxObjects=1000
>
> jcs.region.sessionCache.cacheattributes.MemoryCacheName=
> org.apache.jcs.engine.memory.lru.LRUMemoryCache
>
> jcs.region.sessionCache.cacheattributes.UseMemoryShrinker=true
>
> jcs.region.sessionCache.cacheattributes.MaxMemoryIdleTimeSeconds=3600
>
> jcs.region.sessionCache.cacheattributes.ShrinkerIntervalSeconds=20
>
> jcs.region.sessionCache.cacheattributes.MaxSpoolPerRun=500
>
> jcs.region.sessionCache.cacheattributes.MaxLifeSeconds=3600
>
> jcs.region.sessionCache.elementattributes=org.apache.jcs.engine.ElementAttri
> butes
>
> jcs.region.sessionCache.elementattributes.IsEternal=false
>
>
>
> # AVAILABLE AUXILIARY CACHES
>
> jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFacto
> ry
>
> jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDis
> kCacheAttributes
>
> jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
>
> jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000
>
> jcs.auxiliary.DC.attributes.MaxKeySize=1000000
>
> jcs.auxiliary.DC.attributes.MaxRecycleBinSize=5000
>
> jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
>
> jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60
>
>
>
>
>
> But it newer enters to the CacheEventHandler class' handleElementEvent
> method when I debug, and it nevers calls the eventhandler to make the
> things
> which I want.
>
>
>
> Is this a bug, or am I doing something wrong?
>
>
>
> Thanks,
>
> Umut
>
>
>
--
View this message in context: http://old.nabble.com/JCS-Element-Event-Handling-Problem-tp21954783p30078417.html
Sent from the JCS - Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-users-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-users-help@jakarta.apache.org