View Javadoc
1 /* ==================================================================== 2 * License: 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in 13 * the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * 3. The end-user documentation included with the redistribution, 17 * if any, must include the following acknowledgment: 18 * "This product includes software developed by 19 * Robert Half International (http://www.rhi.com/)." 20 * Alternately, this acknowledgment may appear in the software itself, 21 * if and wherever such third-party acknowledgments normally appear. 22 * 23 * 4. The names "Parc", "RHI", and "Robert Half International" must 24 * not be used to endorse or promote products derived from this 25 * software without prior written permission. For written 26 * permission, please contact pete.mckinstry@rhi.com. 27 * 28 * 5. Products derived from this software may not be called "PARC", 29 * nor may "PARC" appear in their name, without prior written 30 * permission of Robert Half International. 31 * 32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 43 * SUCH DAMAGE. 44 * ==================================================================== 45 * 46 */ 47 package com.rhi.architecture.cache.simple; 48 49 import com.rhi.architecture.cache.CacheFactory; 50 import com.rhi.architecture.cache.CacheLoader; 51 import com.rhi.architecture.cache.CacheManager; 52 import com.rhi.architecture.logging.LogUtil; 53 import com.rhi.architecture.logging.Logger; 54 import com.rhi.architecture.config.ConfigurationException; 55 import com.rhi.architecture.resource.InitializationException; 56 57 import java.util.Enumeration; 58 import java.util.HashMap; 59 import java.util.Properties; 60 61 /*** 62 * CacheFactory class manages caching creation/retrieval of specific cache mgr. 63 * This class uses simple HashMap to store cacheable objects. 64 * 65 * It is a resource class hence has it will be registered into the 66 * the ResourceContext and in the init method it initilizes all the 67 * CacheManagers and its respective caches. 68 * 69 * @author G Srinivas 70 * @copyright 2002, Robert Half Int'l., Inc. All rights reserved. 71 * 72 * @since 1.0 73 */ 74 public class SimpleCacheFactory implements CacheFactory { 75 76 private HashMap managers; // Collection of CacheManagers. 77 78 private static Logger log = null; 79 80 /*** 81 * convenience method to retrieve logger. 82 * @return 83 */ 84 protected static Logger log() { 85 return log; 86 } 87 88 /*** 89 * Constructor 90 * 91 * @since 1.0 92 */ 93 public SimpleCacheFactory() { 94 super(); 95 } 96 97 /*** 98 * This init method will be called while Resources are being 99 * registered and initilised. It obtains all the cacheable objects 100 * class names and calls load on it to load cache in the CacheManagers. 101 * 102 * @param p 103 * @exception InitializationException 104 */ 105 public void init(Properties p) throws InitializationException { 106 try { 107 log = LogUtil.getLogger(); 108 } 109 catch (ConfigurationException e) { 110 throw new InitializationException( 111 "Logger cannot be initialized:", 112 e); 113 } 114 115 managers = new HashMap(50); 116 log().info("Entered SimpleCacheFactory init method"); 117 118 // Pick each from config table and load for each. 119 Enumeration names = p.propertyNames(); 120 String cacheableClassName = null; 121 SimpleCacheManager cacheManager = null; 122 String propertyName = null; 123 Object cacheableObject = null; 124 Class cacheableClass = null; 125 126 try { 127 while (names.hasMoreElements()) { 128 propertyName = (String) names.nextElement(); 129 if (propertyName.startsWith("CacheableClass.")) { 130 log().debug("CacheableClass is present:" + propertyName); 131 cacheableClassName = p.getProperty(propertyName); 132 cacheManager = new SimpleCacheManager(cacheableClassName); 133 134 //Add the CacheManager to the manager list. 135 managers.put(cacheableClassName, cacheManager); 136 cacheableClass = Class.forName(cacheableClassName); 137 cacheableObject = cacheableClass.newInstance(); 138 139 /* 140 * Check if the cacheable instance is implementing 141 * CacheLoader, if yes, then call its loadCache() method 142 * to load all its data into cache ie by adding cache in 143 * cachemanager that is passed as argument. Otherwise 144 * the cacheable object is understood to be lazy-loaded. 145 */ 146 if (cacheableObject instanceof CacheLoader) { 147 ((CacheLoader) cacheableObject).loadCache(cacheManager); 148 } 149 } 150 } //enum 151 } 152 catch (ClassNotFoundException cnfe) { 153 throw new InitializationException("ClassNotFoundException", cnfe); 154 } 155 catch (InstantiationException ie) { 156 throw new InitializationException("InstantiationException", ie); 157 } 158 catch (IllegalAccessException iae) { 159 throw new InitializationException("IllegalAccessException", iae); 160 } 161 } 162 163 /*** 164 * Retrieves the CacheManager that is specific to the className object. 165 * 166 * @param className 167 * @return CacheManager 168 */ 169 public CacheManager getManager(Object className) { 170 return (CacheManager) managers.get(className); 171 } 172 173 /*** 174 * As part of Resource object it cleans up the CacheManagers 175 * which inturn will make cached data garbage collected. 176 */ 177 public void close() { 178 managers.clear(); 179 } 180 181 }

This page was automatically generated by Maven