org.geoserver.jdbcconfig.internal.JDBCCacheProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.jdbcconfig.internal.JDBCCacheProvider.java

Source

/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.jdbcconfig.internal;

import java.io.Serializable;
import java.util.concurrent.TimeUnit;

import org.geoserver.util.CacheProvider;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

/**
 * This class implements the {@link CacheProvider} interface and can be used for configuring
 * a new {@link Cache} object with two Java parameters called maxCachedEntries and evictionTime.
 * The first parameters indicates the maximum entries that the cache could contain (by default 25000)
 * while the second one indicates the eviction time for each entry in minutes(default 20).
 * 
 * 
 * @author Nicola Lagomarsini geosolutions
 *
 */
public class JDBCCacheProvider implements CacheProvider {

    public static final int DEFAULT_CONCURRENCY_LEVEL = 4;

    public static final int DEFAULT_EXPIRATION_MINUTES = 20;

    public static final int DEFAULT_MAX_ENTRIES = 25000;

    public static final String DEFAULT_SIZE_KEY = "maxCachedEntries";

    public static final String DEFAULT_TIME_KEY = "evictionTime";

    /** Maximum number of cache entries*/
    public final int maxEntries = Integer.parseInt(System.getProperty(DEFAULT_SIZE_KEY, DEFAULT_MAX_ENTRIES + ""));

    /** Expiration time in minutes for each entry*/
    public final long expirationMinutes = Long
            .parseLong(System.getProperty(DEFAULT_TIME_KEY, DEFAULT_EXPIRATION_MINUTES + ""));

    @Override
    public <K extends Serializable, V extends Serializable> Cache<K, V> getCache(String cacheName) {
        // Cache creation
        Cache<K, V> cache = CacheBuilder.newBuilder().softValues().concurrencyLevel(DEFAULT_CONCURRENCY_LEVEL)
                .expireAfterAccess(expirationMinutes, TimeUnit.MINUTES).maximumSize(maxEntries).build();

        return cache;
    }
}