01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.jetspeed.components.interceptors;
18:
19: import org.aopalliance.intercept.MethodInvocation;
20: import org.apache.jetspeed.cache.general.GeneralCache;
21:
22: /**
23: * <p>
24: * CacheInterceptor
25: * </p>
26: * <p>
27: * AoP Interceptor that can be used for generalized caching. The only requirement is
28: * that intercepted methods must receive at least one (1) arguments.
29: * <br /> <br />
30: * CacheInterceptor ALWAYS use the first argument in the method to build the unique cache key.
31: * </p>
32: *
33: * @author <a href="mailto:weaver@apache.org">Scott T. Weaver </a>
34: * @version $Id: CachingInterceptor.java 516448 2007-03-09 16:25:47Z ate $
35: *
36: */
37: public class CachingInterceptor extends AbstractCacheInterceptor {
38:
39: /**
40: * @param cache
41: */
42: public CachingInterceptor(GeneralCache cache) {
43: super (cache);
44: }
45:
46: /**
47: * <p>
48: * doCacheOperation
49: * </p>
50: *
51: * @param mi
52: * @param uniqueKey
53: * @return
54: * @throws Throwable
55: */
56: protected Object doCacheOperation(MethodInvocation mi,
57: String uniqueKey) throws Throwable {
58: if (cache.contains(uniqueKey)) {
59: return cache.get(uniqueKey);
60: } else {
61: Object value = mi.proceed();
62: if (value != null) {
63: cache.put(uniqueKey, value);
64: }
65:
66: return value;
67: }
68: }
69: }
|