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 javax.util.jcache; 20 21 import org.fjank.jcache.AttributesImpl; 22 23 24 /** 25 * A factory for CacheAccess objects and to the Cache Administrative interface. 26 * 27 * @author Frank Karlstrøm 28 */ 29 public abstract class CacheAccessFactory { 30 private static CacheAccessFactory _singleton; 31 32 /** 33 * Creates a new CacheAccessFactory object. 34 */ 35 protected CacheAccessFactory() { 36 } 37 /** 38 * returns the default Attributes 39 * 40 * @return the default Attributes 41 * @deprecated removed with no replacement. 42 */ 43 public Attributes getDefaultAttributes() { 44 return new AttributesImpl(); 45 } 46 /** 47 * Obtain a new instance of a CacheAccessFactory. This static method 48 * creates a new factory instance. This method uses the following ordered 49 * lookup procedure to determine the CacheAccessFactory implementation 50 * class to load: 51 * 52 * <ul> 53 * <li> 54 * Use the javax.util.jcache.CacheAccessFactory system property. 55 * </li> 56 * <li> 57 * FKache default CacheAccessFactory instance. 58 * </li> 59 * </ul> 60 * 61 * 62 * @return an instance of a CacheAccessFactory. 63 * 64 * @throws IllegalStateException if the implementation is not 65 * available or cannot be instantiated. 66 */ 67 public static synchronized CacheAccessFactory getInstance() { 68 if(_singleton!=null) { 69 return _singleton; 70 } 71 String clazz = System.getProperty("javax.util.jcache.CacheAccessFactory"); 72 if (clazz == null) { 73 clazz = "org.fjank.jcache.CacheAccessFactoryImpl"; 74 } 75 try { 76 _singleton = (CacheAccessFactory) Class.forName(clazz).newInstance(); 77 return _singleton; 78 } catch (InstantiationException e) { 79 throw new IllegalStateException("CacheAccessFactory '" + clazz 80 + "' could not be instantiated."); 81 } catch (IllegalAccessException e) { 82 throw new IllegalStateException("CacheAccessFactory '" + clazz 83 + "' did not have a public empty args constructor."); 84 } catch (ClassNotFoundException e) { 85 throw new IllegalStateException("CacheAccessFactory '" + clazz 86 + "' could not be located."); 87 } 88 } 89 90 /** 91 * Will create a named region within the cache. This defines a namespace 92 * for storing objects. Gets it default attributes from the properties 93 * file. 94 * 95 * @param name the name for the region. Must be globally unique. 96 * 97 * @throws ObjectExistsException if the name already exists in the cache. 98 * @throws NullObjectNameException if the region is attempted initialized 99 * with <CODE>null</CODE> as name. 100 * @throws CacheNotAvailableException if the cache is not available, either 101 * it is not initialized, or it is unavailable. 102 * @deprecated removed auto-generate-region replacement. 103 */ 104 public abstract void defineRegion(final String name) 105 throws ObjectExistsException, NullObjectNameException, 106 CacheNotAvailableException; 107 108 /** 109 * Will create a named region within the cache. This defines a namespace 110 * for storing objects. 111 * 112 * @param name the name for the region. Must be globally unique. 113 * @param attributes sets the default attributes for objects in the new 114 * region. If the Attributes is <code>null</code>, default 115 * attributes will be used. 116 * 117 * @throws ObjectExistsException if the name already exists in the cache. 118 * @throws NullObjectNameException if the region is attempted initialized 119 * with <CODE>null</CODE> as name. 120 * @throws CacheNotAvailableException if the cache is not available, either 121 * it is not initialized, or it is unavailable. 122 * @deprecated removed auto-generate-region replacement. 123 */ 124 public abstract void defineRegion(final String name, 125 final Attributes attributes) 126 throws ObjectExistsException, NullObjectNameException, 127 CacheNotAvailableException; 128 129 /** 130 * Gets the Cache which contains several usefull administraion methods. 131 * 132 * @return A Cache object wich is initialized. 133 * 134 * @throws CacheException if exceptions occur. 135 * @deprecated will be removed with no replacement. 136 */ 137 public abstract Cache getCache() throws CacheException; 138 139 /** 140 * Will get the Cache instance. 141 * 142 * @param b a boolean indicating wether to initialize the Cache or not. if 143 * already initialized, this is ignored. 144 * 145 * @return the Cache instance. 146 * 147 * @throws CacheException if fatal exceptions occur. 148 * @deprecated will be removed with no replacement. 149 */ 150 public abstract Cache getCache(final boolean b) throws CacheException; 151 152 public abstract CacheMap getMapAccess() throws CacheException; 153 154 public abstract CacheMap getMapAccess(final String region) throws CacheException; 155 }