SPRING FRAMEWORK 5FAST AND FURIOUS
Aliaksei ZhynhiarouskijProf#12, 2016
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
after J2EE winter
2003
INTERFACE 21 & SPRING 0.9
2004
SPRING 1.0
Others frameworks integration (Struts/Hibernate)
AOP support with AspectJ
new books about Spring
Big growth of popularity
2005
SPRING 1.2.6
400k Downloads
Lead AspectJ now with Spring team
2006
SPRING 2.0 & 1_000_000 DOWNLOADS
Spring Security
Spring Web Flow
Spring LDAP
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 M3Reactor 3
CURRENT STATE AND CHALLENGES
DO WE NEED TO CHANGE?
CURRENT STATE AND CHALLENGES
BLOCKING IO
LATENCY REAL MATTERS
RESOURCE UTILIZATION
IMPERATIVE CODE
SERVLET CONTAINER IN NUTSHELL
SERVLET CONTAINER IN NUTSHELL
FIX SERVLET CONTAINERS
THERE IS ANOTHER WAY
REACTOR/EVENT-LOOP
REACTOR/EVENT-LOOP
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
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
ONLY 4 INTERFACES
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
▸ To switch from a dynamic push-pull strategy to a push-based only strategy if you request Long.MAX_VALUE elements
SPRING 5
SPRING + REACTOR + RX = 🌞
REACTIVE STREAMS EVERYWHERE
REACTIVE STREAMS EVERYWHERE
UNDER THE HOOD
MONO<T>
FLUX<T>
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
SPR-13716
WHAT’S NEW
SPRING FRAMEWORK 5.0
Roadmap‣ 5.0 M3 available now
‣ 5.0 RC1: Dec 2016/Jan 2017
‣ 5.0 GA Q1
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