jakarta-jcs-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Umut Dogan" <ad...@umutdogan.com>
Subject JCS Element Event Handling Problem
Date Wed, 11 Feb 2009 13:33:24 GMT
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


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message