reactive programming met java 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
![Page 1: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/2.jpg)
Agenda
● Context
● Sequence, zonder futures
● Futures
● CompletableFuture
● Round-up
![Page 3: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/3.jpg)
Context
Our responsiblity
![Page 4: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/4.jpg)
@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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/5.jpg)
Customer
Contract
Communications
TIME
Sequential
![Page 6: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/6.jpg)
A Future
represents
the result
of an
asynchronous computation
![Page 7: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/8.jpg)
![Page 9: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/9.jpg)
Customer
Contract
Communications
TIME
Sequential
Futures
![Page 10: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/10.jpg)
![Page 11: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/12.jpg)
![Page 13: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/14.jpg)
Chaining methods
runthenAcceptthenApply
thenComposewhenComplete
![Page 15: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/15.jpg)
Joining methods
runAfterBoththenAcceptBoththenCombine...
allOf
![Page 16: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/16.jpg)
Model the flow
![Page 17: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/17.jpg)
![Page 18: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/18.jpg)
Customer
Contract
Communications
TIME
Sequential
Futures
Completable Futures
![Page 19: Reactive programming met Java 8 en Java EE 7 - Martijn Blankestijn](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052622/5594458f1a28ab13738b45a6/html5/thumbnails/20.jpg)