1 /* Open Source Java Caching Service
2 * Copyright (C) 2002 Frank Karlstrøm
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2.1 of the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * The author can be contacted by email: fjankk@users.sourceforge.net
18 */
19 package org.fjank.jcache;
20
21 import javax.util.jcache.Attributes;
22 import javax.util.jcache.Cache;
23 import javax.util.jcache.CacheAccessFactory;
24 import javax.util.jcache.CacheException;
25 import javax.util.jcache.CacheMap;
26 import javax.util.jcache.CacheNotAvailableException;
27 import javax.util.jcache.NullObjectNameException;
28 import javax.util.jcache.ObjectExistsException;
29 import org.fjank.jcache.collection.MapAdapter;
30
31 /**
32 * A factory for CacheAccess objects.
33 *
34 * @author Frank Karlstrøm
35 */
36 public final class CacheAccessFactoryImpl extends CacheAccessFactory {
37 /**
38 * Creates a new CacheAccessFactoryImpl object.
39 */
40 public CacheAccessFactoryImpl() {
41 }
42
43 /**
44 * Will create a named region within the cache. This defines a namespace
45 * for storing objects. Gets it default attributes from the properties
46 * file.
47 *
48 * @param name the name for the region. Must be globally unique.
49 *
50 * @throws ObjectExistsException if the name already exists in the cache.
51 * @throws NullObjectNameException if the region is attempted initialized
52 * with <CODE>null</CODE> as name.
53 * @throws CacheNotAvailableException if the cache is not available, either
54 * it is not initialized, or it is unavailable.
55 */
56 public void defineRegion(final String name)
57 throws ObjectExistsException, NullObjectNameException,
58 CacheNotAvailableException {
59 Attributes att = CacheAccessFactory.getInstance().getDefaultAttributes();
60 defineRegion(name, att);
61 }
62
63 /**
64 * Will create a named region within the cache. This defines a namespace
65 * for storing objects.
66 *
67 * @param name the name for the region. Must be globally unique.
68 * @param attributes sets the default attributes for objects in the new
69 * region.
70 *
71 * @throws ObjectExistsException if the name already exists in the cache.
72 * @throws NullObjectNameException if the region is attempted initialized
73 * with <CODE>null</CODE> as name.
74 * @throws CacheNotAvailableException if the cache is not available, either
75 * it is not initialized, or it is unavailable.
76 */
77 public void defineRegion(final String name, final Attributes attributes)
78 throws ObjectExistsException, NullObjectNameException,
79 CacheNotAvailableException {
80 CacheImpl cache = CacheImpl.getCache(true);
81 Attributes lAttribs=attributes;
82 if(lAttribs==null) lAttribs=CacheAccessFactory.getInstance().getDefaultAttributes();
83 cache.addRegion(name, lAttribs);
84 }
85
86 /**
87 * A method to retrieve a Map based implementation
88 * of a CacheAccess to the default region.
89 * @return a Map based Cache implementation to the default region.
90 */
91 public CacheMap getMapAccess() {
92 return new MapAdapter(getNewAccessImpl(null));
93 }
94 /**
95 * A method to retrieve a Map based implementation
96 * of a CacheAccess to the specified region.
97 * @return a Map based Cache implementation to the specified region.
98 */
99 public CacheMap getMapAccess(final String region) {
100 return new MapAdapter(getNewAccessImpl(region));
101 }
102 CacheAccessImpl2 getNewAccessImpl(final String region) {
103 CacheImpl cache = CacheImpl.getCache(true);
104 CacheRegion reg = region!=null?cache.getRegion(region):cache.getRegion();
105 if (reg == null) {
106 throw new IllegalStateException("The region " + region
107 + " does not exist in this cache.");
108 }
109 return new CacheAccessImpl2(reg);
110 }
111 /**
112 * gets an initialized instance of the cache.
113 *
114 * @see javax.util.jcache.CacheAccessFactory#getCache()
115 */
116 public Cache getCache() throws CacheException {
117 return CacheImpl.getCache(true);
118 }
119
120 /**
121 * gets an instance of the cache. if the parameter init is true the cache
122 * is initialized. Otherwise the cache is not initialized.
123 *
124 * @see javax.util.jcache.CacheAccessFactory#getCache(boolean)
125 */
126 public Cache getCache(final boolean init) throws CacheException {
127 return CacheImpl.getCache(init);
128 }
129 }