Skip to content
Ben Manes edited this page May 8, 2017 · 30 revisions

JSR-107 JCache is a standardized caching API that is Java 6 compatible and introduced in JEE 8. Caffeine provides a local in-memory implementation. The JCache provider is configured using Typesafe's Config library. See the reference.conf for more details. A FactoryCreator may be configured to delegate instantiation to dependency injection framework.

WARNING: JCache designed ExpiryPolicy to lazily expire entries and rely on a maximum size constraint for eviction. The specification's approach is incompatible with Caffeine's native support, which will eagerly expires entries in O(1) time during periodic maintenance. It is expected by the specification that all uses have an additional size constraint, even though the specification does not support that capability. When using JCache's expiration version, rather than Caffeine's flavor, a size bounding should be used to avoid memory leaks and promptly notify listeners.

Annotation support

Be weary of anonymous caches, which are created using the specification's defaults settings. This means a cache that never expires and stores by value (serialization). Prefer instead replacing the DefaultCacheResolverFactory binding to create an anonymous cache using Caffeine's defaults or disallows creating them. This ensures that your desired default behavior, rather than the specification's, are honored.

Spring

See the Spring documentation.

Prefer using Spring Cache, which includes support for Caffeine as of Spring Framework 4.3 and Spring Boot 1.4.

Guice

The JSR provides an integration module that delegates to the JCache provider.

compile 'org.jsr107.ri:cache-annotations-ri-guice:1.0.0'
Injector injector = Guice.createInjector(new CacheAnnotationsModule());

CDI

The JSR provides an extension that delegates to the JCache provider.

compile 'org.jsr107.ri:cache-annotations-ri-cdi:1.0.0'
Clone this wiki locally