Spring I/O 2018 @Barcelona

Indivirtual @Spring I/O 2018

Voor de zevende keer werd afgelopen week Spring I/O gehouden, de grootste conferentie in Europa voor wat betreft het Spring Framework ecosysteem. Dit jaar was Indivirtual hierbij van de partij met 3 developers uit ons Java team: Mijnisha Singh, Dennis Nijssen en Jesper Volkers. Samen reisden zij af naar Barcelona, waar de conferentie werd gehouden.

Spring I/O bestond uit twee dagen, met verschillende sessies en workshops per dag. Alles had wel iets te maken met Spring- Framework / Boot, maar toch werden er veel verschillende topics besproken. De onderwerpen waren erg uiteenlopend, van Reactive programming tot Machine learning, zelfs JUnit 5 en ook Reactive Frontends kwamen aan bod tijdens de verschillende sessies. Het volledige programma is terug te vinden op de Spring I/O website. De door ons bijgewoonde sessies beschrijven we hieronder.

Spring Boot Admin

Op de eerste dag gaf Johannes Edmeijer, werkzaam bij Codecentric, een sessie over Spring Boot Admin en de voordelen hiervan. Tijdens deze sessie werd behandeld hoe de gezondheid van de Spring Boot applicaties gemakkelijk gemeten kan worden met Spring Boot Admin. Door middel van live coding werd gepresenteerd hoe gemakkelijk Spring Boot Admin gebruikt kan worden. Via de spring.io website werd een nieuwe project gegenereerd en stap voor stap beschreven hoe Spring Boot Admin toegevoegd kon worden aan het project.

In de tweede helft werd het dashboard van Spring Boot Admin getoond waar de logs, uptime, garbage collection en memory van de Spring Boot applicatie visueel waargenomen konden worden. Spring Boot Admin is dus een gemakkelijk te implementeren tool welke gebruikt kan worden om de gezondheid van applicaties bij te houden. Ook is het mogelijk om updates en meldingen via Slack, mail en andere communicatiemiddelen te versturen. Ook custom views of metingen kunnen aangemaakt worden, zodat het dashboard uitgebreid kan worden.

Flight of the Flux: A look at Reactor execution model

Één van de meest ingrijpende changes van het Spring Framework ecosysteem van het afgelopen jaar is wel het Spring WebFlux project geweest. Op basis van de Reactive Stream API heeft het Reactive programming paradigma een weg gevonden binnen het ecosysteem. In een sessie van Simon Basle, engineer van Pivotal, zijn verschillende aspecten hierover aan bod gekomen, zoals: Assembly vs Execution time, een Cold vs Hot Flux, Schedulers, etc.

Heel belangrijk hierbij is het principe: “Nothing happens until you subscribe”, waarmee het verschil tussen Assembly en Execution Subscription time wordt aangeduid. Als tweede werd gesproken over een Cold vs Hot Flux, waarbij een Cold Flux geen data uitzend totdat er gesubscribed is, doet een Hot Flux dat wel. Ook zal een Hot Flux bij een nieuwe subscription niet opnieuw de data uitzenden.

Middels Schedulers is het mogelijk om de threads waarop de Reactive Stream wordt uitgevoerd aan te passen. Hiervoor kent Project Reactor een tweetal operators: publishOn en subscribeOn, het verschil tussen die twee is dat de publishOn operator de threads van de pipeline aanpast na de publishOn aanroep. Waarbij de subscribeOn ook al de threads wijzigt waar de pipeline initieel data uitzend.

Ook zijn nog Work Stealing en Operator Fusion behandeld tijdens de sessie. Met Work Stealing wordt bedoeld als meerdere threads binnen een pipeline draaien en één daarvan data uitzendt en later een andere thread datzelfde doet, die zijn data moet afstaan aan de eerdere thread. Operator Fusion daarentegen betekent dat dezelfde opeenvolgende operators samengevoegd worden ten behoeve van performance.

Welcome to JUnit 5

Live codingNaast alle Spring gerelateerde onderwerpen kwam er af en toe ook nog wat anders voorbij, deze keer JUnit 5. Hoewel unittesten niet elke programmeur zijn grootste hobby is, was er veel aandacht voor deze sessie. Want ja, hoe makkelijker het unittesten gemaakt wordt, hoe beter het uiteindelijk wordt 😉

De gepresenteerde wijzigingen in JUnit 5 ten opzichte van JUnit 4 waren vooral gericht op meer duidelijkheid/overzicht. Naast dat er veel annotaties een nieuwe naam hebben gekregen zijn er ook nieuwe features toegevoegd. Een erg handige feature is o.a. ‘assertAll’, welke ervoor zorgt dat alle asserts uitgevoerd worden ook al faalt de eerste. Wat dus voorheen het geval was bij JUnit 4. Andere nuttige toevoegingen zijn de geneste unittests, geparametriseerde unittests en de mogelijkheid om zelf de JUnit annotaties te extenden. Daarnaast kon natuurlijk lambda support ook niet ontbreken in verband met Java 8.

What’s new in Spring Boot 2.0

Madhura Bhave presenteerde nieuwe functionaliteiten van Spring Boot 2.0. In deze sessie werd benoemd wat er nieuw is in Spring Boot 2.0, maar ook welke bestaande functionaliteiten aangepast zijn. Als eerste werden wat infrastructurele upgrades behandelt; Java, Apache Tomcat, Hibernate en Thymeleaf zijn geupgrade in Spring Boot 2.0. Vervolgens werd het framework besproken. Het verschil tussen een Servlet stack en Reactive stack was hierbij een onderwerp. Spring WebFlux en Netty behoren bij de Reactive stack en Spring MVC bij de Servlet stack.

Vervolgens sprak Madhura over wat er veranderd is in de configuratie properties. De regels van relaxed binding blijven hetzelfde, maar er is een uniform format om properties van de omgeving te lezen. Ook is er een properties migrator toegevoegd om het migreren naar Spring Boot 2.0 te vergemakkelijken voor de gebruiker. Verder zijn op het gebied van security ook een aantal zaken veranderd. De security auto configuratie is bijvoorbeeld simpeler gemaakt en ook is het makkelijker gemaakt om custom security configuratie toe te voegen. Ook wordt er bij Spring Boot 2.0 gebruik gemaakt van OAuth 2.0. Spring Security 5.0 wordt hierbij gebruikt en er kunnen meerdere clients registreren.

Zoals bij vele andere sessies herhaalde Madhura dat Spring MVC nog steeds gebruikt kon worden en bedrijven er goed bij stil moeten staan of het wel loont om over te stappen op de Reactive stack.

Google Cloud native with Spring Boot (Workshop)

Gedurende de conferentie waren er verschillende workshops, hiervoor diende er van te voren aangemeld te worden. Gelukkig was er op tijd ingeschreven om deel te nemen aan de workshop over Google Cloud i.c.m. Spring Boot. Deze workshop werd gegeven door Ray Tsang (@saturnism), Developer Advocate bij Google. Om te beginnen kregen we allemaal een Google Cloud account, hiermee werkten we de gehele workshop. Ray had een project voorbereid welke wij vervolgens moesten aanpassen. Het project bestond uit een simpele Spring Boot applicatie voor het opslaan en weergeven van berichten, welke gebruik maakte van een in-memory database. Vervolgens was het aan ons de taak om deze te koppelen aan een datasource in het Google Cloud Platform. Door middel van bepaalde Spring configuratie ging dit vrij gemakkelijk, er moesten wat dependencies toegevoegd worden aan de applicatie en een spring configuratie file op de server en de connectie was er binnen no-time.

Binnen het Google Cloud platform kunnen er zowel via de UI allerlei services aangezet worden, als via een CLI, waar wij gebruik van maakte. Er werd dus rechtstreeks op de desbetreffende server gewerkt.

Under the Hood of Reactive Data Access

In de ideale wereld van Reactive programming is de gehele stack reactive, zo dus ook de data access layer. Tijdens deze sessie hield Mark Paluch een presentatie over de reactive drivers van verschillende databases en hoe Spring Data hierop inhaakt. Vooralsnog zijn er nog geen relationele databases met reactive drivers, maar slechts enkele NoSQL drivers. Wat betreft JDBC lopen er al wel enkele initiatieven om dit mogelijk te maken.

De NoSQL databases zijn wel wat verder, zo hebben MongoDB, Redis, Cassandra en Couchbase allemaal een reactive driver. Redis en Couchbase zijn hierin al verder doordat zij al data uitzenden op het moment dat nog niet de hele result set compleet is. MongoDB en Cassandra wachten echter nog totdat alle chunks ingeladen zijn. Hopelijk zullen ook deze drivers snel nog verder geoptimaliseerd worden.

KubeBoot – Spring Boot deployment on Kubernetes

Spring Boot wordt vaak gebruikt voor microservices. Maar wat komt er allemaal bij kijken als je naar de cloud gaat? Welke uitdagingen kom je tegen, en hoe los je deze op. Alex Soto, Software Engineer bij Red Hat besprak deze uitdagingen.

Uitdagingen als; het schalen van je applicaties, hoe om te gaan met meerdere hosts? Hoe voorkom je port conflicten? Wat te doen als er een host problemen heeft? En hoe doe je een update? Kubernetes neemt veel van deze uitdagingen voor je uit de weg, maar daarnaast noemde Alex ook nog Istio, een nieuw platform voor het beveiligen, verbinden en beheren van je microservices.

Voor het updaten van een applicatie had Alex het over verschillende manieren. Het welbekende blue/green release principe, maar ook de canari release procedure werd besproken. Daarnaast had hij het ook nog even over shadow trafficking en dark launches. Erg interessante technieken om een zo goed mogelijke release te doen.

Bij het updaten van een applicatie heb je vaak te maken met user session. Je kan er voor kiezen om te gaan voor server side session of client side sessions. Vanuit Spring is er een Spring Session welke er voor zorgt dat je sessies niet aan een applicatie gebonden zijn waardoor je geen sessies sluit als er een applicatie uit gaat. Alex benoemde infinispan voor het opslaan van de sessies als solide oplossing.

Slides: https://www.slideshare.net/asotobu/kubeboot-spring-boot-deployment-on-kubernetes

Reactive Frontends with RxJS and Angular

Een hot topic tijdens de conferentie was Reactive programming. Met name de mogelijkheden binnen Spring WebFlux en Spring Framework 5. Maar hoe gaat de frontend om met reactive programming? Sergi Almar vertelde uitgebreid over de mogelijkheden binnen JavaScript om te kunnen praten met een Reactive backend.

RxJS is de JavaScript library die het mogelijk maakt om in JavaScript Reactive programming toe te passen. Oftewel het geeft je toegang tot Observables, Operators en Schedulers.

Presentatie: https://www.youtube.com/watch?v=sBet3R9iGaA
Slides: https://www.slideshare.net/Pivotal/reactive-frontends-with-rxjs-and-angular

Fun with the Functional Web Framework

Tijdens de sessie “Fun with the Functional Web Framework”, gehouden door Arjen Poutsma, zijn de nieuwe HandlerFunction en RouterFunction interfaces toegelicht. Samen vormen zij de basis van het Functional programming model binnen WebFlux. Dit model staat naast het oude vertrouwde Spring MVC, met verschillende annotaties die ook nog steeds te gebruiken zijn.

Voordelen hiervan zijn de functionele notatie, het wordt hierdoor meer een library en minder een framework. Daarnaast is er ook geen reflection meer nodig. Wel moet er met de Handler- en RouterFunction erg opgelet worden dat de code leesbaar en begrijpelijk blijft. Zo zijn er veel notatie mogelijkheden die niet altijd beide punten ten goede komen.

Tot slot

Spring I/O 2018 was een geslaagde conferentie, met zeer goede en interessante talks! Wat ons betreft zeker een aanrader voor in de toekomst.

Daarnaast hebben we ook nog heel even van de mooie stad Barcelona kunnen genieten. De conferentie werd namelijk gehouden in het ‘Palau de Congressos de Barcelona’, dat zich op een mooie locatie in het centrum van de stad bevond. In de avond hebben we genoten van de Spaanse tapas en Sangria met aansluitend een fontijn show bij de ‘Font Màgica’. 

Kortom, het waren leuke en vooral leerzame dagen!