Example usage for com.google.common.cache CacheBuilder removalListener

List of usage examples for com.google.common.cache CacheBuilder removalListener

Introduction

In this page you can find the example usage for com.google.common.cache CacheBuilder removalListener.

Prototype

RemovalListener removalListener

To view the source code for com.google.common.cache CacheBuilder removalListener.

Click Source Link

Usage

From source file:ca.exprofesso.guava.jcache.GuavaCache.java

public GuavaCache(String cacheName, CompleteConfiguration<K, V> configuration, CacheManager cacheManager) {
    this.cacheName = cacheName;
    this.configuration = configuration;
    this.cacheManager = cacheManager;

    String properties = cacheManager.getProperties().toString();

    CacheBuilderSpec cacheBuilderSpec = CacheBuilderSpec
            .parse(properties.substring(1, properties.length() - 1));

    CacheBuilder cacheBuilder = CacheBuilder.from(cacheBuilderSpec);

    ExpiryPolicy expiryPolicy = configuration.getExpiryPolicyFactory().create();

    if (expiryPolicy instanceof ModifiedExpiryPolicy) // == Guava expire after write
    {/*w ww. j  a  va2 s  .  c om*/
        Duration d = expiryPolicy.getExpiryForUpdate();

        cacheBuilder.expireAfterWrite(d.getDurationAmount(), d.getTimeUnit());
    } else if (expiryPolicy instanceof TouchedExpiryPolicy) // == Guava expire after access
    {
        Duration d = expiryPolicy.getExpiryForAccess();

        cacheBuilder.expireAfterAccess(d.getDurationAmount(), d.getTimeUnit());
    }

    this.cacheEntryListenerConfigurations = Sets
            .newHashSet(configuration.getCacheEntryListenerConfigurations());

    if (!this.cacheEntryListenerConfigurations.isEmpty()) {
        cacheBuilder = cacheBuilder.removalListener(this);
    }

    if (configuration.isManagementEnabled()) {
        GuavaCacheMXBean bean = new GuavaCacheMXBean(this);

        try {
            ManagementFactory.getPlatformMBeanServer().registerMBean(bean,
                    new ObjectName(bean.getObjectName()));
        } catch (OperationsException | MBeanException e) {
            throw new CacheException(e);
        }
    }

    if (configuration.isStatisticsEnabled()) {
        GuavaCacheStatisticsMXBean bean = new GuavaCacheStatisticsMXBean(this);

        try {
            ManagementFactory.getPlatformMBeanServer().registerMBean(bean,
                    new ObjectName(bean.getObjectName()));
        } catch (OperationsException | MBeanException e) {
            throw new CacheException(e);
        }

        cacheBuilder.recordStats();
    }

    if (configuration.isReadThrough()) {
        Factory<CacheLoader<K, V>> factory = configuration.getCacheLoaderFactory();

        this.cache = (Cache<K, V>) cacheBuilder.build(new GuavaCacheLoader<>(factory.create()));
    } else {
        this.cache = (Cache<K, V>) cacheBuilder.build();
    }

    this.view = cache.asMap();
}

From source file:uk.q3c.krail.core.user.opt.GuavaCacheConfiguration.java

public CacheBuilder<Object, Object> builder() {
    CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
    if (initialCapacity != null) {
        builder.initialCapacity(initialCapacity);
    }/*from ww w .  ja  v a  2 s. c o  m*/
    if (maximumSize != null) {
        builder.maximumSize(maximumSize);
    }
    if (maximumWeight != null) {
        builder.maximumWeight(maximumWeight);
    }
    if (concurrencyLevel != null) {
        builder.concurrencyLevel(concurrencyLevel);
    }
    if (weakKeys) {
        builder.weakKeys();
    }

    if (weakValues) {
    }
    builder.weakValues();
    if (softValues) {
        builder.softValues();
    }

    if (expireAfterWriteDuration != null) {
        builder.expireAfterWrite(expireAfterWriteDuration, expireAfterWriteTimeUnit);
    }
    if (expireAfterAccessDuration != null) {
        builder.expireAfterAccess(expireAfterAccessDuration, expireAfterAccessTimeUnit);
    }
    if (refreshAfterWriteDuration != null) {
        builder.refreshAfterWrite(refreshAfterWriteDuration, refreshAfterWriteTimeUnit);
    }

    if (ticker != null) {
        builder.ticker(ticker);
    }

    if (removalListener != null) {
        builder.removalListener(removalListener);
    }

    if (recordStats) {
        builder.recordStats();
    }
    return builder;
}

From source file:com.github.benmanes.caffeine.cache.testing.GuavaCacheFromContext.java

/** Returns a Guava-backed cache. */
@SuppressWarnings("CheckReturnValue")
public static <K, V> Cache<K, V> newGuavaCache(CacheContext context) {
    checkState(!context.isAsync(), "Guava caches are synchronous only");

    CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder();
    context.guava = builder;/*  ww w  .  j ava  2 s.c o m*/

    builder.concurrencyLevel(1);
    if (context.initialCapacity != InitialCapacity.DEFAULT) {
        builder.initialCapacity(context.initialCapacity.size());
    }
    if (context.isRecordingStats()) {
        builder.recordStats();
    }
    if (context.maximumSize != Maximum.DISABLED) {
        if (context.weigher == CacheWeigher.DEFAULT) {
            builder.maximumSize(context.maximumSize.max());
        } else {
            builder.weigher(new GuavaWeigher<Object, Object>(context.weigher));
            builder.maximumWeight(context.maximumWeight());
        }
    }
    if (context.afterAccess != Expire.DISABLED) {
        builder.expireAfterAccess(context.afterAccess.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.afterWrite != Expire.DISABLED) {
        builder.expireAfterWrite(context.afterWrite.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.refresh != Expire.DISABLED) {
        builder.refreshAfterWrite(context.refresh.timeNanos(), TimeUnit.NANOSECONDS);
    }
    if (context.expires() || context.refreshes()) {
        builder.ticker(context.ticker());
    }
    if (context.keyStrength == ReferenceType.WEAK) {
        builder.weakKeys();
    } else if (context.keyStrength == ReferenceType.SOFT) {
        throw new IllegalStateException();
    }
    if (context.valueStrength == ReferenceType.WEAK) {
        builder.weakValues();
    } else if (context.valueStrength == ReferenceType.SOFT) {
        builder.softValues();
    }
    if (context.removalListenerType != Listener.DEFAULT) {
        boolean translateZeroExpire = (context.afterAccess == Expire.IMMEDIATELY)
                || (context.afterWrite == Expire.IMMEDIATELY);
        builder.removalListener(new GuavaRemovalListener<>(translateZeroExpire, context.removalListener));
    }
    Ticker ticker = (context.ticker == null) ? Ticker.systemTicker() : context.ticker;
    if (context.loader == null) {
        context.cache = new GuavaCache<>(builder.<Integer, Integer>build(), ticker, context.isRecordingStats());
    } else if (context.loader().isBulk()) {
        context.cache = new GuavaLoadingCache<>(
                builder.build(new BulkLoader<Integer, Integer>(context.loader())), ticker,
                context.isRecordingStats());
    } else {
        context.cache = new GuavaLoadingCache<>(
                builder.build(new SingleLoader<Integer, Integer>(context.loader())), ticker,
                context.isRecordingStats());
    }
    @SuppressWarnings("unchecked")
    Cache<K, V> castedCache = (Cache<K, V>) context.cache;
    return castedCache;
}

From source file:com.github.benmanes.multiway.TransferPool.java

/** Creates the denormalized cache of resources based on the builder configuration. */
Cache<ResourceKey<K>, R> __makeCache(MultiwayPoolBuilder<? super K, ? super R> builder) {
    CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder();
    if (builder.maximumSize != MultiwayPoolBuilder.UNSET_INT) {
        cacheBuilder.maximumSize(builder.maximumSize);
    }// ww  w .  j  a  v a2s  .  c  o  m
    if (builder.maximumWeight != MultiwayPoolBuilder.UNSET_INT) {
        cacheBuilder.maximumWeight(builder.maximumWeight);
    }
    if (builder.weigher != null) {
        final Weigher<? super K, ? super R> weigher = builder.weigher;
        cacheBuilder.weigher(new Weigher<ResourceKey<K>, R>() {
            @Override
            public int weigh(ResourceKey<K> resourceKey, R resource) {
                return weigher.weigh(resourceKey.getKey(), resource);
            }
        });
    }
    if (builder.expireAfterWriteNanos != MultiwayPoolBuilder.UNSET_INT) {
        cacheBuilder.expireAfterWrite(builder.expireAfterWriteNanos, TimeUnit.NANOSECONDS);
    }
    if (builder.ticker != null) {
        cacheBuilder.ticker(builder.ticker);
    }
    if (builder.recordStats) {
        cacheBuilder.recordStats();
    }
    cacheBuilder.concurrencyLevel(builder.getConcurrencyLevel());
    cacheBuilder.removalListener(new CacheRemovalListener());
    return cacheBuilder.build();
}