KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ojb > broker > cache > ObjectCacheJCSImpl


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 JavaDoc;
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.11.2.2 2005/12/21 22:24:15 tomdz Exp $
55  */

56 public class ObjectCacheJCSImpl implements ObjectCache
57 {
58     /**
59      * The used default region name.
60      */

61     public static final String JavaDoc 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 JavaDoc regionName = DEFAULT_REGION;
68
69     public ObjectCacheJCSImpl(PersistenceBroker broker, Properties JavaDoc prop)
70     {
71         this(null);
72     }
73
74     /**
75      * Constructor used by the {@link ObjectCacheJCSPerClassImpl}
76      */

77     public ObjectCacheJCSImpl(String JavaDoc name)
78     {
79         regionName = (name != null ? name : DEFAULT_REGION);
80         try
81         {
82             jcsCache = JCS.getInstance(regionName);
83         }
84         catch(Exception JavaDoc e)
85         {
86             throw new RuntimeCacheException("Can't instantiate JCS ObjectCacheImplementation", e);
87         }
88     }
89
90     public String JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc 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
182
Popular Tags