View Javadoc

1   package org.apache.ojb.broker.cache;
2   
3   /* Copyright 2004-2005 The Apache Software Foundation
4    *
5    * Licensed under the Apache License, Version 2.0 (the "License");
6    * you may not use this file except in compliance with the License.
7    * You may obtain a copy of the License at
8    *
9    *     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  
18  import java.util.Properties;
19  
20  import org.apache.commons.lang.builder.ToStringBuilder;
21  import org.apache.commons.lang.builder.ToStringStyle;
22  import org.apache.jcs.JCS;
23  import org.apache.jcs.access.exception.CacheException;
24  import org.apache.jcs.access.exception.ObjectExistsException;
25  import org.apache.ojb.broker.Identity;
26  import org.apache.ojb.broker.PersistenceBroker;
27  
28  /**
29   * This local {@link ObjectCache} implementation using
30   * <a href="http://jakarta.apache.org/turbine/jcs/index.html">
31   * turbine-JCS</a> to cache objects is primarily for intern use in
32   * conjunction with {@link ObjectCacheJCSPerClassImpl} implementation. If
33   * used as main <code>ObjectCache</code> all cached objects will be cached
34   * under the same JCS region name (see {@link #DEFAULT_REGION}).
35   * <p/>
36   * <p/>
37   * Implementation configuration properties:
38   * </p>
39   * <p/>
40   * <table cellspacing="2" cellpadding="2" border="3" frame="box">
41   * <tr>
42   * <td><strong>Property Key</strong></td>
43   * <td><strong>Property Values</strong></td>
44   * </tr>
45   * <tr>
46   * <td> - </td>
47   * <td>
48   * -
49   * </td>
50   * </tr>
51   * </table>
52   *
53   * @author Matthew Baird (mattbaird@yahoo.com);
54   * @version $Id: ObjectCacheJCSImpl.java,v 1.1 2007-08-24 22:17:29 ewestfal Exp $
55   */
56  public class ObjectCacheJCSImpl implements ObjectCache
57  {
58      /**
59       * The used default region name.
60       */
61      public static final String DEFAULT_REGION = "ojbDefaultJCSRegion";
62  
63      private JCS jcsCache;
64      /**
65       * if no regionname is passed in, we use the default region.
66       */
67      private String regionName = DEFAULT_REGION;
68  
69      public ObjectCacheJCSImpl(PersistenceBroker broker, Properties prop)
70      {
71          this(null);
72      }
73  
74      /**
75       * Constructor used by the {@link ObjectCacheJCSPerClassImpl}
76       */
77      public ObjectCacheJCSImpl(String name)
78      {
79          regionName = (name != null ? name : DEFAULT_REGION);
80          try
81          {
82              jcsCache = JCS.getInstance(regionName);
83          }
84          catch(Exception e)
85          {
86              throw new RuntimeCacheException("Can't instantiate JCS ObjectCacheImplementation", e);
87          }
88      }
89  
90      public String getRegionName()
91      {
92          return regionName;
93      }
94  
95      /**
96       * makes object obj persistent to the Objectcache under the key oid.
97       */
98      public void cache(Identity oid, Object obj)
99      {
100         try
101         {
102             jcsCache.put(oid.toString(), obj);
103         }
104         catch (CacheException e)
105         {
106             throw new RuntimeCacheException(e);
107         }
108     }
109 
110     public boolean cacheIfNew(Identity oid, Object obj)
111     {
112         boolean result = false;
113         try
114         {
115             jcsCache.putSafe(oid.toString(), obj);
116             result = true;
117         }
118         catch(ObjectExistsException e)
119         {
120             // do nothing, object already in cache
121         }
122         catch(CacheException e)
123         {
124             throw new RuntimeCacheException(e);
125         }
126         return result;
127     }
128 
129     /**
130      * Lookup object with Identity oid in objectTable.
131      * returns null if no matching id is found
132      */
133     public Object lookup(Identity oid)
134     {
135         return jcsCache.get(oid.toString());
136     }
137 
138     /**
139      * removes an Object from the cache.
140      *
141      * @param oid the Identity of the object to be removed.
142      */
143     public void remove(Identity oid)
144     {
145         try
146         {
147             jcsCache.remove(oid.toString());
148         }
149         catch (CacheException e)
150         {
151             throw new RuntimeCacheException(e.getMessage());
152         }
153     }
154 
155     /**
156      * clear the ObjectCache.
157      */
158     public void clear()
159     {
160         if (jcsCache != null)
161         {
162             try
163             {
164                 jcsCache.remove();
165             }
166             catch (CacheException e)
167             {
168                 throw new RuntimeCacheException(e);
169             }
170         }
171     }
172 
173     public String toString()
174     {
175         ToStringBuilder buf = new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE);
176         buf.append("JCS region name", regionName);
177         buf.append("JCS region", jcsCache);
178         return buf.toString();
179     }
180 }
181