weaver      2004/10/29 06:51:41

  Added:       components/cm/src/java/org/apache/jetspeed/components/interceptors
                        CachingInterceptor.java
                        AbstractCacheInterceptor.java
                        RemoveFromCacheInterceptor.java
  Log:
  Start of a simple caching api
  
  Revision  Changes    Path
  1.1                  
jakarta-jetspeed-2/components/cm/src/java/org/apache/jetspeed/components/interceptors/CachingInterceptor.java
  
  Index: CachingInterceptor.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.jetspeed.components.interceptors;
  
  import org.aopalliance.intercept.MethodInvocation;
  import org.apache.jetspeed.cache.general.GeneralCache;
  
  /**
   * <p>
   * CacheInterceptor
   * </p>
   * <p>
   *  AoP Interceptor that can be used for generalized caching.  The only requirement 
is
   *  that intercepted methods must receive at least one (1) arguments.
   *  <br /> <br />  
   *  CacheInterceptor ALWAYS use the first argument in the method to build the unique 
cache key. 
   * </p>
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver </a>
   * @version $Id: CachingInterceptor.java,v 1.1 2004/10/29 13:51:41 weaver Exp $
   *  
   */
  public class CachingInterceptor extends AbstractCacheInterceptor
  {
  
     
      
      /**
       * @param cache
       */
      public CachingInterceptor( GeneralCache cache )
      {
          super(cache);
      }
  
      /**
       * <p>
       * doCacheOperation
       * </p>
       *
       * @param mi
       * @param uniqueKey
       * @return
       * @throws Throwable
       */
      protected Object doCacheOperation( MethodInvocation mi, String uniqueKey ) 
throws Throwable
      {
          if(cache.contains(uniqueKey))
          {
              return cache.get(uniqueKey);
          }
          else
          {
              Object value = mi.proceed();
              if(value != null)
              {
                  cache.put(uniqueKey, value);
              }
              
              return value;
          }
      }
  }
  
  
  1.1                  
jakarta-jetspeed-2/components/cm/src/java/org/apache/jetspeed/components/interceptors/AbstractCacheInterceptor.java
  
  Index: AbstractCacheInterceptor.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.jetspeed.components.interceptors;
  
  import java.lang.reflect.Method;
  
  import org.aopalliance.aop.Advice;
  import org.aopalliance.intercept.Interceptor;
  import org.aopalliance.intercept.MethodInterceptor;
  import org.aopalliance.intercept.MethodInvocation;
  import org.apache.jetspeed.cache.general.GeneralCache;
  
  /**
   * <p>
   * AbstractCacheInterceptor
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
   * @version $Id: AbstractCacheInterceptor.java,v 1.1 2004/10/29 13:51:41 weaver Exp $
   *
   */
  public abstract class AbstractCacheInterceptor implements Interceptor, 
MethodInterceptor, Advice
  {
  
      protected GeneralCache cache;
      protected String uniquePrefix;
      
      /**
       *  
       */
      public AbstractCacheInterceptor( GeneralCache cache, String uniquePrefix )
      {
          super();
          this.cache = cache;
          this.uniquePrefix = uniquePrefix;
      }
      
      /**
       * 
       * @param cache
       */
      public AbstractCacheInterceptor( GeneralCache cache )
      {
          this(cache, null);
      }
  
  
      /**
       * 
       * <p>
       * buildKey
       * </p>
       *
       * @param clazz
       * @param method
       * @param arg0
       * @return
       */
      public static final String buildKey( String uniquePrefix, String arg0 )
      {
          return uniquePrefix + ":" + arg0 ;
      }
          
  
      /**
       * 
       * <p>
       * invoke
       * </p>
       *
       * @see 
org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
       * @param mi
       * @return
       * @throws Throwable
       */
      public Object invoke( MethodInvocation mi ) throws Throwable
      {
          Object[] args = mi.getArguments();
          Method method = mi.getMethod();
          if (args == null)
          {
              throw new IllegalArgumentException(method.getDeclaringClass() + "." + 
method.getName()
                      + "() receives no arguments.  "
                      + "CacheInterceptor can only intercept methods that have at 
least (1) argument.");
          }        
          
          Object arg0 = args[0];
          if(arg0 == null)
          {
              throw new IllegalArgumentException("CacheInterceptor requires that the 
first argument passed to a cached be non-null");
          }
          
          String prefix = null;
          if(uniquePrefix != null)
          {
              prefix = buildKey(uniquePrefix, arg0.toString());
          }
          else
          {
              prefix = buildKey(mi.getMethod().getDeclaringClass().getName(), 
arg0.toString()); 
          }
          
          return doCacheOperation(mi, prefix);       
      }
      
      protected abstract Object doCacheOperation( MethodInvocation mi, String 
uniqueKey ) throws Throwable;
  
  }
  
  
  
  1.1                  
jakarta-jetspeed-2/components/cm/src/java/org/apache/jetspeed/components/interceptors/RemoveFromCacheInterceptor.java
  
  Index: RemoveFromCacheInterceptor.java
  ===================================================================
  /*
   * Copyright 2000-2001,2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.jetspeed.components.interceptors;
  
  import org.aopalliance.intercept.MethodInvocation;
  import org.apache.jetspeed.cache.general.GeneralCache;
  
  /**
   * <p>
   * RemoveFromCacheInterceptor
   * </p>
   * <p>
   *
   * </p>
   * @author <a href="mailto:[EMAIL PROTECTED]">Scott T. Weaver</a>
   * @version $Id: RemoveFromCacheInterceptor.java,v 1.1 2004/10/29 13:51:41 weaver 
Exp $
   *
   */
  public class RemoveFromCacheInterceptor extends AbstractCacheInterceptor
  {
  
      /**
       * @param cache
       */
      public RemoveFromCacheInterceptor( GeneralCache cache )
      {
          super(cache);
      }
      
      /**
       * 
       * <p>
       * doCacheOperation
       * </p>
       *
       * @see 
org.apache.jetspeed.components.interceptors.AbstractCacheInterceptor#doCacheOperation(org.aopalliance.intercept.MethodInvocation,
 java.lang.String)
       * @param mi
       * @param uniqueKey
       * @return
       * @throws Throwable
       */
      protected Object doCacheOperation( MethodInvocation mi, String uniqueKey ) 
throws Throwable
      {
          cache.remove(uniqueKey);
          return mi.proceed();
      }
  }
  
  
  

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

Reply via email to