You are on page 1of 38

FAST AND FURIOUS

SPRING FRAMEWORK 5
Aliaksei Zhynhiarouski

jProf#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 Spring
30k 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
Big growth of popularity
Others frameworks integration (Struts/Hibernate)
AOP support with AspectJ

new books about Spring


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
From Interface21 to SpringSource

Investments $10m & 3m Downloads

Spring Integration is announced

Spring Webservice is announced

Spring Batch is announced


2008

GROOVY
Acquired G2One – company behind Groovy & Grails
Cloud Foundry – PaaS provider
Hyperic – tools for monitoring Java

Spring Team behind projects like Tomcat, Apache HTTP Server

Spring Batch 1.0

Spring Integration 1.0


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 & PIVOTAL


Pivotal was born

Spring IO Platform announced

Spring Boot introduced SPR-9044

Reactor 1.0

JDK 8 and WebSocket support


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

Reactor 3
Spring Framework 5 M3
CURRENT STATE AND CHALLENGES

DO WE NEED TO CHANGE?
CURRENT STATE AND CHALLENGES

BLOCKING IO

LATENCY REAL MATTERS

IMPERATIVE CODE

RESOURCE UTILIZATION
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 FUTURE


since JDK 8
});

});

});

Completable Future + java.util.Stream

RX
CURRENT STATE AND CHALLENGES

NON-BLOCKING IO

LATENCY REAL MATTERS

REACTIVE CODE

RESOURCE UTILIZATION
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 SPR-13716

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


WHAT’S NEW

SPRING FRAMEWORK 5.0

Roadmap
‣ 5.0 M3 available now

‣ 5.0 RC1: Dec 2016/Jan 2017

‣ 5.0 GA Q1

Major baseline updates with Java EE 7

JDK 8+, Servlet 3.1, JMS 2.0+, JPA 2.1+, JUnit 5


LINKS

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

Aliaksei Zhynhiarouski

twitter: @a_lithium

You might also like