You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by un...@apache.org on 2004/03/08 23:44:51 UTC

cvs commit: cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/store EHStore.java

unico       2004/03/08 14:44:51

  Modified:    src/blocks/scratchpad/java/org/apache/cocoon/components/store
                        EHStore.java
  Log:
  - implement more lifecycle stages
  - add debug logging
  - addTODO message
  
  Revision  Changes    Path
  1.2       +41 -5     cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/store/EHStore.java
  
  Index: EHStore.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/store/EHStore.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- EHStore.java	8 Mar 2004 21:36:26 -0000	1.1
  +++ EHStore.java	8 Mar 2004 22:44:51 -0000	1.2
  @@ -25,55 +25,85 @@
   import net.sf.ehcache.CacheManager;
   import net.sf.ehcache.Element;
   
  +import org.apache.avalon.framework.activity.Disposable;
  +import org.apache.avalon.framework.activity.Initializable;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.parameters.ParameterException;
   import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
  +import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.excalibur.store.Store;
   
   /**
    * Store implementation based on EHCache.
    * (http://ehcache.sourceforge.net/)
  + * 
  + * TODO: CacheManager expects to be a singleton. So configuring
  + * multiple EHStore intances could lead to errors.
    */
  -public class EHStore extends AbstractLogEnabled implements Store, Parameterizable {
  +public class EHStore extends AbstractLogEnabled 
  +implements Store, Parameterizable, Initializable, Disposable, ThreadSafe {
       
       private Cache m_cache;
       private CacheManager m_cacheManager;
       
       private String m_cacheName;
       private int m_maximumSize;
  +    private boolean m_overflowToDisk;
       
       public EHStore() {
       }
       
       public void parameterize(Parameters parameters) throws ParameterException {
           m_cacheName = parameters.getParameter("cache-name","main");
  -        m_maximumSize = parameters.getParameterAsInteger("max-objects",100);
  +        m_maximumSize = parameters.getParameterAsInteger("maxobjects",100);
  +        m_overflowToDisk = parameters.getParameterAsBoolean("overflow-to-disk",true);
       }
       
       public void initialize() throws Exception {
           m_cacheManager = CacheManager.create();
  -        m_cache = new Cache(m_cacheName,m_maximumSize,true,false,0,0);
  +        m_cache = new Cache(m_cacheName,m_maximumSize,m_overflowToDisk,true,0,0);
           m_cacheManager.addCache(m_cache);
       }
       
  +    public void dispose() {
  +        m_cacheManager.shutdown();
  +        m_cacheManager = null;
  +        m_cache = null;
  +    }
  +    
       /* (non-Javadoc)
        * @see org.apache.excalibur.store.Store#free()
        */
       public Object get(Object key) {
  +        Object value = null;
           try {
  -            return m_cache.get((Serializable) key);
  +            final Element element = m_cache.get((Serializable) key);
  +            if (element != null) {
  +                value = element.getValue();
  +            }
           }
           catch (CacheException e) {
               getLogger().error("Failure retrieving object from store", e);
           }
  -        return null;
  +        if (getLogger().isDebugEnabled()) {
  +            if (value != null) {
  +                getLogger().debug("Found key: " + key);
  +            } 
  +            else {
  +                getLogger().debug("NOT Found key: " + key);
  +            }
  +        }
  +        return value;
       }
   
       /* (non-Javadoc)
        * @see org.apache.excalibur.store.Store#free()
        */
       public void store(Object key, Object value) throws IOException {
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("Store object " + value + " with key "+ key);
  +        }
           final Element element = new Element((Serializable) key, (Serializable) value);
           m_cache.put(element);
       }
  @@ -88,6 +118,9 @@
        * @see org.apache.excalibur.store.Store#remove(java.lang.Object)
        */
       public void remove(Object key) {
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("Removing item " + key);
  +        }
           m_cache.remove((Serializable) key);
       }
   
  @@ -95,6 +128,9 @@
        * @see org.apache.excalibur.store.Store#clear()
        */
       public void clear() {
  +        if (getLogger().isDebugEnabled()) {
  +            getLogger().debug("Clearing the store");
  +        }
           try {
               m_cache.removeAll();
           }