Die Spring I/O Konferenz 2019 in Barcelona

SpringConference2019.png

Am 16. und 17. Mai 2019 hatte ich das Privileg an der Spring I/O Konferenz in Barcelona teilzunehmen. Die nunmehr zum achten Mal stattfindende Konferenz wurde in diesem Jahr im Palau de Congressos de Barcelona abgehalten und war mit über 1100 Besuchern aus 46 Ländern die am besten besuchte Konferenz bisher. In 48 Vorträgen und 7 verschiedenen Workshops konnte sich die Spring Community zwei Tage lang austauschen und an den Erfahrungen anderer Entwickler teilhaben. Ich möchte diesen Beitrag nutzen, um von meinen Eindrücken und den zentralen Themen der Konferenz zu berichten.

 Gleich zu Anfang der Veranstaltung wurde klar, wie die Zukunft für das Spring Framework aussehen soll. Jürgen Höller, Mitbegründer des Spring Frameworks und Leiter des Open-Source Projekts, stellte in den Keynotes die aktuell relevanten Themen vor und gab einen Ausblick über die anstehenden Releases. Immer wieder drehte es sich dabei um die Themen Spring Cloud, Spring Security, Kotlin und Reactive Programming mit der Project Reactor Library. Während Spring Cloud und Spring Security oft in Verbindung mit anderen Technologien, z.B. Kubernetes oder Cloud Foundry bzw. Keycloak oder OpenId, betrachtetet wurden, kam dem Reactive Programming die mit Abstand größte Aufmerksamkeit zu. Es schien so, als hätten es sich die Organisatoren auf die Fahne geschrieben dieses Programmierparadigma in der Community weiter voranzutreiben. Da die Themen Security und Reactive Programming in meinem derzeitigen Projekt durchaus relevant sind, haben die Organisatoren bei mir also voll ins Schwarze getroffen! Während der zwei Tage hatte ich die Gelegenheit einige Vorträge zu diesen Themen zu besuchen und ich möchte versuchen kurz zusammenzufassen was die Spring Community diesbezüglich bewegt:

Kotlin im Aufwind!

Spring Boot mit Kotlin war zwar nur Thema eines Vortrags, dennoch wurde Kotlin immer wieder in den von mir besuchten Vorträgen erwähnt oder touchiert, wenn auch nicht immer freiwillig J. Gerade in Live-Demos unterlief dem ein oder anderen Entwickler der typische Fehler des vergessenen Semikolons am Ende einer Java-Anweisung, die stets mit einem Lachen und einem „Sorry guys, I’ve been coding in Kotlin a lot recently!“ kommentiert wurde. In den immer wieder auftretenden Referenzen auf Kotlin sehe ich für mich eine Bestätigung der GitHub Auswertung, die Kotlin als eine der am schnellsten wachsenden Communities sieht. Auch Jürgen Höller kündigte an, in den kommenden Spring-Releases vermehrt Support für Kotlin anzubieten, was von einem Großteil der Anwesenden mit einem spontanen Applaus und viel Kopfnicken beantwortet wurde.

Spring Security betrifft jeden!

Während die Informationen zu Kotlin für mich zwar interessant waren, mich bei meinem aktuellen Projekt aber nicht wirklich tangieren, habe ich mich bei meiner Auswahl an Vorträgen einem der wohl spannendsten Thema gewidmet, Security! Wie jeder Entwickler weiß, oder zumindest wissen sollte, ist die Sicherheit einer Anwendung das A und O. Da ich mich in der Woche vor der Konferenz im Rahmen meiner Projektarbeit in Spring Security eingelesen hatte, war ich gespannt, was andere Entwickler zu diesem Thema zu berichten hatten. Und ich wurde nicht enttäuscht. Dem Thema Security mit Spring wurde in verschiedenen Vorträgen und Workshops immer wieder Aufmerksamkeit gewidmet. Scheinbar haben die Organisatoren die zunehmende Wichtigkeit sicherer Anwendungen erkannt und sich für ein fundiertes Wissen in der Community einsetzen zu wollen. Zu meiner Überraschung waren alle Vorträge zur Absicherung von Spring-Anwendungen mehr als nur gut besucht. Scheinbar gibt es doch mehr verantwortungsbewusste Entwickler als ich gedacht habe!

Den Einstieg gab der Vortrag „Spring Security for N00bz: A quick introduction for the terminally insecure“ von Mark Heckler. In spannender und gleichzeitig unterhaltsamer Art und Weise gab Heckler eine Einführung darüber, mit wie wenig Aufwand Spring-Anwendung grundlegend abgesichert werden können. Auch wenn ich selbst im Vorfeld schon einiges über Spring Security gelesen und ausprobiert hatte, war es ungemein hilfreich die Grundprinzipien, beispielsweise die Security Filter Chain, demonstriert zu bekommen. Mit welch spielerischer Leichtigkeit Heckler die verschiedenen Arten der Authentifizierung bzw. Autorisierung erklärte und demonstrierte war für mich mehr als nur hilfreich.

Am zweiten Tag konnte ich Joe Grandja bei seinem Vortrag „Implementing Microservices Security Patterns & Protocols with Spring Security 5“ lauschen, in dem er zeigte, wie verschiedene Sicherheits-Pattern und deren Umsetzung in Spring Security in einer Microservice-Architektur eingesetzt werden können. Grandja, der für Pivotal an der Weiterentwicklung von Spring Security 5 arbeitet, demonstrierte, wie Spring Security genutzt werden kann, um eine sichere Service-Service-Kommunikation mit Hilfe von JsonWebToken (JWT) zu erreichen. Die Token reichte Grandja entlang einer Kette von Microservices weiter und regelte über eine Einschränkung der Scopes der JWT die Zugriffsrechte der verschiedenen Microservices. Es war spannend einem so versierten Entwickler zuzuhören und bei der Arbeit zusehen zu dürfen. Grandja ließ es sich aufgrund der großen Zuhörerschaft nicht nehmen, am Ende noch einmal darauf hinwies, dass dem Thema Sicherheit nie genug Aufmerksamkeit geschenkt werden kann und kein Entwickler leichtfertig mit der Vergabe von Rechten und Gültigkeitsbereichen umgehen sollte.

Let’s get Reactive!

Auch wenn die Vorträge zum Thema Security rund um Spring die meisten Zuhörer anzogen, so ließ sich nicht leugnen, dass dem Reactive Programming mit Spring die meisten Aufmerksamkeit gewidmet wurde. In vielen Vorträgen wurden Features oder Erweiterungen rund um die reaktive Programmierung mit dem Spring Reactor Project entweder direkt oder indirekt behandelt. Offensichtlich haben die Entwickler rund um Spring die Zeichen der Zeit erkannt und wollen zukünftig das Entwickeln von non-blocking Anwendung, die sich durch die asynchrone Verarbeitung einer Vielzahl von gleichzeitig auftretenden Anfragen auszeichnen, erleichtern.

Noch in den Keynotes wurde dem Spring Reactor Project ein Timeslot gegeben, in dem Violeta Georgieva und Ben Hale Einblicke in die letzten Weiterentwicklungen in diesem Bereich gaben. Violeta Georgieva, die für Pivotal in Bereichen wie Reactor Netty, Reactive WebSocket und WebFlux tätig ist, stellte die zuletzt bereitgestellten Verbesserungen für das reaktive programmieren mit Spring vor. Dabei zeigten sie mit dem ReactorDebugAgent einen schon lange ersehnten Debugger, der es Entwicklern von nun an ermöglicht, ihren reaktiven Code einfacher und detaillierter zu debuggen. Gerade für mich, der kurz zuvor angefangen hat reaktiven Code zu schreiben und an den Fehlermeldungen mehr als nur einmal verzweifelt ist, war die Demonstration des Debuggers ein echter Mehrwert. Vorbei die Zeiten, in denen ich versuche zu erahnen in welchem Teil des deklarierten Datenflusses der Fehler aufgetaucht sein könnte. Mit dem ReactorDebugAgent werden Fehler von nun an als eine Art Stacktrace ausgegeben und somit einfach zu analysieren sein. Doch nicht nur der Debugger war Teil der Demonstration. Im Anschluss präsentierte Georgieva mit BlockHound einen Java Agenten, der blockierende Aufrufe von non-blocking Threads identifiziert und an dieser Stelle einen Fehler schmeißt. Somit steht einer vollkommen reaktiven Anwendung bald nichts mehr im Weg. Ben Hale, ebenfalls im Dienste Pivotals, gab im Anschluss an Georgieva einen kurzen Ausblick auf R2DBC, womit eine reaktive API für SQL Datenbanken bereitgestellt wird. Nachdem es bereits seit einiger Zeit reaktive APIs für MongoDB, Cassandra und Redis gibt, ist es nun an der Zeit, das wohl weitverbreitetste Datenbanksystem reaktiv verfügbar zu machen. Hale widmete R2DBC sogar einen ganzen Vortrag, in dem er die Features und die Nutzung der reaktiven API demonstrierte.

In vielen Vorträgen zur reaktiven Programmierung konnte ich mich und meine gemachten Erfahrungen wiederfinden. Ob es nun Paul Harris‘ eher einführender Vortrag „Moving from Imperative to Reactive“ war oder der Vortrag „Efficient web apps with Spring Boot 2“ von Stéphane Nicoll und Brian Clozel; immer wieder konnte ich Parallelen finden und viele Informationen für meine anstehenden Aufgaben mitnehmen. Es war toll zu sehen wie andere Entwickler mit Frameworks wie Spring Boot WebFlux oder Reactive Streams arbeiten, was mir geholfen hat zu verstehen, worum es bei der reaktiven Programmierung eigentlich geht.

Mein persönliches Highlight war jedoch der Vortrag „Stream Processing with the Spring Framework (Like You’ve Never Seen It Before)“ von Viktor Gamov und Josh Long. In witziger, aber auch herausfordernder Art zeigten Gamov und Long, wie Kafka Datenströme mit Reactive Streams verarbeitet und kombiniert werden können. Ich habe während dieses Vortrags mehr als nur einmal mit dem Kopf geschüttelt, da Long es immer wieder schaffte, den Großteil der Zuhörerschaft abzuhängen, nur um diese später wieder mit einer sehr einfachen Erklärung zurück an Bord zu holen. Nicht umsonst wurden Josh Long, ebenfalls im Auftrage Pivotals unterwegs, vier Vorträge auf der Konferenz eingeräumt! Jedem, der sich ein wenig für die Verarbeitung von Kafka Datenströmen mit Reactive Streams begeistern kann, sei empfohlen sich die Aufzeichnung des Vortrags auf dem YouTube Kanal der Spring I/O Organisation anzuschauen.

Im Nachhinein war der Besuch der Konferenz eine tolle und lehrreiche Erfahrung für mich. Zwischen den Vorträgen und in der Abendveranstaltung, liebevoll und treffend „Beerworking“ genannt, konnte ich viele Gleichgesinnte kennenlernen und Erfahrungen austauschen. Ich kehre mit vielen Ideen und Erkenntnissen an mein Projekt zurück und freue mich, mein neues Wissen in die Tat umzusetzen.