35

#GeodeSummit - Spring Data GemFire API Current and Future

Embed Size (px)

Citation preview

Page 1: #GeodeSummit - Spring Data GemFire API Current and Future
Page 2: #GeodeSummit - Spring Data GemFire API Current and Future

2© 2014 Pivotal Software, Inc. All rights reserved. 2© 2014 Pivotal Software, Inc. All rights reserved.

Spring Data GemFire API Current and FutureJohn Blum - @john_blum

© 2015 - Pivotal Software, Inc.

Page 3: #GeodeSummit - Spring Data GemFire API Current and Future

3© 2014 Pivotal Software, Inc. All rights reserved.

Presenter

John BlumSpring Data Team (formerly a GemFire Engineer/Tech Lead)Spring Data GemFire Project LeadApache Geode Committer

Responsibilities…

• Management & Monitoring (Gfsh)

• Management REST API

• Developer REST API

• Spring Data GemFire (v1.3.3 – current)

Page 4: #GeodeSummit - Spring Data GemFire API Current and Future

4© 2014 Pivotal Software, Inc. All rights reserved.

Agenda Spring Data GemFire API

– Configuration / Bootstrapping– Data Access (DAO patterns)– Function Execution– Caching (JSR-107)

Spring Data GemFire Future– Spring Data Geode?

Conclusion QA

Page 5: #GeodeSummit - Spring Data GemFire API Current and Future

5© 2014 Pivotal Software, Inc. All rights reserved.

“Simple things should be simple; complex things should be possible”

– Alan Kay

Page 6: #GeodeSummit - Spring Data GemFire API Current and Future

6© 2014 Pivotal Software, Inc. All rights reserved.

Spring Data GemFire (SDG)Applies Spring's powerful, non-invasive programming model in a consistent fashion to simplify configuration and development of Apache Geode applications.

Spring Ecosystem Integration…– Spring Cache Abstraction / Transaction Management– Spring Data Commons Repository Abstraction + REST– Spring Integration (Inbound/Outbound Channel Adapters)– Spring Session Data GemFire Adapter– Spring XD (Sources & Sinks)

Page 7: #GeodeSummit - Spring Data GemFire API Current and Future

7© 2014 Pivotal Software, Inc. All rights reserved.

+ +

Apache Geode with Spring Data GemFire and Spring’s Cache Abstraction is a JSR-107 (JCache) caching provider

Page 8: #GeodeSummit - Spring Data GemFire API Current and Future

8© 2014 Pivotal Software, Inc. All rights reserved.

GRAILS

Full-stack, Web

XD

Stream, Taps, Jobs

BOOT

Bootable, Minimal, Ops-Ready

Big, Fast,

FlexibleData Web,

Integration,Batch

WEB

Controllers, REST,WebSocket

INTEGRATION

Channels, Adapters,Filters, Transformers

BATCH

Jobs, Steps,Readers, Writers

BIG DATA

Ingestion, Export,Orchestration, Hadoop

DATA

NON-RELATIONALRELATIONAL

CORE

GROOVYFRAMEWORK SECURITY REACTOR

Page 9: #GeodeSummit - Spring Data GemFire API Current and Future

9© 2014 Pivotal Software, Inc. All rights reserved.

Spring Data GemFire Use Cases

Configure & Bootstrap Apache Geode– Replacement for cache.xml; Can be used with Cluster Configuration

Build an Application Peer Cache (Cache)– Embedded Cache

Build an Application Cache Client (ClientCache)– Client/Server

Page 10: #GeodeSummit - Spring Data GemFire API Current and Future

10© 2014 Pivotal Software, Inc. All rights reserved.

Spring Data GemFire / Apache Geode Coordinates

<repository> <id>spring-libs-snapshot</id> <name>Spring Maven libs-snapshot Repository</name> <url>https://repo.spring.io/libs-miletone</url></repository>

<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-gemfire</artifactId> <version>1.7.0.APACHE-GEODE-EA-M1</version></dependency>

Page 11: #GeodeSummit - Spring Data GemFire API Current and Future

11© 2014 Pivotal Software, Inc. All rights reserved.

Spring-based Configuration

XML Java-based Configuration

Page 12: #GeodeSummit - Spring Data GemFire API Current and Future

12© 2014 Pivotal Software, Inc. All rights reserved.

Bootstrapping Apache Geode with Spring

@SpringBootApplication@ImportResource("/spring-gemfire-context.xml")public class SpringGemFireApplication { public static void main(String[] args) { SpringApplication.run(SpringGemFireApplication.class, args); }}

gfsh>start server -–name=Example --spring-xml-location= <classpath-to-spring-application-context.xml>

Page 13: #GeodeSummit - Spring Data GemFire API Current and Future

13© 2014 Pivotal Software, Inc. All rights reserved.

Example

Page 14: #GeodeSummit - Spring Data GemFire API Current and Future

14© 2014 Pivotal Software, Inc. All rights reserved.

Data Access with Spring

Basic (Region) Data Access Object (DAO)…

@Repositorypublic class GolferDao extends DaoSupport {

@Resource(name = “Golfers”) private Region<Long, Golfer> golfers;

…}

Page 15: #GeodeSummit - Spring Data GemFire API Current and Future

15© 2014 Pivotal Software, Inc. All rights reserved.

Data Access with SDG GemfireTemplate

Advantages Simple, Convenient Data Access API (CRUD, OQL, Function)

Protects developer from GemFire/Geode API changes

Exception Translation into Spring DAO Exception Hierarchy

Transaction Management

<bean id=“golfersTemplate” class=“org.springframework.data.gemfire.GemfireTemplate” p:region-ref=“Golfers”/>

Page 16: #GeodeSummit - Spring Data GemFire API Current and Future

16© 2014 Pivotal Software, Inc. All rights reserved.

Data Access with Spring Data Repositories

Advantages Simple interface-based, Spring Data Repository definition (CRUD, Querying)

Convention over Configuration (Querying)

Portable

Exception Translation & Transaction Management Support

public interface GolferRepository extends CrudRepository<Golfer, Long> {

List<Golfer> findByName(String name);

}

Page 17: #GeodeSummit - Spring Data GemFire API Current and Future

17© 2014 Pivotal Software, Inc. All rights reserved.

Example

Page 18: #GeodeSummit - Spring Data GemFire API Current and Future

18© 2014 Pivotal Software, Inc. All rights reserved.

Annotation-based Function SupportSpring Data GemFire introduces annotation support for Function implementation and execution.

Functions are implemented as POJO methods

Functions are invoked using Object-Oriented method invocation.

SDG supports…

@OnServer / @OnServers (from client only)

@OnMember / @OnMembers (from peer only)

@OnRegion (from either client or peer)

Page 19: #GeodeSummit - Spring Data GemFire API Current and Future

19© 2014 Pivotal Software, Inc. All rights reserved.

Annotation-based Function Implementationpackage example.app.function;

@Componentclass CustomerFunctions {

@GemfireFunction public Customer update(Address address, PhoneNumber phoneNumber) { … }

@GemfireFunction(id = “MyFunction” HA=true) public List<?> functionTwo(FunctionContext funcCtx, @Filter Set<?> keys, …) { … }

}

<gfe:annotation-driven/>

<!– optional when using <context:annotation-config> or <context:component-scan> --><bean class=“example.app.function.CustomerFunctions”/>

Page 20: #GeodeSummit - Spring Data GemFire API Current and Future

20© 2014 Pivotal Software, Inc. All rights reserved.

Annotation-based Function Executionpackage example.app.function.executions;

@OnRegion(“Customers”)interface CustomersFunctionExecution { Customer update(Address address, PhoneNumber phoneNumber);}

<gfe-data:function-executions base-package=“example.app.function.executions”/>

@Componentclass ApplicationComponent { @Autowired private CustomersFunctionExecution customersFunction;

public Customer someMethod(Address address, PhoneNumber phoneNumber) { return customersFunction.update(address, phoneNumber); }

Page 21: #GeodeSummit - Spring Data GemFire API Current and Future

21© 2014 Pivotal Software, Inc. All rights reserved.

Example

Page 22: #GeodeSummit - Spring Data GemFire API Current and Future

22© 2014 Pivotal Software, Inc. All rights reserved.

Spring Cache Abstraction

Caching is useful in cases when an “expensive” operation (i.e. CPU, IO bound) produces the same output given identical input; results can be reused.

Spring enables Declarative, Annotation-based Caching…

@Cacheable – triggers cache population

@CacheEvict – triggers cache eviction

@CachePut – updates cache without interfering with method execution

@Caching – groups multiple cache operations per method

@CacheConfig – class-level cache-related settings

Page 23: #GeodeSummit - Spring Data GemFire API Current and Future

23© 2014 Pivotal Software, Inc. All rights reserved.

Spring Supports JSR-107 (JCache)

Spring JCache@Cacheable @CacheResult

@CachePut @CachePut

@CacheEvict @CacheRemove

@CacheEvict(allEntries=true) @CacheRemoveAll

@CacheConfig @CacheDefaults

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#cache-jsr-107

Page 24: #GeodeSummit - Spring Data GemFire API Current and Future

24© 2014 Pivotal Software, Inc. All rights reserved.

Apache Geode Caching Provider@Configuration@EnableCaching@Import(GemFireConfiguration.class)class ApplicationConfiguration {

@Bean public CacheManager cacheManager( Cache gemfireCache) {

GemfireCacheManager cacheManager = new GemfireCacheManager();

cacheManager.setCache(gemfireCache);

return cacheManager; }}

<beans … xmlns:cache=“http://www.springframework.org/schema/cache”…>

<gfe:cache properties-ref="gemfireProperties"/>

<cache:annotation-driven/>

<bean id="cacheManager" class= ”o.s.data.gemfire.support.GemfireCacheManager"

p:cache-ref="gemfireCache"/>

Page 25: #GeodeSummit - Spring Data GemFire API Current and Future

25© 2014 Pivotal Software, Inc. All rights reserved.

Apache Geode Caching Example@Serviceclass BookService {

@Autowired private BookRepository bookRepository;

@Cacheable(value=“Books”, key=“#isbn”) public Book findBook(String isbn, …) { return bookRepository.findOne(isbn); }}

Page 26: #GeodeSummit - Spring Data GemFire API Current and Future

26© 2014 Pivotal Software, Inc. All rights reserved.

Example

Page 27: #GeodeSummit - Spring Data GemFire API Current and Future

27© 2014 Pivotal Software, Inc. All rights reserved.

Spring Data GemFire Road Map

Spring Data Geode?

Planned…• SGF-372 – Geode Off-Heap support

• SGF-401 – Geode-Spark Connector support

• SGF-402 – Geode-Lucene Connector support

• SGF-428 – Geode HDFS support

• SGF-451 – Context-Aware Repositories (Functions)

• SGF-452 – Function Execution from Repositories.

• SGF-453 – Annotation Support for Geode Callbacks (e.g. CacheListener)

Page 28: #GeodeSummit - Spring Data GemFire API Current and Future

28© 2014 Pivotal Software, Inc. All rights reserved.

Conclusion

Page 29: #GeodeSummit - Spring Data GemFire API Current and Future

29© 2014 Pivotal Software, Inc. All rights reserved.

Apache Geode References Project Page - http://geode.incubator.apache.org

Contribute - http://geode.incubator.apache.org/contribute/– Ideas - https://cwiki.apache.org/confluence/display/GEODE/How+to+Contribute

Community Events - http://geode.incubator.apache.org/community/

Documentation - http://geode.incubator.apache.org/docs/– Docs Project - https://github.com/project-geode/docs

Source Code - https://github.com/apache/incubator-geode

JIRA - https://issues.apache.org/jira/browse/GEODE

StackOverflow - http://stackoverflow.com/questions/tagged/gemfire+and+geode

Page 30: #GeodeSummit - Spring Data GemFire API Current and Future

30© 2014 Pivotal Software, Inc. All rights reserved.

Spring Data GemFire References Project Page - http://projects.spring.io/spring-data/

Documentation –– Reference Guide - http://docs.spring.io/spring-data-gemfire/docs/current/reference/html/– API - http://docs.spring.io/spring-data-gemfire/docs/current/api/– Spring IO Guides - http://spring.io/guides– Spring GemFire Examples –

Source Code - https://github.com/spring-projects/spring-data-gemfire

Examples - https://github.com/spring-projects/spring-gemfire-examples

JIRA – https://jira.spring.io/browse/SGF

StackOverflow - http://stackoverflow.com/questions/tagged/spring-data-gemfire

Page 31: #GeodeSummit - Spring Data GemFire API Current and Future

31© 2014 Pivotal Software, Inc. All rights reserved.

Other Spring GemFire/Geode Examples Effective Application Development with GemFire/Geode using Spring Data GemFire –

SpringOne2GX-2014 Dallas TX.– Slides: https://github.com/jxblum/effective-spring-gemfire/blob/master/EffectiveApplicationDevelopmentWithGemfireUsingSpringDataGemFire.pdf

– Source Code: https://github.com/jxblum/effective-spring-gemfire

Building Highly-Scalable Spring Applications with Apache Geode – SpringOne2GX-2015 Washington D.C.

– Slides: http://www.slideshare.net/john_blum/building-highly-scalable-spring-applications-using-inmemory-data-grids– Source Code: https://github.com/jxblum/scalable-spring-gemfire

Spring – GemFire/Geode Using Cluster Configuration Examples– Source Code: https://github.com/jxblum/spring-gemfire-clusterconfiguration-examples

GemFire or Geode Client/Server Configuration with Spring Examples– Source Code: https://github.com/jxblum/pivotal-gemfire-clientserver-examples

Page 32: #GeodeSummit - Spring Data GemFire API Current and Future

Join the Apache Geode Community!• Check out: http://geode.incubator.apache.org

• Subscribe: [email protected]

• Download: http://geode.incubator.apache.org/releases/

Page 33: #GeodeSummit - Spring Data GemFire API Current and Future

33© 2014 Pivotal Software, Inc. All rights reserved. 33© 2014 Pivotal Software, Inc. All rights reserved.

Q&AAny questions…

Page 34: #GeodeSummit - Spring Data GemFire API Current and Future

34© 2014 Pivotal Software, Inc. All rights reserved. 34© 2014 Pivotal Software, Inc. All rights reserved.

Thank You

Page 35: #GeodeSummit - Spring Data GemFire API Current and Future