Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

20
Reactive programming met Java SE 8 en Java EE 7 Martijn Blankestijn

description

Java SE 8 is een grote stap in de evolutie van het Java Platform. Java 8 introduceerde lambda's, een nieuwe Date-Time API en nog veel meer. Completable Futures is een nieuwe Java 8 feature die vaak over het hoofd wordt gezien. Completable Futures (a.k.a. promises) borduren verder op de bestaande Future API en maakt een asynchroon, non-blocking event-driven programmeermodel mogelijk. Deze sessie geeft een inkijk in de Completable Future API en plaatst deze in de context van het toenemend gebruik en interesse voor asynchroniciteit en 'reactive programming'. De live-demo's demonstreren hoe een traditionele service met 'vanilla' Java EE 7 API's zoals JAX-RS en JSON wordt omgevormd tot een 'pipeline' van (parallel uitgevoerde) operaties.

Transcript of Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Page 1: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Reactive programming met Java SE 8 en Java EE 7

Martijn Blankestijn

Page 2: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Agenda

● Context

● Sequence, zonder futures

● Futures

● CompletableFuture

● Round-up

Page 3: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Context

Our responsiblity

Page 4: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

@Path("customers") public class DemoOverviewResource {

@GET @Path("{username}") @Produces(APPLICATION_JSON) public CustomerOverview retrieve( @PathParam("username") String username) {

Customer customer = getCustomerInfo(username);

Contract[] contracts = getContracts(customer); Communication[] communications = getCommunications(customer);

return createOverview( customer, contracts, communications); }

Page 5: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Customer

Contract

Communications

TIME

Sequential

Page 6: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

A Future

represents

the result

of an

asynchronous computation

Page 7: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

public interface Future<V> {

boolean isDone();

V get()

V get(long timeout, TimeUnit unit)

Page 8: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Page 9: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Customer

Contract

Communications

TIME

Sequential

Futures

Page 10: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Page 11: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Reactive programmingis a programming paradigm

oriented around

data flows

and the

propagation of change

Page 12: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Page 13: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

CompletableFutureA Future that may be

explicitly completed

and may trigger actions

upon its completion.

Page 14: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Chaining methods

runthenAcceptthenApply

thenComposewhenComplete

Page 15: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Joining methods

runAfterBoththenAcceptBoththenCombine...

allOf

Page 16: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Model the flow

Page 17: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn
Page 18: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Customer

Contract

Communications

TIME

Sequential

Futures

Completable Futures

Page 19: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn

Links

● Demo: https://github.com/martijnblankestijn/reactive-rest-demo

● JAX-RS

● Completable Future

● ManagedExecutor: JSR 236 Concurrency Utilities for Java EE

● Reactive Manifesto

Page 20: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn