01: //$Id: CacheMode.java 9194 2006-02-01 19:59:07Z steveebersole $
02: package org.hibernate;
03:
04: import java.io.Serializable;
05: import java.util.HashMap;
06: import java.util.Map;
07:
08: /**
09: * Controls how the session interacts with the second-level
10: * cache and query cache.
11: *
12: * @see Session#setCacheMode(CacheMode)
13: * @author Gavin King
14: */
15: public final class CacheMode implements Serializable {
16: private final String name;
17: private final boolean isPutEnabled;
18: private final boolean isGetEnabled;
19: private static final Map INSTANCES = new HashMap();
20:
21: private CacheMode(String name, boolean isPutEnabled,
22: boolean isGetEnabled) {
23: this .name = name;
24: this .isPutEnabled = isPutEnabled;
25: this .isGetEnabled = isGetEnabled;
26: }
27:
28: public String toString() {
29: return name;
30: }
31:
32: public boolean isPutEnabled() {
33: return isPutEnabled;
34: }
35:
36: public boolean isGetEnabled() {
37: return isGetEnabled;
38: }
39:
40: /**
41: * The session may read items from the cache, and add items to the cache
42: */
43: public static final CacheMode NORMAL = new CacheMode("NORMAL",
44: true, true);
45: /**
46: * The session will never interact with the cache, except to invalidate
47: * cache items when updates occur
48: */
49: public static final CacheMode IGNORE = new CacheMode("IGNORE",
50: false, false);
51: /**
52: * The session may read items from the cache, but will not add items,
53: * except to invalidate items when updates occur
54: */
55: public static final CacheMode GET = new CacheMode("GET", false,
56: true);
57: /**
58: * The session will never read items from the cache, but will add items
59: * to the cache as it reads them from the database.
60: */
61: public static final CacheMode PUT = new CacheMode("PUT", true,
62: false);
63:
64: /**
65: * The session will never read items from the cache, but will add items
66: * to the cache as it reads them from the database. In this mode, the
67: * effect of <tt>hibernate.cache.use_minimal_puts</tt> is bypassed, in
68: * order to <em>force</em> a cache refresh
69: */
70: public static final CacheMode REFRESH = new CacheMode("REFRESH",
71: true, false);
72:
73: static {
74: INSTANCES.put(NORMAL.name, NORMAL);
75: INSTANCES.put(IGNORE.name, IGNORE);
76: INSTANCES.put(GET.name, GET);
77: INSTANCES.put(PUT.name, PUT);
78: INSTANCES.put(REFRESH.name, REFRESH);
79: }
80:
81: private Object readResolve() {
82: return INSTANCES.get(name);
83: }
84:
85: public static CacheMode parse(String name) {
86: return (CacheMode) INSTANCES.get(name);
87: }
88: }
|