CacheManager.java 3.75 KB
Newer Older
Matt Tucker's avatar
Matt Tucker committed
1 2 3 4
/*
 * $Revision$
 * $Date$
 *
5
 * Copyright (C) 1999-2006 Jive Software. All rights reserved.
Matt Tucker's avatar
Matt Tucker committed
6 7 8
 *
 * Use is subject to license terms.
 */
9

Matt Tucker's avatar
Matt Tucker committed
10 11
package org.jivesoftware.util;

12 13 14
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
Matt Tucker's avatar
Matt Tucker committed
15 16

/**
17
 * Centralized management of caches. Caches are essential for performance and scalability.
Matt Tucker's avatar
Matt Tucker committed
18
 *
19 20
 * @see Cache
 * @author Matt Tucker
Matt Tucker's avatar
Matt Tucker committed
21 22 23
 */
public class CacheManager {

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    private static Map<String, Cache> caches = new HashMap<String, Cache>();
    private static final long DEFAULT_EXPIRATION_TIME = JiveConstants.HOUR * 6;

    /**
     * Initializes a cache given it's name and max size. The default expiration time
     * of six hours will be used. If a cache with the same name has already been initialized,
     * this method returns the existing cache.<p>
     *
     * The size and expiration time for the cache can be overridden by setting Jive properties
     * in the format:<ul>
     *
     *  <li>Size: "cache.CACHE_NAME.size", in bytes.
     *  <li>Expiration: "cache.CACHE_NAME.expirationTime", in milleseconds.
     * </ul>
     * where CACHE_NAME is the name of the cache.
     *
     * @param name the name of the cache to initialize.
41 42 43
     * @param propertiesName  the properties file name prefix where settings for the cache
     *                        are stored. The name is will be prefixed by "cache." before it is
     *                        looked up.
44 45
     * @param size the size the cache can grow to, in bytes.
     */
46 47
    public static Cache initializeCache(String name, String propertiesName, int size) {
        return initializeCache(name, propertiesName, size, DEFAULT_EXPIRATION_TIME);
48
    }
Matt Tucker's avatar
Matt Tucker committed
49 50

    /**
51 52 53 54 55 56 57 58 59 60
     * Initializes a cache given it's name, max size, and expiration time. If a cache with
     * the same name has already been initialized, this method returns the existing cache.<p>
     *
     * The size and expiration time for the cache can be overridden by setting Jive properties
     * in the format:<ul>
     *
     *  <li>Size: "cache.CACHE_NAME.size", in bytes.
     *  <li>Expiration: "cache.CACHE_NAME.expirationTime", in milleseconds.
     * </ul>
     * where CACHE_NAME is the name of the cache.
Matt Tucker's avatar
Matt Tucker committed
61
     *
62
     * @param name the name of the cache to initialize.
63 64 65 66 67
     * @param propertiesName  the properties file name prefix where settings for the cache are
     *                        stored. The name is will be prefixed by "cache." before it is
     *                        looked up.
     * @param size the size  the cache can grow to, in bytes.
     * @param expirationTime the default max lifetime of the cache, in milliseconds.
Matt Tucker's avatar
Matt Tucker committed
68
     */
69 70
    public static Cache initializeCache(String name, String propertiesName, int size,
            long expirationTime) {
71
        Cache cache = caches.get(name);
Matt Tucker's avatar
Matt Tucker committed
72
        if (cache == null) {
73
            size = JiveGlobals.getIntProperty("cache." + propertiesName + ".size", size);
74 75
            expirationTime = (long) JiveGlobals.getIntProperty(
                    "cache." + propertiesName + ".expirationTime", (int) expirationTime);
76 77
            cache = new Cache(name, size, expirationTime);
            caches.put(name, cache);
Matt Tucker's avatar
Matt Tucker committed
78
        }
79
        return cache;
Matt Tucker's avatar
Matt Tucker committed
80 81 82
    }

    /**
83 84
     * Returns the cache specified by name. The cache must be initialized before this
     * method can be called.
Matt Tucker's avatar
Matt Tucker committed
85
     *
86
     * @param name the name of the cache to return.
87 88
     * @return the cache found, or <tt>null</tt> if no cache by that name
     *      has been initialized.
Matt Tucker's avatar
Matt Tucker committed
89 90
     */
    public static Cache getCache(String name) {
91
        return caches.get(name);
Matt Tucker's avatar
Matt Tucker committed
92
    }
93 94 95 96 97 98 99 100 101

    /**
     * Returns the list of caches being managed by this manager.
     *
     * @return the list of caches being managed by this manager.
     */
    public static Collection<Cache> getCaches() {
        return caches.values();
    }
102
}