SlideShare a Scribd company logo
Using JCache
GREG LUCK, CO-SPEC LEAD JSR107 @GREGRLUCK
CEO | HAZELCAST
28 NOVEMBER 2015
JCache
Agenda
• Introduction to Caching
• Java Caching (JCache), JSR-107
• Code Demo
Introduction to Caching
4
Benefits of Caching
Performance
Offload expenisve or non-scalabl parts of your
architecture
Scale up – get the most out of one machine
Scale out – add more capacity with more machines
Excellent Buffer against load variability
And…
Usually very fast and easy to apply
5
When to Use Caching
– When applications use the same data more than once
– When cost (time / resources) of making an initial copy is
less than fetching or producing the data again or when
faster to request from a Cache
1
2
3
4
Common Problem Areas that Benefit
Anything Web Scale Anything where the data is across
the network
Compound Data Objects Data Persistence
7
Database Caching
Cache Cache
ApplicationApplicationApplicationApplication
Data Store
Moving data from the database into the cache increases processing speed and can reduce
database licensing and maintenance costs.
Speed Costs Scalability  
~200 us
Average Response Time
Cache Cache
8
Flash/SSD
(serialized form)
Local Storage
Heap
(Objects)
Opaque to GC
in RAM
(serialized form)
<100 ns
< 100ns
+deserialization time
2
500
1,000+
Latency) Size (GB)
Caches are built primarily in RAM
in-process or distributed
Network Storage
Scaleout across the network
(serialized form)
< 50us
+deserialitzation time
< 140us for 1Gbps
< 70us for 10Gbps/40Gbps
+deserialitzation time
20,000+
‘s law
Predicted System Speedup
=
1 / ((1 – Proportion Sped Up) + Proportion Sped Up / Speed up))
Estimated Performance Improvements
10
Cache Efficiency
= cache hits / total hits
➡ High efficiency = high offload
➡ High efficiency = high performance
➡ How to increase:
➡Put reference data in the cache
➡Put long lived in the cache.
➡Consider frequency of mutability of data
➡Put highly used data in cache
➡Increase the size of the cache. Today you can create TB sized caches
10
11
Problems to Consider
• Standalone Caches and the N * problem
– As each entry expires, the backing system gets N requests
for data where n is the number of standalone caches.
Solution: Use a distributed cache
• Consistency with the System of Record
– How to keep the cache in sync with changes in a backing
system. Solution: Match mutability of data with data
safety configuration. Update the cache and backing store
at the same time.
• Consistency with other cache nodes
– How to keep all cache nodes in sync: Solution: Use a
distributed cache and match consistency configuration
with data mutability 11
Java Caching (JCache)
Java Caching (JCache)
• What?
– Java Caching (JCache) standardized Caching for the
Java Platform*
– A common mechanism to create, access, update
and remove information from Caches
• How?
– JSR-107: Java Caching Specification (JCache)
– Java Community Process (JCP) 2.9
Java Caching (JCache)
• Why?
– Standardize! Standardize! Standardize!
• Core Caching Concepts
• Core Caching API
– Provide application portability between Caching
solutions
• Big & Small, Open & Commercial
– Caching is ubiquitous!
Java Caching (Jcache)
When?
Item Date
JCache Final Spec Released 18 March 2014
Spring 4.1 September 2014
Hazelcast 3.3.1 TCK Compliant September 2014
Hazelcast 3.4 (with High-Density Memory
Store)
November 2014
Hazelcast 3.6 (with High-Density Caching) July 2015
Implementations
• Implementations
– JCache Reference Implementation
– Hazelcast
– Oracle Coherence
– Terracotta Ehcache
– Infinispan
– GridGain
– TayzGrid
• Keep Track
– https://jcp.org/aboutJava/communityprocess/implementati
ons/jsr107/index.html
16
Java Caching (JCache)
• Which Platform?
Java Caching (JCache)
Project Hosting
– JCP Project:
• http://jcp.org/en/jsr/detail?id=107
– Source Code:
• https://github.com/jsr107
– Forum:
• https://groups.google.com/forum/?fromgroups#!forum
/jsr107
Java Caching (JCache)
How to get it.
Apache Maven: (via Maven Central Repository)
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.0</version>
</dependency>
Caches and Caching
Caches and Caching
JSR107 Cache Definition: A high-performance, low-
latency data-structure* in which an application
places a temporary copy of information that is likely
to be used more than once
Maps vs Cache APIs
java.util.Map (Java 6/7)
Key-Value Based API
Supports Atomic Updates
Entries Don’t Expire
Entries Aren’t Evicted
Entries Stored On-Heap
Store-By-Reference
javax.cache.Cache (Java 6)
Key-Value Based API
Supports Atomic Updates
Entries May Expire
Entries May Be Evicted
Entries Stored Anywhere (ie:
topologies)
Store-By-Value and Store-By-
Reference
Supports Integration (ie: Loaders /
Writers)
Supports Observation (ie: Listeners)
Entry Processors
Statistics
JCache: Features
• java.util.ConcurrentMap like API
• Atomic Operations
• Lock-Free
• Read-Through / Write-Through Integration Support
• Cache Event Listeners
• Fully Generic API = type-safety
• Statistics
• Annotations (for frameworks and containers)
• Store-By-Value semantics (optional store-by-reference)
JCache: Features
• Topology Agnostic
– Topologies not defined or restricted by the
specification
• Efficiently supports:
– “local” in-memory Caching and
– “distributed” server-based Caching
JCache Key
Classes/Interfaces
JCache: Runtime Structure
Caching
“service loader”
CachingProvider
“SPI implementation”
CacheManager
“manager of caches”
Cache
“interface to a Cache”
Loads
& Tracks
*
*
*
Created
& Managed By
Created
& Managed By
“application”
Uses..
*
JCache: Cache Managers
javax.cache.CacheManager
• Establishes, configures, manages and owns named Caches
– Caches may be pre-define or dynamically created at runtime
• Provides Cache infrastructure and resources
• Provides Cache “scoping” (say in a Cluster)
• Provides Cache ClassLoaders (important for store-by-value)
• Provides Cache lifecycle management
JCache: Hello World
(via a Cache Manager)
// acquire the default CacheManager
CacheManager manager = Caching.getCacheManager();
// acquire a previously configured cache (via CacheManager)
Cache<Integer, String> cache =
manager.getCache(“my-cache”, Integer.class, String.class);
// put something in the cache
cache.put(123, “Hello World”);
// get something from the cache
String message = cache.get(123);
Cache Interface & Methods
(in IDE)
JCache: Entry Processors
(custom atomic operations for everyone!)
// acquire a cache
Cache<String, Integer> cache =
manager.getCache(“my-cache”,
String.class, Integer.class);
// increment a cached value by 42,
returning the old value
int value = cache.invoke(“key”, new
IncrementProcessor<>(), 42);
JCache: Entry Processors
(custom atomic operations for everyone!)
public class IncrementProcessor<K>
implements EntryProcessor<K, Integer, Integer>, Serializable {
@Override
public Integer process(MutableEntry<K, Integer> entry, Object... arguments) {
if (entry.exists()) {
int amount = arguments.length == 0 ? 1 : (Integer)arguments[0];
int current = entry.getValue();
entry.setValue(count + amount);
return current;
} else {
throw new IllegalStateException(“no entry exists”);
}
}
JCache: Entry Processors
(custom atomic operations for everyone!)
• Eliminate Round-Trips! (in distributed systems)
• Enable development of a Lock-Free API! (simplifies
applications)
*May need to be Serializable (in distributed systems)
Cache
Application
Cache
Application
JCache: Entry Processors
Which is better?
// using an entry processor?
int value = cache.invoke(“key”, new IncrementProcessor<>(), 42);
// using a lock based API?
cache.lock(“key”);
int current = cache.get(“key”);
cache.put(“key”, current + 42);
cache.unlock(“key”);
Annotations
• JSR107 introduces a standardized set of caching
annotations, which do method level caching
interception on annotated classes running in
dependency injection containers.
• Caching annotations are becoming increasingly
popular:
–Ehcache Annotations for Spring
–Spring 3’s caching annotations.
• JSR107 Annotations will be added to:
–Java EE 8 (planned?)
–Spring 4.1 (released)
Annotation Operations
• The JSR107 annotations cover the most
common cache operations:
• @CacheResult
• @CachePut
• @CacheRemove
• @CacheRemoveAll
Fully Annotated Class Example
@CacheDefaults(cacheName = "blogManager")
public class BlogManager {
@CacheResult
public Blog getBlogEntry(String title) {...}
@CacheRemove
public void removeBlogEntry(String title) {...}
@CacheRemoveAll
public void removeAllBlogs() {...}
@CachePut
public void createEntry(@CacheKey String title, @CacheValue Blog blog)
{...}
@CacheResult
public Blog getEntryCached(String randomArg, @CacheKey String title){...}
}
Specific Overrides
public class DomainDao {
@CachePut(cacheName="domainCache")
public void updateDomain(String domainId,
@CacheKey int index,
@CacheValue Domain domain) {
...
}
}
The Future?
• JCache 1.1 (2015)
– Maintenance Release being worked on
• JCache 2.0 (2016-)
– Java 8 Language Features (Lambda & Streams)
– Servlet 4.0 Integration / Session Caching?
– Java EE 8 Alignment?
• JCache 3.0 (2017?)
– Java 10 Language Features?
38
Working with
Hazelcast JCache
Hazelcast JCache Support
• Full implementation for:
– Hazelcast.newHazelcastInstance()
– HazelcastClient.newHazelcastClient()
• TCK Compliant
• JCache with Hi-Density Memory Store
• Docs: http://docs.hazelcast.org/docs/latest-
dev/manual/html-single/hazelcast-
documentation.html#jcache-overview
Check Out Hazelcast
Or Download
• Download from hazelcast.org/download
• Maven:
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>3.5.4</version>
</dependency>
QUESTIONS?
43
• Greg Luck
– (@gregrluck)
– greg@hazelcast.com

More Related Content

PDF
JCache (JSR107) - QCon London 2015 & JBCNConf Barcelona 2015
PDF
Distributed caching with java JCache
PPT
Cluster your application using CDI and JCache - Jonathan Gallimore
PDF
Ehcache Architecture, Features And Usage Patterns
PDF
Building low latency java applications with ehcache
PDF
Distributed Caching Using the JCACHE API and ehcache, Including a Case Study ...
PDF
Distributed applications using Hazelcast
PPT
Caching for J2ee Enterprise Applications
JCache (JSR107) - QCon London 2015 & JBCNConf Barcelona 2015
Distributed caching with java JCache
Cluster your application using CDI and JCache - Jonathan Gallimore
Ehcache Architecture, Features And Usage Patterns
Building low latency java applications with ehcache
Distributed Caching Using the JCACHE API and ehcache, Including a Case Study ...
Distributed applications using Hazelcast
Caching for J2ee Enterprise Applications

What's hot (20)

PPTX
Caching In Java- Best Practises and Pitfalls
PDF
Ehcache3 — JSR-107 on steroids
PDF
Overview of the ehcache
PDF
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
PPTX
Proxysql use case scenarios fosdem17
PDF
Caching and JCache with Greg Luck 18.02.16
PDF
Web session replication with Hazelcast
PDF
Eh cache in Kaunas JUG
PDF
Hazelcast 3.6 Roadmap Preview
PPTX
5 Reasons to Upgrade Ehcache to BigMemory Go
PDF
Introduction to hazelcast
PDF
Hazelcast Introduction
PPTX
From cache to in-memory data grid. Introduction to Hazelcast.
PPTX
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
PDF
Barcelona mysqlnd qc
PPT
Understanding MySql locking issues
PDF
EDB Postgres DBA Best Practices
 
KEY
Caching: A Guided Tour - 10/12/2010
PDF
Optimizing MySQL for Cascade Server
PDF
Hazelcast 101
Caching In Java- Best Practises and Pitfalls
Ehcache3 — JSR-107 on steroids
Overview of the ehcache
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
Proxysql use case scenarios fosdem17
Caching and JCache with Greg Luck 18.02.16
Web session replication with Hazelcast
Eh cache in Kaunas JUG
Hazelcast 3.6 Roadmap Preview
5 Reasons to Upgrade Ehcache to BigMemory Go
Introduction to hazelcast
Hazelcast Introduction
From cache to in-memory data grid. Introduction to Hazelcast.
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
Barcelona mysqlnd qc
Understanding MySql locking issues
EDB Postgres DBA Best Practices
 
Caching: A Guided Tour - 10/12/2010
Optimizing MySQL for Cascade Server
Hazelcast 101
Ad

Viewers also liked (20)

PDF
MySQL ガチBeginnerがやってみたことと反省したこと
PPTX
High performance java ee with j cache and cdi
PDF
JCache is here. Say Goodbye to proprietary Caching APIs!
PPTX
Secure rest api on microservices vws2016
PPTX
Bizweb theme workshop
PDF
NBMBAA 2015 Outstanding MBA of the Year Award
PDF
Linkedin, Creating Your Professional Profile
PDF
Usabilidad - Productos que ame la gente
PPT
Presentación sobre el futbol
PDF
Gradle 2.2, 2.3 news #jggug
PDF
Capturing the Elusive: Accounting for Study Attrition and Complex Trajectori...
PPT
Accessibility of Twitter
PPTX
Visión
PDF
アップロードテスト
DOCX
market research and audience theory
PDF
Xeirismoi 1
PDF
Social Media The Good, The Bad and The Ugly
PDF
CONVITE TMA SANTA JOANA DOS MATADOUROS
PDF
Nova presentation 2014-03-11 4 new
PDF
Sightlines' CarbonMAP & Validation Services
MySQL ガチBeginnerがやってみたことと反省したこと
High performance java ee with j cache and cdi
JCache is here. Say Goodbye to proprietary Caching APIs!
Secure rest api on microservices vws2016
Bizweb theme workshop
NBMBAA 2015 Outstanding MBA of the Year Award
Linkedin, Creating Your Professional Profile
Usabilidad - Productos que ame la gente
Presentación sobre el futbol
Gradle 2.2, 2.3 news #jggug
Capturing the Elusive: Accounting for Study Attrition and Complex Trajectori...
Accessibility of Twitter
Visión
アップロードテスト
market research and audience theory
Xeirismoi 1
Social Media The Good, The Bad and The Ugly
CONVITE TMA SANTA JOANA DOS MATADOUROS
Nova presentation 2014-03-11 4 new
Sightlines' CarbonMAP & Validation Services
Ad

Similar to JCache Using JCache (20)

PDF
Using JCache to speed up your apps
PDF
JCache - It's finally here
PDF
JSR107 State of the Union JavaOne 2013
PDF
Caching 101: Caching on the JVM (and beyond)
PDF
Caching principles-solutions
PDF
Caching reboot: javax.cache & Ehcache 3
PPTX
Jug Lugano - Scale over the limits
PDF
In-memory No SQL- GIDS2014
PDF
Ehcache 3 @ BruJUG
PDF
JCache data store for Apache Gora
PPTX
Data Locality, Latency and Caching: JSR-107 and the new Java JCACHE Standard
PDF
Caching 101: sur la JVM et au delà
PDF
Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES
PDF
JCache / JSR107 shortcomings
PDF
Java In-Process Caching - Performance, Progress and Pittfalls
PDF
Java In-Process Caching - Performance, Progress and Pitfalls
PDF
Ehcache 3: JSR-107 on steroids at Devoxx Morocco
PPTX
Cache-Aside Cloud Design Pattern
PPT
How to Stop Worrying and Start Caching in Java
PPTX
Cache Rules Everything Around Me - Momentum - October 2022.pptx
Using JCache to speed up your apps
JCache - It's finally here
JSR107 State of the Union JavaOne 2013
Caching 101: Caching on the JVM (and beyond)
Caching principles-solutions
Caching reboot: javax.cache & Ehcache 3
Jug Lugano - Scale over the limits
In-memory No SQL- GIDS2014
Ehcache 3 @ BruJUG
JCache data store for Apache Gora
Data Locality, Latency and Caching: JSR-107 and the new Java JCACHE Standard
Caching 101: sur la JVM et au delà
Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES
JCache / JSR107 shortcomings
Java In-Process Caching - Performance, Progress and Pittfalls
Java In-Process Caching - Performance, Progress and Pitfalls
Ehcache 3: JSR-107 on steroids at Devoxx Morocco
Cache-Aside Cloud Design Pattern
How to Stop Worrying and Start Caching in Java
Cache Rules Everything Around Me - Momentum - October 2022.pptx

More from 日本Javaユーザーグループ (12)

PDF
日本Javaユーザーグループ 2018年度 定期総会
PDF
日本Javaグループ2017年定期総会 #jjug
PDF
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
PDF
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
PDF
JJUG CCC 2015 Spring 総会資料
PDF
Jjug ccc spring_#ccc_r55
PDF
JJUG CCC 2014 Spring 定期総会
PDF
パフォーマンス ボトルネック 国内あるある事例
PDF
パフォーマンス管理最前線 米国大規模システムにおける最新トレンド
PDF
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
PDF
JJUG CCC 2013 Spring 定期総会資料
PDF
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
日本Javaユーザーグループ 2018年度 定期総会
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
JJUG CCC 2015 Spring 総会資料
Jjug ccc spring_#ccc_r55
JJUG CCC 2014 Spring 定期総会
パフォーマンス ボトルネック 国内あるある事例
パフォーマンス管理最前線 米国大規模システムにおける最新トレンド
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
JJUG CCC 2013 Spring 定期総会資料
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Encapsulation theory and applications.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Empathic Computing: Creating Shared Understanding
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
cuic standard and advanced reporting.pdf
PDF
Approach and Philosophy of On baking technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Review of recent advances in non-invasive hemoglobin estimation
Encapsulation_ Review paper, used for researhc scholars
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Per capita expenditure prediction using model stacking based on satellite ima...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Understanding_Digital_Forensics_Presentation.pptx
Encapsulation theory and applications.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
20250228 LYD VKU AI Blended-Learning.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Unlocking AI with Model Context Protocol (MCP)
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Empathic Computing: Creating Shared Understanding
Dropbox Q2 2025 Financial Results & Investor Presentation
cuic standard and advanced reporting.pdf
Approach and Philosophy of On baking technology

JCache Using JCache

  • 1. Using JCache GREG LUCK, CO-SPEC LEAD JSR107 @GREGRLUCK CEO | HAZELCAST 28 NOVEMBER 2015 JCache
  • 2. Agenda • Introduction to Caching • Java Caching (JCache), JSR-107 • Code Demo
  • 4. 4 Benefits of Caching Performance Offload expenisve or non-scalabl parts of your architecture Scale up – get the most out of one machine Scale out – add more capacity with more machines Excellent Buffer against load variability And… Usually very fast and easy to apply
  • 5. 5 When to Use Caching – When applications use the same data more than once – When cost (time / resources) of making an initial copy is less than fetching or producing the data again or when faster to request from a Cache
  • 6. 1 2 3 4 Common Problem Areas that Benefit Anything Web Scale Anything where the data is across the network Compound Data Objects Data Persistence
  • 7. 7 Database Caching Cache Cache ApplicationApplicationApplicationApplication Data Store Moving data from the database into the cache increases processing speed and can reduce database licensing and maintenance costs. Speed Costs Scalability   ~200 us Average Response Time Cache Cache
  • 8. 8 Flash/SSD (serialized form) Local Storage Heap (Objects) Opaque to GC in RAM (serialized form) <100 ns < 100ns +deserialization time 2 500 1,000+ Latency) Size (GB) Caches are built primarily in RAM in-process or distributed Network Storage Scaleout across the network (serialized form) < 50us +deserialitzation time < 140us for 1Gbps < 70us for 10Gbps/40Gbps +deserialitzation time 20,000+
  • 9. ‘s law Predicted System Speedup = 1 / ((1 – Proportion Sped Up) + Proportion Sped Up / Speed up)) Estimated Performance Improvements
  • 10. 10 Cache Efficiency = cache hits / total hits ➡ High efficiency = high offload ➡ High efficiency = high performance ➡ How to increase: ➡Put reference data in the cache ➡Put long lived in the cache. ➡Consider frequency of mutability of data ➡Put highly used data in cache ➡Increase the size of the cache. Today you can create TB sized caches 10
  • 11. 11 Problems to Consider • Standalone Caches and the N * problem – As each entry expires, the backing system gets N requests for data where n is the number of standalone caches. Solution: Use a distributed cache • Consistency with the System of Record – How to keep the cache in sync with changes in a backing system. Solution: Match mutability of data with data safety configuration. Update the cache and backing store at the same time. • Consistency with other cache nodes – How to keep all cache nodes in sync: Solution: Use a distributed cache and match consistency configuration with data mutability 11
  • 13. Java Caching (JCache) • What? – Java Caching (JCache) standardized Caching for the Java Platform* – A common mechanism to create, access, update and remove information from Caches • How? – JSR-107: Java Caching Specification (JCache) – Java Community Process (JCP) 2.9
  • 14. Java Caching (JCache) • Why? – Standardize! Standardize! Standardize! • Core Caching Concepts • Core Caching API – Provide application portability between Caching solutions • Big & Small, Open & Commercial – Caching is ubiquitous!
  • 15. Java Caching (Jcache) When? Item Date JCache Final Spec Released 18 March 2014 Spring 4.1 September 2014 Hazelcast 3.3.1 TCK Compliant September 2014 Hazelcast 3.4 (with High-Density Memory Store) November 2014 Hazelcast 3.6 (with High-Density Caching) July 2015
  • 16. Implementations • Implementations – JCache Reference Implementation – Hazelcast – Oracle Coherence – Terracotta Ehcache – Infinispan – GridGain – TayzGrid • Keep Track – https://jcp.org/aboutJava/communityprocess/implementati ons/jsr107/index.html 16
  • 17. Java Caching (JCache) • Which Platform?
  • 18. Java Caching (JCache) Project Hosting – JCP Project: • http://jcp.org/en/jsr/detail?id=107 – Source Code: • https://github.com/jsr107 – Forum: • https://groups.google.com/forum/?fromgroups#!forum /jsr107
  • 19. Java Caching (JCache) How to get it. Apache Maven: (via Maven Central Repository) <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> <version>1.0</version> </dependency>
  • 21. Caches and Caching JSR107 Cache Definition: A high-performance, low- latency data-structure* in which an application places a temporary copy of information that is likely to be used more than once
  • 22. Maps vs Cache APIs java.util.Map (Java 6/7) Key-Value Based API Supports Atomic Updates Entries Don’t Expire Entries Aren’t Evicted Entries Stored On-Heap Store-By-Reference javax.cache.Cache (Java 6) Key-Value Based API Supports Atomic Updates Entries May Expire Entries May Be Evicted Entries Stored Anywhere (ie: topologies) Store-By-Value and Store-By- Reference Supports Integration (ie: Loaders / Writers) Supports Observation (ie: Listeners) Entry Processors Statistics
  • 23. JCache: Features • java.util.ConcurrentMap like API • Atomic Operations • Lock-Free • Read-Through / Write-Through Integration Support • Cache Event Listeners • Fully Generic API = type-safety • Statistics • Annotations (for frameworks and containers) • Store-By-Value semantics (optional store-by-reference)
  • 24. JCache: Features • Topology Agnostic – Topologies not defined or restricted by the specification • Efficiently supports: – “local” in-memory Caching and – “distributed” server-based Caching
  • 26. JCache: Runtime Structure Caching “service loader” CachingProvider “SPI implementation” CacheManager “manager of caches” Cache “interface to a Cache” Loads & Tracks * * * Created & Managed By Created & Managed By “application” Uses.. *
  • 27. JCache: Cache Managers javax.cache.CacheManager • Establishes, configures, manages and owns named Caches – Caches may be pre-define or dynamically created at runtime • Provides Cache infrastructure and resources • Provides Cache “scoping” (say in a Cluster) • Provides Cache ClassLoaders (important for store-by-value) • Provides Cache lifecycle management
  • 28. JCache: Hello World (via a Cache Manager) // acquire the default CacheManager CacheManager manager = Caching.getCacheManager(); // acquire a previously configured cache (via CacheManager) Cache<Integer, String> cache = manager.getCache(“my-cache”, Integer.class, String.class); // put something in the cache cache.put(123, “Hello World”); // get something from the cache String message = cache.get(123);
  • 29. Cache Interface & Methods (in IDE)
  • 30. JCache: Entry Processors (custom atomic operations for everyone!) // acquire a cache Cache<String, Integer> cache = manager.getCache(“my-cache”, String.class, Integer.class); // increment a cached value by 42, returning the old value int value = cache.invoke(“key”, new IncrementProcessor<>(), 42);
  • 31. JCache: Entry Processors (custom atomic operations for everyone!) public class IncrementProcessor<K> implements EntryProcessor<K, Integer, Integer>, Serializable { @Override public Integer process(MutableEntry<K, Integer> entry, Object... arguments) { if (entry.exists()) { int amount = arguments.length == 0 ? 1 : (Integer)arguments[0]; int current = entry.getValue(); entry.setValue(count + amount); return current; } else { throw new IllegalStateException(“no entry exists”); } }
  • 32. JCache: Entry Processors (custom atomic operations for everyone!) • Eliminate Round-Trips! (in distributed systems) • Enable development of a Lock-Free API! (simplifies applications) *May need to be Serializable (in distributed systems) Cache Application Cache Application
  • 33. JCache: Entry Processors Which is better? // using an entry processor? int value = cache.invoke(“key”, new IncrementProcessor<>(), 42); // using a lock based API? cache.lock(“key”); int current = cache.get(“key”); cache.put(“key”, current + 42); cache.unlock(“key”);
  • 34. Annotations • JSR107 introduces a standardized set of caching annotations, which do method level caching interception on annotated classes running in dependency injection containers. • Caching annotations are becoming increasingly popular: –Ehcache Annotations for Spring –Spring 3’s caching annotations. • JSR107 Annotations will be added to: –Java EE 8 (planned?) –Spring 4.1 (released)
  • 35. Annotation Operations • The JSR107 annotations cover the most common cache operations: • @CacheResult • @CachePut • @CacheRemove • @CacheRemoveAll
  • 36. Fully Annotated Class Example @CacheDefaults(cacheName = "blogManager") public class BlogManager { @CacheResult public Blog getBlogEntry(String title) {...} @CacheRemove public void removeBlogEntry(String title) {...} @CacheRemoveAll public void removeAllBlogs() {...} @CachePut public void createEntry(@CacheKey String title, @CacheValue Blog blog) {...} @CacheResult public Blog getEntryCached(String randomArg, @CacheKey String title){...} }
  • 37. Specific Overrides public class DomainDao { @CachePut(cacheName="domainCache") public void updateDomain(String domainId, @CacheKey int index, @CacheValue Domain domain) { ... } }
  • 38. The Future? • JCache 1.1 (2015) – Maintenance Release being worked on • JCache 2.0 (2016-) – Java 8 Language Features (Lambda & Streams) – Servlet 4.0 Integration / Session Caching? – Java EE 8 Alignment? • JCache 3.0 (2017?) – Java 10 Language Features? 38
  • 40. Hazelcast JCache Support • Full implementation for: – Hazelcast.newHazelcastInstance() – HazelcastClient.newHazelcastClient() • TCK Compliant • JCache with Hi-Density Memory Store • Docs: http://docs.hazelcast.org/docs/latest- dev/manual/html-single/hazelcast- documentation.html#jcache-overview
  • 42. Or Download • Download from hazelcast.org/download • Maven: <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast</artifactId> <version>3.5.4</version> </dependency>
  • 43. QUESTIONS? 43 • Greg Luck – (@gregrluck) – greg@hazelcast.com