/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package javax.cache; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; /** * JSR 107 - JCACHE implementation * based on javadoc from * <a href="https://jsr-107-interest.dev.java.net/javadoc/javax/cache/package-summary.html"> * jsr-107-interest</a> (last update 01/19/2005)<br><br> * * @author Fabien DUMINY (fduminy at users.sourceforge.net) * */ public class CacheManager { /** * Map of Cache(s). * Since cache (and CacheManager) are offen accessed by multiple threads, * use a synchronized map. (not specified in JSR) */ private Map<String, Cache> caches = new Hashtable<String, Cache>(); /** * */ protected static CacheManager instance; /** * * */ public CacheManager() { } /** * * @return */ static CacheManager getInstance() { if(instance == null) { instance = new CacheManager(); } return instance; } /** * * @param cacheName * @return */ public Cache getCache(String cacheName) { return caches.get(cacheName); } /** * * @param cacheName * @param cache */ public void registerCache(String cacheName, Cache cache) { caches.put(cacheName, cache); } /** * * @return * @throws CacheException */ public CacheFactory getCacheFactory() throws CacheException { //TODO I assume the factory is specified through this property (check JSR for confirmation) final String property = "javax.cache.CacheFactory"; final String className = System.getProperty(property); if((className == null) || "".equals(className)) { throw new CacheException("The property " + property + " must specify a valid class name"); } try { Class<?> clazz = Class.forName(className); return (CacheFactory) clazz.newInstance(); } catch (ClassNotFoundException e) { throw new CacheException("Class not found: "+className, e); } catch (InstantiationException e) { throw new CacheException("Can't instanciate "+className, e); } catch (IllegalAccessException e) { throw new CacheException("Can't access "+className, e); } } }