Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1
Java Caching:
State of the Union
Brian Oliver | Oracle Corporation
Greg Luck | Terracotta
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3
Program Agenda
§  Java Caching (JCache), JSR-107 an...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4
The following is intended to outline our general pro...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5
Java Caching (JCache)
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6
Java Caching (JCache)
§  What?
–  Java Caching (JCa...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7
Java Caching (JCache)
§  Why?
–  Standardize! Stand...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8
Java Caching (JCache)
§  Who?
–  Joint Specificatio...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9
Java Caching (JCache)
§  When? (A Proposed Timetabl...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10
Java Caching (JCache)
§  Which Platform?
JCache De...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11
Java Caching (JCache)
–  JCP Project:
§  http://jc...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12
Java Caching (JCache)
Apache Maven: (via Maven Cent...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13
Caches and Caching
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14
Caches and Caching
§  Cache: A high-performance, l...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15
Caches and Caching
§  Implications?
–  Caching is ...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16
Caches and Caching: Maps v’s Cache APIs
Maps
§  Ke...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17
JCache: More than your
average Cache!
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18
JCache: Features
§  java.util.ConcurrentMap like A...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19
JCache: Features
§  Topology Agnostic
–  Topologie...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20
JCache: G’day World
// acquire a previously configu...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21
API In Depth
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22
JCache: Cache API
public interface Cache<K, V>
exte...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23
JCache: Cache API
void put(K key, V value);
V getAn...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24
JCache: Cache API
boolean replace(K key, V oldValue...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25
JCache: Cache API
void registerListener(
CacheEntry...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26
JCache: Cache API
<T> T invoke(K key,
EntryProcesso...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27
JCache: Cache API
String getName();
CacheManager ge...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28
JCache: Cache Managers
§  Establishes, configures,...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29
JCache: G’day World
// acquire the default CacheMan...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30
JCache: Runtime Structure
Caching
“service loader”
...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31
JCache: Gudday World
MutableConfiguration<Integer, ...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32
JCache: Gudday World
// acquire the default CacheMa...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33
Entry Processors
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34
JCache: Entry Processors
// acquire a cache
Cache<S...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35
JCache: Entry Processors
public class IncrementProc...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36
JCache: Entry Processors
§  Eliminate Round-Trips!...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37
JCache: Entry Processors
// using an entry processo...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38
3
8
Annotations
§  JSR107 introduces a standardize...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39
3
9
Annotation Operations
§  The JSR107 annotation...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40
4
0
Fully Annotated Class Example
@CacheDefaults(ca...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41
4
1
Specific Overrides
public class DomainDao {
@Ca...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42
Announcements
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43
Fully Compliant JCache early 2014.
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44
Oracle Coherence
Fully Compliant JCACHE in 2014
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45
Graphic Section Divider
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46
The preceding is intended to outline our general pr...
Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47
Upcoming SlideShare
Loading in...5
×

JSR107 State of the Union JavaOne 2013

196

Published on

www.hazelcast.com

Published in: Software, Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
196
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

JSR107 State of the Union JavaOne 2013

  1. 1. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.1
  2. 2. Java Caching: State of the Union Brian Oliver | Oracle Corporation Greg Luck | Terracotta
  3. 3. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.3 Program Agenda §  Java Caching (JCache), JSR-107 and Caching §  JCache: More than your average Cache! §  JCache: By Example §  Available Implementations?
  4. 4. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.4 The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle.
  5. 5. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.5 Java Caching (JCache)
  6. 6. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.6 Java Caching (JCache) §  What? –  Java Caching (JCache) is an effort to standardize 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
  7. 7. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.7 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!
  8. 8. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.8 Java Caching (JCache) §  Who? –  Joint Specification (LEADS) §  Greg Luck §  Brian Oliver (Oracle Corporation) –  Expert Group (EG) §  10+ companies §  8+ individuals
  9. 9. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.9 Java Caching (JCache) §  When? (A Proposed Timetable) Deliverable Start Finish Public Review Ballot ✔ 27th August 2013 9th September 2013 Proposed Final Draft 30th September 2013 Completion of Reference Implementation (RI) & Technology Compatibility Kit (TCK) 31st October 2013 Appeal Ballot (7 days) 31st October 2013 7th November 2013 Updated Deliverables 7th November 2013 14th November 2013 Final Approval Ballot 14th November 2013 28th November 2013 Final Release 28th November 2013 12th December 2013
  10. 10. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.10 Java Caching (JCache) §  Which Platform? JCache Deliverable Target Platform Specification (SPEC) Java 6+ (SE or EE) Reference Implementation (RI) Java 7+ (SE or EE) Technology Compatibility Kit (TCK) Java 7+ (SE or EE) Demos and Samples Java 7+ (SE or EE)
  11. 11. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.11 Java Caching (JCache) –  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 Project Hosting
  12. 12. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.12 Java Caching (JCache) Apache Maven: (via Maven Central Repository) <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> <version>0.10</version> </dependency> How to get it.
  13. 13. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.13 Caches and Caching
  14. 14. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.14 Caches and Caching §  Cache: 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 §  When To Use Caches? –  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
  15. 15. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.15 Caches and Caching §  Implications? –  Caching is not a cure all! –  Developers must know the costs (time and resources) to determine Cache effectiveness
  16. 16. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.16 Caches and Caching: Maps v’s Cache APIs Maps §  Key-Value Based API §  Supports Atomic Updates §  Entries Don’t Expire §  Entries Aren’t Evicted §  Entries Stored On-Heap Caches §  Key-Value Based API §  Supports Atomic Updates §  Entries May Expire §  Entries May Be Evicted §  Entries Stored Anywhere (i.e.: topologies) §  Support Integration (through Loaders / Writers) §  Support Listeners (observer pattern) §  Entry Processors §  Statistics Caches are not Maps!
  17. 17. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.17 JCache: More than your average Cache!
  18. 18. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.18 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)
  19. 19. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.19 JCache: Features §  Topology Agnostic –  Topologies not defined or restricted by the specification §  Efficiently supports: –  “local” in-memory Caching and –  “distributed” server-based Caching
  20. 20. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.20 JCache: G’day World // acquire a previously configured cache Cache<Integer, String> cache = Caching.getCache(“my-cache”, Integer.class, String.class); // put something in the cache cache.put(123, “G’day World”); // get something from the cache String message = cache.get(123);
  21. 21. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.21 API In Depth
  22. 22. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.22 JCache: Cache API public interface Cache<K, V> extends Iterable<Cache.Entry<K, V>> { V get(K key); Map<K, V> getAll(Set<? extends K> keys); boolean containsKey(K key); void loadAll(Set<? extends K> keys, CompletionListener l); ... (does not extend Map!)
  23. 23. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.23 JCache: Cache API void put(K key, V value); V getAndPut(K key, V value); void putAll(Map<? extends K, ? extends V> map); boolean putIfAbsent(K key, V value); boolean remove(K key); boolean remove(K key, V oldValue); V getAndRemove(K key);
  24. 24. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.24 JCache: Cache API boolean replace(K key, V oldValue, V newValue); boolean replace(K key, V value); V getAndReplace(K key, V value); void removeAll(Set<? extends K> keys); void removeAll(); void clear(); Configuration<K, V> getConfiguration();
  25. 25. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.25 JCache: Cache API void registerListener( CacheEntryListenerConfiguration<K, V> config); void unregisterListener( CacheEntryListenerConfiguration<K, V> config);
  26. 26. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.26 JCache: Cache API <T> T invoke(K key, EntryProcessor<K, V, T> processor, Object... arguments); <T> Map<K, T> T invokeAll(Set<? Extends K> keys, EntryProcessor<K, V, T> processor, Object... arguments);
  27. 27. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.27 JCache: Cache API String getName(); CacheManager getCacheManager(); }
  28. 28. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.28 JCache: Cache Managers §  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 javax.cache.CacheManager
  29. 29. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.29 JCache: G’day World // 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, “G’day World”); // get something from the cache String message = cache.get(123); (via a Cache Manager)
  30. 30. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.30 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.. *
  31. 31. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.31 JCache: Gudday World MutableConfiguration<Integer, String> config = new MutableConfiguration<Integer, String>() .setStoreByReference(true) .setCacheEntryExpiryPolicy( new AccessedExpiryPolicy(5, TimeUnit.SECONDS)); (using programmatic configuration – fluent style)
  32. 32. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.32 JCache: Gudday World // acquire the default CacheManager CacheManager manager = Caching.getCacheManager(); // create cache with a custom configuration Cache<Integer, String> cache = manager.createCache(“my-cache”, config); // and perhaps later just… Cache<Integer, String> cache = manager.getCache(“my-cache”, Integer.class, String.class); (using programmatic configuration – fluent style)
  33. 33. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.33 Entry Processors
  34. 34. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.34 JCache: Entry Processors // 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); (custom atomic operations for everyone!)
  35. 35. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.35 JCache: Entry Processors 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”); } } (custom atomic operations for everyone)
  36. 36. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.36 JCache: Entry Processors §  Eliminate Round-Trips! (in distributed systems) §  Enable development of a Lock-Free API! (simplifies applications) §  *May need to be Serializable (in distributed systems) (custom atomic operations!) Cache Application Cache Application
  37. 37. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.37 JCache: Entry Processors // 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”); Which is better?
  38. 38. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.38 3 8 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 –  Spring 4 (2014) 38  
  39. 39. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.39 3 9 Annotation Operations §  The JSR107 annotations cover the most common cache operations: § @CacheResult § @CachePut § @CacheRemove § @CacheRemoveAll 39  
  40. 40. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.40 4 0 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){...} } 40  
  41. 41. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.41 4 1 Specific Overrides public class DomainDao { @CachePut(cacheName="domainCache") public void updateDomain(String domainId, @CacheKey int index, @CacheValue Domain domain) { ... } } 41  
  42. 42. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.42 Announcements
  43. 43. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.43 Fully Compliant JCache early 2014.
  44. 44. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.44 Oracle Coherence Fully Compliant JCACHE in 2014
  45. 45. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.45 Graphic Section Divider
  46. 46. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.46 The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle.
  47. 47. Copyright © 2013, Oracle and/or its affiliates. All rights reserved.47
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×