spring framework 5: history and reactive features
TRANSCRIPT
AGENDA
TIME TO LEARN MORE
▸ History of Spring Framework from version 1 to 5
▸ Current state of “Enterprise” Java and challenges
▸ What awaits us with Spring 5?
▸ Coding!
2002
PROTOTYPE IN THE BOOK
Rod Johnson “Expert One-on-One J2EE Design and Development”with no mention of Spring30k LOC under com.interface21 Check code on Github
Juergen Hoeller open source book code with new name Spring
where Spring means spring after J2EE winter
2004
SPRING 1.0
Others frameworks integration (Struts/Hibernate)
AOP support with AspectJ
New books about Spring
Big growth of popularity
2007
SPRING 2.5
Investments $10m & 3m Downloads
From Interface21 to SpringSource
Spring Integration is announced
Spring Webservice is announced
Spring Batch is announced
2008
GROOVYAcquired G2One – company behind Groovy & Grails
Spring Batch 1.0
Spring Integration 1.0
Spring Team behind projects like Tomcat, Apache HTTP Server
Cloud Foundry – PaaS providerHyperic – tools for monitoring Java
2009
SPRING 3.0 & VMWARE
SpringSource acquired by VMWare for $420m
Spring 3:
‣ JDK 5+
‣ Modularize uber Jar
‣ Comprehensive REST support
‣ Spring Expression Language
2010-2011
SPRING DATA & SPRING AMQP
VMWare bought RabbitMQ company
spring-data-commons
spring-data-jpa
spring-data-mongoDB
spring-data-redis
2013
SPRING 4.0 & PIVOTALPivotal was born
Reactor 1.0
Spring IO Platform announced
Spring Boot introduced
JDK 8 and WebSocket support
SPR-9044
2014-2015
SPRING BOOT
Spring Boot 1.0 Released
Spring XD 1.0 Released
Bye-Bye Groovy 😥
Spring Cloud available (with Netflix OSS)
Spring Framework 4.2.3 in the end of 2015
2016
SPRING FRAMEWORK 4.3
Last release in 4.3 branch
support until 2020
will work with JDK 6,7,8,9
and Tomcat 6-9
Spring Framework 5 M4Reactor 3
HOW TO WRITE NON BLOCKING
CALLBACKS }); }); }); });
COMPLETABLE FUTUREsince JDK 8
Completable Future + java.util.Stream
RX
CURRENT STATE AND CHALLENGES
NON-BLOCKING IO
LATENCY REAL MATTERS
RESOURCE UTILIZATION
REACTIVE CODE
REACTIVEX CRASH COURSE
Stream Abstraction▸ Functional, declarative programming model ▸ Combine, transform, reduce sequences ▸ Focus on what, not how
Stream (JDK8)
▸ Efficiently process collections ▸ Pull based and usable only once ▸ For non latency or infinite
Reactive Library▸ Stream(JDK8) like API ▸ Push based ▸ Latency sensitive and infinite seqs
HOW TO WRITE NON BLOCKING
REACTIVE STREAMS
▸ Specification for non-blocking libs interoperability
▸ Collaborative effort: Netflix, Pivotal, RedHat, Twitter, Lightbend
▸ JDK9 adoption java.util.concurrent.Flow
▸ Only 4 Interfaces
http://www.reactive-streams.org
https://spring.io/blog/2016/04/19/understanding-reactive-types
REACTIVE STREAMS
The core concern of Reactive Streams is handling backpressure.
In a nutshell, backpressure is a mechanism that permits a receiver to ask how much data it wants to receive from the emitter. It allows:
▸ The receiver to start receiving data only when it is ready to process it
▸ To control the inflight amount of data
▸ Efficient handling of slow emitter/fast receiver or fast emitter/slow receiver use cases
WHAT’S NEW
SPRING FRAMEWORK 5.0
Core updates‣ Java 8 in the core
‣ Java 9 full compatibility, no jigsaw
Web‣ HTTP/2 on client and server HTTP/2 Comes to Java
‣ Reactive Streams based controllers
‣ Alternatives to annotated controllers handlers design
‣ Lambda oriented HTTP routing & processing
‣ Kotlin
SPR-13716
WHAT’S NEW
SPRING FRAMEWORK 5.0
Roadmap‣ 5.0 M4 available now
‣ 5.0 RC1: Dec 2016/Jan 2017
‣ 5.0 GA wait for JDK9 GA
JDK 8+, Servlet 3.1, JMS 2.0+, JPA 2.1+, JUnit 5
Major baseline updates with Java EE 7
LINKS
Aliaksei Zhynhiarouskitwitter: @a_lithium
http://www.reactive-streams.org
https://spring.io/blog/2016/04/19/understanding-reactive-types
Notes on Reactive Programming Part I
Notes on Reactive Programming Part II
Notes on Reactive Programming Part III
https://github.com/aliaksei-lithium/spring5demo