reactive spring 5 - jug.uajug.ua/wp-content/uploads/2016/10/spring5.pdf · reactive java 8...

68
REACTIVE SPRING 5

Upload: others

Post on 16-Mar-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

REACTIVE

SPRING 5

Page 2: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

WHO AM I? • SE at Levi9

• 5+ dev experience

• Spring fan

/oleh.dokuka

/OlegDokuka

Page 3: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

AGENDA • Spring 5 Road-Map

• 5.0 M1-M4

• 5.0 RC1

• 5.X

• Q&A

• Reactive Spring

• Brief of history and problems

• Reactive-Streams Community

• Project Reactor

• Reactive Web

• Demo

• Q&A

Page 4: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

SPRING 5

ROAD MAP

Page 5: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1 JULY 2016

5.0 RC1 DECEMBER 2016

5.0 GA Q1 2017

FRAMEWORK

GENERATION

Page 6: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1 JULY 2016

5.0 RC1 DECEMBER 2016

5.0 GA Q1 2017

FRAMEWORK

GENERATION

Page 7: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

JDK 8+, Servlet API 3.1+, JPA 2.1+, JUnit

5

BASE LINE

Page 8: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1

Page 9: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1

• Constructor based instantiation

Class.newInstance()

Constructor.newInstance()

Page 10: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1

• Constructor based instantiation

• JMS 2.0

Page 11: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1

• Constructor based instantiation

• JMS 2.0

• Upgrade to JPA 2.1+ and Bean Validation 1.1+ (Hibernate ORM

5.0+, Hibernate Validator 5.0+, EclipseLink 2.5+)

Page 12: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M1

• Constructor based instantiation

• JMS 2.0

• Upgrade to JPA 2.1+ and Bean Validation 1.1+ (Hibernate ORM

5.0+, Hibernate Validator 5.0+, EclipseLink 2.5+)

• Reactive client and server HTTP adapters

Page 13: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M2

Page 14: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M2

• Support for RxJava 2

Page 15: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M2

• Support for RxJava 2

• New controller for Spring MVC using Lambda

Ratpack

Spring

Page 16: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M2

• Support for RxJava 2

• New controller for Spring MVC using Lambda

• Upgrade build to Gradle 3.0

Page 17: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M2

• Support for RxJava 2

• New controller for Spring MVC using Lambda

• Upgrade build to Gradle 3.0

• Reactive Web improvements

Page 18: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M3-M4

Page 19: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0 M3-M4

• Reactive Web improvements

• Reactive Web Socket

• JUnit 5 integration improvements

Page 20: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0-RC1

Page 21: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.0-RC1

• Spring Framework jars on the JDK 9 module path

Page 22: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

Page 23: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

• Spring MVC REST client

Page 24: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

• Spring MVC REST client

• JSR 365 (CDI 2.0) - new dependency injection API support

Page 25: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

• Spring MVC REST client

• JSR 365 (CDI 2.0) - new dependency injection API support

• Servlet 4.0

Page 26: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

• Spring MVC REST client

• JSR 365 (CDI 2.0) - new dependency injection API support

• Servlet 4.0

• JMS 2.1

Page 27: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

• Spring MVC REST client

• JSR 365 (CDI 2.0) - new dependency injection API support

• Servlet 4.0

• JMS 2.1

• Full JDK 9 compatibility

Page 28: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

5.X

• Spring MVC REST client

• JSR 365 (CDI 2.0) - new dependency injection API support

• Servlet 4.0

• JMS 2.1

• Full JDK 9 compatibility

• Parallel bean initialization during startup

Page 29: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

Q&A

Page 30: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

RESOURCES • https://goo.gl/pavuV5 - Spring

Framework JIRA Dashboard

• https://goo.gl/UQ4zpe - Spring

Framework 5.0 M1 released

• https://goo.gl/zMVc9U - SpringOne

Platform 2016 Keynote - Spring 5

Page 31: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 32: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

CALLBACK

Page 33: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

CALLBACK

Page 34: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

CALLBACK

Page 35: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

CALLBACK

Page 36: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

CALLBACK

Page 37: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

CALLBACK

Page 38: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 39: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 40: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

Map Actions

Process Actions and aggregate results

Run the flow

Page 41: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 42: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

BUT NOT ENOUGH

REACTIVE JAVA 8

java.util.concurrent.

CompletionStage java.util.stream.

Stream

Page 43: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

— Doug Lee

THERE IS NO SINGLE BEST FLUENT

ASYNC/PARALLEL API.

COMPLETIONSTAGE BEST SUPPORTS

CONTINUATION-STYLE PROGRAMMING ON

FUTURES, AND JAVA.UTIL.STREAM BEST

SUPPORTS (MULTI-STAGE, POSSIBLY-

PARALLEL) "PULL" STYLE OPERATIONS ON

THE ELEMENTS OF COLLECTIONS. ... ONE

MISSING CATEGORY WAS

"PUSH"

»

«

Page 44: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

UNSOLVED PROBLEMS

• in-stream communication

• backpressure

• no common api

Page 45: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 46: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

REACTIVE STREAMS PUBLISHER SUBSCRIBER

SUBSCRIPTION

Page 47: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

ONE API

Page 48: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 49: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

PROJECT REACTOR

Flux Stream…………………………..

Mono CompletionStage………………..

Page 50: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

REACTIVE EFFORTS

Page 51: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

@Controller, @RequestMapping,…

Spring MVC

Servlet API

Servlet Container

Spring Web Reactive

Reactive HTTP

Servlet, Netty, Undertow

Page 52: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 53: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 54: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 55: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 56: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 57: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 58: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 59: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 60: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 61: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 62: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

DEMO

Page 63: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

DEMO BASED ON

CREATED BY THAT

WEATHER APP

Page 64: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 65: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform
Page 66: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

Q&A

Page 67: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

RESOURCES • https://goo.gl/M0vMxT - Generations of Reactivity

• https://goo.gl/8ZgrHw - Reactive Web

• https://youtu.be/Xm-

KjMY_Z_w?list=PLAdzTan_eSPQ1fuLSBhyB4eEZF7JQ

M0Mx - SpringOne Platform 2016 Keynote - Reactive

Spring

• https://goo.gl/bIwZxn - Reactive Streams GitHub

• https://youtu.be/Cj4foJzPF80 - Developing Reactive

applications with Reactive Streams and Java 8

Page 68: REACTIVE SPRING 5 - JUG.uajug.ua/wp-content/uploads/2016/10/Spring5.pdf · REACTIVE JAVA 8 java.util.concurrent. CompletionStage java.util.stream. Stream ... M0Mx - SpringOne Platform

THANK YOU