All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.openfire.container.CacheInfo Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2005-2008 Jive Software. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.jivesoftware.openfire.container;

import java.util.Map;

/**
 * Configuration to use when creating caches. Caches can be used when running stand alone or when
 * running in a cluster. When running in a cluster a few extra parameters might be needed. Read
 * {@link #getParams()} for more information.
 *
 * @author Gaston Dombiak
 */
public class CacheInfo {
    /**
     * Name of the cache
     */
    private String cacheName;
    /**
     * Type of cache to use when running in a cluster. When not running in a cluster this value is not used.
     */
    private Type type;
    /**
     * Map with the configuration of the cache. Openfire expects the following properties to exist:
     * 
    *
  • back-size-high - Maximum size of the cache. Size is in bytes. Zero means that there is no limit.
  • *
  • back-size-low - Size in byte of the cache after a clean up. Use zero to place no limit.
  • *
  • back-expiry - minutes, hours or days before content is expired. 10m, 12h or 2d. Zero means never.
  • *
*/ private Map params; /** * Creates the configuration to use for the specified cache. Caches can be used when running * as a standalone application or when running in a cluster. When running in a cluster a few * extra configuration are going to be needed. Read {@link #getParams()} for more information. * * @param cacheName name of the cache. * @param type type of cache to use when running in a cluster. Ignored when running as standalone. * @param params extra parameters that define cache properties like max size or expiration. */ public CacheInfo(String cacheName, Type type, Map params) { this.cacheName = cacheName; this.type = type; this.params = params; } public String getCacheName() { return cacheName; } public Type getType() { return type; } /** * Returns a map with the configuration to use for the cache. When running standalone the following * properties are required. *
    *
  • back-size-high - Maximum size of the cache. Size is in bytes. Zero means that there is no limit.
  • *
  • back-expiry - minutes, hours or days before content is expired. 10m, 12h or 2d. Zero means never.
  • *
* When running in a cluster this extra property is required. More properties can be defined depending on the * clustering solution being used. *
    *
  • back-size-low - Size in byte of the cache after a clean up. Use zero to place no limit.
  • *
* * @return map with the configuration to use for the cache. */ public Map getParams() { return params; } public static enum Type { /** * Data is fully replicated to every member in the cluster. Offers the fastest read performance. Clustered, * fault-tolerant cache with linear performance scalability for reads, but poor scalability for writes * (as writes must be processed by every member in the cluster). Because data is replicated to all machines, * adding servers does not increase aggregate cache capacity. */ replicated("replicated"), /** * OptimisticCache is a clustered cache implementation similar to the ReplicatedCache implementation, but * without any concurrency control. This implementation has the highest possible throughput. It also allows * to use an alternative underlying store for the cached data (for example, a MRU/MFU-based cache). However, * if two cluster members are independently pruning or purging the underlying local stores, it is possible * that a cluster member may have a different store content than that held by another cluster member. * This cache is good for frequent reads and not frequent writes. However, this cache will not scale fine * if it has lot of content that will end up consuming all the JVM memory. For this case a * {@link #distributed} is a better option. */ optimistic("optimistic"), /** * An distributed-scheme defines caches where the storage for entries is partitioned across cluster nodes. * A hybrid cache; fronts a fault-tolerant, scalable partitioned cache with a local cache. Near cache * invalidates front cache entries, using configurable invalidation strategy, and provides excellent * performance and synchronization. Near cache backed by a partitioned cache offers zero-millisecond local * access for repeat data access, while enabling concurrency and ensuring coherency and fail-over, * effectively combining the best attributes of replicated and partitioned caches. */ distributed("near-distributed"); private String name; Type(String name) { this.name = name; } public static Type valueof(String name) { if ("optimistic".equals(name)) { return optimistic; } return distributed; } public String getName() { return name; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy