JSR107 State of the Union JavaOne 2013

47
Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

description

www.hazelcast.com

Transcript of JSR107 State of the Union JavaOne 2013

Page 1: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 1

Page 2: JSR107  State of the Union JavaOne 2013

Java Caching: State of the Union Brian Oliver | Oracle Corporation Greg Luck | Terracotta

Page 3: JSR107  State of the Union JavaOne 2013

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?

Page 4: JSR107  State of the Union JavaOne 2013

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.

Page 5: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 5

Java Caching (JCache)

Page 6: JSR107  State of the Union JavaOne 2013

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

Page 7: JSR107  State of the Union JavaOne 2013

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!

Page 8: JSR107  State of the Union JavaOne 2013

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

Page 9: JSR107  State of the Union JavaOne 2013

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

Page 10: JSR107  State of the Union JavaOne 2013

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)

Page 11: JSR107  State of the Union JavaOne 2013

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

Page 12: JSR107  State of the Union JavaOne 2013

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.

Page 13: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 13

Caches and Caching

Page 14: JSR107  State of the Union JavaOne 2013

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

Page 15: JSR107  State of the Union JavaOne 2013

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

Page 16: JSR107  State of the Union JavaOne 2013

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!

Page 17: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 17

JCache: More than your average Cache!

Page 18: JSR107  State of the Union JavaOne 2013

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)

Page 19: JSR107  State of the Union JavaOne 2013

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

Page 20: JSR107  State of the Union JavaOne 2013

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);

Page 21: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 21

API In Depth

Page 22: JSR107  State of the Union JavaOne 2013

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!)

Page 23: JSR107  State of the Union JavaOne 2013

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);

Page 24: JSR107  State of the Union JavaOne 2013

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();

Page 25: JSR107  State of the Union JavaOne 2013

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);

Page 26: JSR107  State of the Union JavaOne 2013

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);

Page 27: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 27

JCache: Cache API

String getName();

CacheManager getCacheManager(); }

Page 28: JSR107  State of the Union JavaOne 2013

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

Page 29: JSR107  State of the Union JavaOne 2013

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)

Page 30: JSR107  State of the Union JavaOne 2013

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..

*

Page 31: JSR107  State of the Union JavaOne 2013

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)

Page 32: JSR107  State of the Union JavaOne 2013

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)

Page 33: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 33

Entry Processors

Page 34: JSR107  State of the Union JavaOne 2013

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!)

Page 35: JSR107  State of the Union JavaOne 2013

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)

Page 36: JSR107  State of the Union JavaOne 2013

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

Page 37: JSR107  State of the Union JavaOne 2013

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?

Page 38: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 38 38

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  

Page 39: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 39 39

Annotation Operations

§ The JSR107 annotations cover the most common cache operations:

§ @CacheResult § @CachePut § @CacheRemove § @CacheRemoveAll

39  

Page 40: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 40 40

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  

Page 41: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 41 41

Specific Overrides

public class DomainDao {

@CachePut(cacheName="domainCache")

public void updateDomain(String domainId,

@CacheKey int index,

@CacheValue Domain domain) {

...

}

}

41  

Page 42: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 42

Announcements

Page 43: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 43

Fully Compliant JCache early 2014.

Page 44: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 44

Oracle Coherence Fully Compliant JCACHE in 2014

Page 45: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 45

Graphic Section Divider

Page 46: JSR107  State of the Union JavaOne 2013

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.

Page 47: JSR107  State of the Union JavaOne 2013

Copyright © 2013, Oracle and/or its affiliates. All rights reserved. 47