events-meetups

// 05-12-2020

Als Plattform für die Hauptkonferenz wurde Swapcard benutzt. Dort wurden die Sessions live gestreamt und mittels Chat konnten die Teilnehmer Fragen stellen, bzw. mit den Speakern interagieren. In den meisten Fällen wurde aber erst am Ende der Session auf die Fragen eingegangen. Die Workshop-Tage am Montag und Freitag wurden mittels Zoom abgehalten.

Rund um Java sind die Themen der W-Jax breit gefächert. Wir geben euch einen kleinen Einblick in Vorträge die wir uns angesehen haben:

Microservice Workshop

In diesem Workshop war es Ziel, eine Applikation mit Domain-driven Design in mehrere Microservices aufzuteilen und auf Kubernetes in Produktion zu bringen. Ebenfalls waren Monitoring, Tracing und Logging ein wichtiges Thema. Die Applikation wurde mithilfe des Service-Mesh Istio umgesetzt.

Bei dem Beispiel handelte es sich um ein E-Commerce System. Hierbei haben wir alle fachlichen Bereiche im Domain-driven Design Style eingeteilt. Dies wurde in Zoom über das Zeichentool umgesetzt, was sehr gut funktionierte. Danach galt es die einzelnen Module in Microservices umzusetzen, welche in Docker Containern laufen. Diese Container wurden dann in Kubernetes mit kubectl deployed. Es wurden einige Beispiele gezeigt wie große Firmen (Netflix, …) ihre Applikationen deployen.

Prometheus und Grafana wurden als Monitoringlösung eingesetzt. Um das Logging richtig analysieren zu können, wurde Kibana in Verbindung mit Elastic Search eingesetzt. Damit die einzelnen Microservices getraced werden können (Wer ruft wen auf), wurde Jaeger konfiguriert.

Somit war eine E-Commerce Applikation in einzelne fachliche Bereiche eingeteilt, als Microservice (Istio) in Docker Container auf Kubernetes deployed.

Domain-driven-Design-Workshop

In diesem Workshop wurde der Frage nachgegangen, welche Lösungsansätze es gibt um ein gutes Domänenmodell zu entwerfen und zu entwickeln. Dafür wurde zuerst anhand eines Beispiels des Hamburger Hafens erklärt worauf es ankommt und dass auch Domain Storytelling eine große Rolle spielt. Ein Tool, dass in weiterer Folge bei den Übungen verwendet wurde, war egon.io. Damit lassen sich Domain-Storys einfach in Zeichnungen überführen.

Eine hitzige Diskussion entstand bei der Diskussion über die Vereinheitlichung von Sprache in Projekten. Während viele Entwickler die Meinung vertraten, dass Code immer in English geschrieben werden sollte, wurde bei diesem Workshop gelehrt, dass die Sprache der Domäne auch in den Code übertragen werden sollte. Durch Übersetzungen entsteht ein Mehraufwand. Entwickler müssen nämlich in weiterer Folge zwei verschiedene Domänensprachen sprechen können (je nachdem mit wem sie sich gerade unterhalten). Dadurch ist es auch fehleranfälliger, wenn bspw. die Domänensprache Deutsch ist, der Code aber ins Englische übersetzt wird.

Java Core Library Deep Dive Workshop

In diesem Workshop wurde auf Funktionen und Methoden aus der Java Core Library eingegangen.
Behandelt wurden:

  • primitive Datentypen
  • String und Multiline-String-Literale (neue Schreibweise in Java 15)
  • Collections und Streams
  • Time-API von Java

Der erhoffte Deep Dive blieb zum Großteil leider aus, es wurde mehr oder weniger auf erweiterte Funktionen der zuvor genannten Themen eingegangen und nicht auf die Implementierung die eigentlich dahinter steht. Der Workshop war trotzdem gut, um sich gewisse Methoden, die man in der Praxis nicht so oft braucht, wieder in Erinnerung zu rufen.

Die Inhalte sind gut ausgewählt und die Organisatoren verdienen großes Lob, für das, was trotz der bekannten Einschränkungen auf die Beine gestellt wurde.

Coole neue Java-Features – besseres Code mit Java 9 bis 15 Workshop

Dieser Hands-on-Workshop hat verschiedene Verbesserungen vorgestellt, die in Java 9 bis  Java 15 enthalten sind. Wir haben einen Blick auf Sprach- und Syntax Verbesserungen geworfen, nämlich Switch, Records, Textblöcke (Multiliterale Strings) und var. Sowie neue API-Funktionen in Streams, Strings, Optionals, Concurrency und HTTP/2. Unser Wissen wurde durch viele praktische Übungen vertieft. Wir haben einen grundlegenden Überblick über wichtige Funktionen im modernen Java erhalten.

Zuletzt wurde eines der Hauptmerkmale von Java 9 behandelt: die Modularisierung. Java wird mit jedem neuen Release cooler und besser.

Fifty Shades of Java

Ein wirklich interessanter Vortrag, denn hier wurde nicht gezeigt wie man guten Code schreibt, sondern was man in Java-Projekten keinesfalls machen sollte. Es ging dabei um Schlupflöcher in der Java-API, mit denen man den einen oder anderen Kollegen zum Verzweifeln bringen könnte. 

Um ein paar Beispiele zu nennen:

  • Kommentarzeilen, die ausgeführt(!) werden
  • Überschreiben des Standard-Outputs
  • Programme die nicht normal beendet werden können
  • GoTo-Programmierung in Java
  • Verändern des Integer-Caches
  • wie man ein boolean mit dem Wert “maybe” initialisiert

Aus Sicherheitsgründen und den Kollegen zuliebe werden wir an dieser Stelle hier nicht auf Details eingehen 😉

Architektur und Agilität – Wie passt das zusammen

Martin Fowlers Definition von Softwarearchitektur als “Entscheidungen die wichtig und schwer zu ändern sind” widerspricht in gewisser Weise dem zweiten Punkt des agilen Manifests in dem “Anforderungsänderungen auch noch in einer späten Entwicklungsphase willkommen sind”.

Bei Architektur in einem agilen Projektumfeld ist es daher nicht empfehlenswert, ein komplettes Architekturkonzept bereits vor dem Entwicklungsstart aufzustellen. Es wird mit einer initialen Idee des Gesamtsystems begonnen und diese umgesetzt. In weiterer Folge wird dieses Konzept bewertet und, wenn notwendig, auch angepasst. Damit wird auch die Architektur in eine agile Arbeitsweise eingebettet.

Was dabei beachtet werden muss, sind dass Architektur sich auch sehr auf Fachlichkeit beziehen sollte, denn Fachlichkeit ändert sich wesentlich seltener als die Technik.

Ein Lösungsansatz für stabile Architektur in agilen Projekten ist daher Clean Architecture, bei dem die Fachlichkeit im Zentrum steht und daher in gewisser Weise auch dem Domain-Driven-Design Ansatz entspricht. 

Besonders hervorgehoben wurde auch die Notwendigkeit der lückenlosen Dokumentation von Architekturentscheidungen: Warum wurde sich für ein gewisses Framework entschieden? Was waren die betrachteten Alternativen? Unter welchen Rahmenbedingungen wurde es betrachtet?Warum wurde sich gegen ein anderes Framework entschieden?

Diese Dokumentation hat zwei große Bedeutungen:

  • Ändern sich Rahmenbedingungen, kann sich gegebenenfalls auch die Entscheidung ändern
  • Lückenlose Diskussion beugt erneuten Diskussionen mit demselben Ergebnis vor

Fazit: Agile Architekturen zeichnen sich dadurch aus, dass sie sich ändern und dass sie änderbar sein müssen.

High Performance Java Cloud-Native Apps & Microservices 

Alle Anwendungen sollen Microservices werden: schnellere Startupzeiten, minimaler Speicherverbrauch und schnellere Datenbankzugriffe, ist die aktuelle Marschrichtung. In dieser Session wurde erläutert wie das mit Java (welche schon seit 20 Jahren führende Programmiersprache ist) funktionieren soll. Im Wesentlichen gibt es ein paar Gamechanger, die es einfacher machen diese schnellen und mit minimalen Memory betriebenen Microservices zu erstellen. Microprofile, GraalVM, Quarkus und Microstream.

In diesem Vortrag wurde näher auf Microstream eingegangen. Eine einfache Maven Dependency, welche den Java-Objektgraphen im Speicher (Cache) hält. Somit sind lange Ladezeiten von der Festplatte oder DB-Zugriffe nicht mehr notwendig. Alle gängigen DB-Typen (Oracle, MySQL, NoSQL, etc.) werden unterstützt. Etwaige Mappings sind ebenfalls nicht mehr notwendig.

Ich denke es lohnt sich auf jeden Fall, diese Technologie zu Verfolgen und sich näher damit zu befassen.

Development with Quarkus – from PoC to Prod

Durch neue Konzepte wie Serverless und DevOps findet ein Umdenken in der Applikationsentwicklung statt. Anhand von Quarkus wurde gezeigt, wie schnell und schlank eine Anwendung sein kann. Der Vortrag behandelt den Weg von einem lokalen Prototypen über den Anschluss von externen Systemen wie Datenbank MariaDB, Single Sign-on mit KeyCloak, tracing mit Jaeger, der Einbindung des ELK-Stacks bis hin zum Deployment.

Fazit: Es war eine Erweiterung des Montags-Workshops, bei der noch mehr externe Systeme angeschlossen und konfiguriert wurden.

Angular in der Praxis – Server-Side-Rendering

Server-Side-Rendering (SSR) ist ein weiterer Ansatz der modernen Frontend-Entwicklung mit Angular. Das hauptsächlich durch Next.js genutzte und in der doch auch (vom Vortragenden) kontrovers diskutierte Verfahren dient üblicherweise zur Beschleunigung der initialen Ladezeit und Suchmaschinenoptimierung von Single Page Applications. Auch Angular bietet dafür eine entsprechende Erweiterung namens Universal. Im Vortrag wurde grundsätzlich das Prinzip von SSR vorgestellt, danach wurde ein praktisches Beispiel mit Angular erstellt und anschließend die Vor- und Nachteile davon diskutiert.

Fazit: Grundsätzlich sind hier die Vorteile von SSR nicht zu verachten, da hier das fertige und optimierte Ergebnis an den Client übertragen wird. Jedoch verliert die Anwendung durch die permanente Verbindung zum Server die flexibilität einer Client-Anwendung.

Einführung in Rust

Rust ist eine noch relativ neue Programmiersprache, die von Mozilla entwickelt und inzwischen in vielen Bereichen eingesetzt wird. Die Sprache ist konsequent auf Robustheit ausgelegt. Es gibt keine Null-Werte, alle Daten haben genau einen Eigentümer etc. Mit Rust kann man gut lesbaren Code auf einem hohen Abstraktionsgrad schreiben, gleichzeitig systemnah programmieren und Zugriff auf Betriebssystemebene erhalten.

Fazit: Auch wenn Rust nichts mit Java zu tun hat, war es eine willkommene Alternative und ein Blick über den Tellerrand. 🙂

Fazit

Das Sprechen mit anderen Teilnehmern, die Stände von verschiedenen Firmen und das gemeinsame Getränk am Abend fehlten dann doch um richtiges “Konferenz-Feeling” aufkommen zu lassen.

Positiv ist aber, dass man sich die Vorträge auch im Nachhinein anhören/anschauen kann, für den Fall, dass zwei interessante Sessions gleichzeitig stattfinden. Ebenfalls wurden einige Dokumente (Slides, Fact-Sheets, Git-Repos, usw.) zur Verfügung gestellt.

Von den Themen her ist die W-JAX auf jeden Fall eine Empfehlung wert. Die Inhalte sind gut ausgewählt und die Organisatoren verdienen großes Lob, für das, was trotz der bekannten Einschränkungen auf die Beine gestellt wurde.

// Autor

Christian