@payara_fish High-Performance Java EE with JCache and CDI Steve Millidge - Founder Payara Jaromir Hamala – Hazelcast
@payara_fish What are we going to talk about?
@payara_fish Imagine!
@payara_fish Pizza Architecture PizzaStoreConnector (3rd Party API) PizzaStoreBackEnd (3rd Party Application) Wet String Protocol JAX-RS Mobile Interface Projected 50K Users
@payara_fish Pizza Store Model Customer Address Order OrderItemPizza Store
@payara_fish Pizza Connector Code
@payara_fish Pizza Connector Problems • High Latency • Multiple API round trips – Over Wet String • Wrong Data Model • Simply won’t scale to user volumes • Too costly to rewrite Recognize the Problem!
@payara_fish How do you speed it up? JCACHE JavaTM Temporary Caching API
@payara_fish Quick Cache Code
@payara_fish Beers All Round
@payara_fish What Just Happened?
@payara_fish JCACHE • Standard Java API for Caching – JSR107 • API and CDI binding • Supported by Many Cache Providers • Built in to Payara – Uses Hazelcast
@payara_fish Caching Concepts Caching Provider Cache Manager Cache Entry Key Value • CachingProvider – Retrieves and closes Cache Managers • CacheManager – Creates and destroys caches • Cache – Contains Objects in Key Value Pairs
@payara_fish Magic Behind @CacheResult • CDI Interceptor provided by Payara • Obtains CacheManager from CachingProvider • Creates Cache Name (Based on Method) • Looks up Cache in CacheManager • Takes Method Parameter Values and creates Cache Key • Does Cache.get before invoking method • If not in cache invokes method and does cache.put on the result.
@payara_fish CachingProvider cp = Caching.getCachingProvider(); CacheManager cm = cp.getCacheManager(); MutableConfiguration<String, Stock> config = new MutableConfiguration<>(); config.setStoreByValue(true) .setTypes(String.class,String.class) .setManagementEnabled(true) .setStatisticsEnabled(true); Cache<String, String> cache = cm.createCache(“PizzaCache", config); String key = createKey(); Cache.put(“Key”,methodCall())
@payara_fish Further CDI • @CacheResult – Caches the result of a method call • @CachePut – Cache a specific method parameter • @CacheRemove – Removes a cache entry based on parameters • @CacheRemoveAll – Removes all entries in the cache
@payara_fish What is Hazelcast • Distributed implementation of j.u.Colections inside a single jar • Distributed computing Swiss Army Knife • JCache Implementation And Much More!
@payara_fish What is Payara Micro • Small Footprint GlassFish based Runtime • Supports Java WAR deployments • Embeds JCache Support • Auto clusters using Hazelcast • Fully Embeddable API java –jar payara-micro.jar –deploy test.war
@payara_fish Payara Micro and Hazelcast • Embeds Hazelcast for Session Persistence • Enables Java EE developers to use JSR107 of raw Hazelcast api • Provides CDI annotations for Hazelcast • Supports Full Hazelcast API
@payara_fish Payara CDI Extensions @NamedCache(cacheName = "cache”) @Inject Cache @Inject CacheManager @Inject HazelcastInstance
@payara_fish Clustering Demo
@payara_fish Beyond the Specification
@payara_fish Summary • Using JCache on Payara is simple • Hazelcast api is built in • JCache and CDI are built in • Build micro-services with distributed caching on Payara Embedded • Hazelcast Provides Performance, Resilience and Scalability
@payara_fish More Info • http://www.payara.co – Payara information and downloads • https://github.com/payara/Payara – Payara Development • http://www.hazelcast.com • GET Hazelcast • https://github.com/smillidge/JCacheWebinar • Code from this talk • https://github.com/payara/Payara- Examples/tree/master/JCache-Examples • Further JCache on Payara Examples

High Performance Java EE with JCache and CDI