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]