Bericht von der JCON18

19. Oktober 2018


Was gibt es Neues in der Welt der Java-Entwicklung? Drei unserer Entwickler waren in der vergangenen Woche auf der JCON18 unterwegs und haben dabei viel Interessantes und Wissenswertes über neue Technologien, Tools und Methoden erfahren. Hier ihre Eindrücke von der Konferenz.

Slider: "It's not work if you like it" ... so I never worked. #java

 

Clouding

Serverless

Serverless war eines der großen Themen auf der JCON. Java ist hier nicht besonders populär (~5% Marktanteil, im Gegensatz zu 75% für NodeJS); Gründe sind vermutlich die aufwändigere Infrastruktur und höhere Startup-Zeiten. Um diese Themen anzugehen, wurde das fn-Project aus der Taufe gehoben, als docker-basierte, sprachunabhängige Serverless-Plattform, die besonders schlank ist (im Falle von Java: POJOs, keine Dependencies ) und überall (insbesondere natürlich der Oracle cloud) deployt werden kann.
Als Alternative wurde in einem Talk Googles Cloud Functions for Firebase vorgestellt, eine Serverless-Plattform, mit der ohne eigenen Server Backendfunktionen wie z.B. Persistierung ausgeführt werden konnten. Eine Referentin hat eine kleine Mini-App (Timetracker) vorgeführt, deren Einträge in einem kleinen Kontingent kostenlos in einer Cloud-Datenbank persistiert werden konnten. Der Dienst integriert sehr gut mit anderen Firebase-Diensten (Analytics, Database, Storage, Messaging Dienste) – die Referentin betonte mehrfach die geringe Einstiegshürde und dass sie nur 3 Stunden für die Umsetzung der Persistenz benötigte.

Microservices

Ein anderes an jeder Ecke zu hörendes Thema waren Microservices, insbesondere die neue Jakarta EE Spec mit Fokus auf den Bedürfnissen von Cloud-Usern und deren kleinere „Stiefschwester“ MicroProfile, die besonders für Microservices ausgelegt ist. Mit letzterem lässt sich die Größe der Artefakte für Java-Serveranwendungen in den Kilobyte-Bereich reduzieren, was Deploymentzeiten (z.B. per Docker) im Sekundenbereich ermöglicht (sehr beeindruckende Demo). Gleichzeitig hat das MicroProfile einige ziemlich coole annotationsgesteuerte Features wie Metriken, Fault Tolerance, Monitoring, OpenAPI und natürlich obligatorische Bibliotheken für JSON binding, REST clients etc.
In einem anderen Talk wurden die 12-Factor-App-Prinzipien vorgestellt und auf das Design von Microservices angewendet. Es wurde gezeigt, dass sich viele der Anforderungen besonders gut via MicroProfile umsetzen ließen.
Gerade in Hinblick auf Microservices in großen Unternehmen (zu denen wir allerdings eher nicht gehören) mit getrennten fachlichen Abteilungen war der Talk interessant, der Aufteilung anhand von Technologien und auch Code Reusage als mit den folgenden einprägsamen Folien als Antipattern brandmarkte:

Slider mit 4 bunten Kühen: Team Emma, Team Berta, Team Erna und Team Lisl Slider: Die bunten Kühe sind aufteilt in Team Head, Team Body, Team Tail und Team Leg

Coding

Die JCON hatte auch einige Talks mit klaren praktischem Hintergrund. Entwickler verbringen in der Gesamtheit ja ein vielfaches der Zeit mit dem Lesen gegenüber dem Schreiben von Code, daher sollte der Lesbarkeit und Verständlichkeit von Code besondere Aufmerksamkeit gewidmet werden. Feature Completeness ist nicht gleichzusetzen mit Usable. Diese Punkte hatten daher unter den Stichworten „Clean Code“, „API Design“ und „Best Practices“ gleich mehrere Talks zum Thema.

Eventgetriebene und reaktive Ansätze (sowohl in der Programmierung als auch in der Architektur) waren ebenfalls Thema einiger Talks – beides sollte jeder Entwickler auf dem Schirm haben, da es einerseits von vielen Frameworks mittlerweile vorausgesetzt wird (z.B. Angular, NodeJS), andererseits aber auch die Lösung von bestimmten Problemen (wo man früher synchrone Kommunikation und Threads eingesetzt hätte) radikal vereinfacht.

Agile Entwicklung

Ein weiterer Themenschwerpunkt war der agile Entwicklungsprozess. Beim Besuch einiger dieser Talks wurde nochmal klar, dass es sich dabei nicht einfach um einen Schalter handelt, den man umlegen kann und sodann agil entwickelt. Es wurden viele Probleme angesprochen, z.B. fehlende Ende-zu-Ende-Anwendung (der Kunde weiß gar nichts vom Prozess) oder inkonsistente Teamorganisation (Teilzeitmitgliedschaft in agilen Teams). Ängste / Vorbehalte bestehen nicht nur bei den Kunden, sondern auch bei den Entwicklern selbst. Ein Beispiel dafür: Der immanente Widerspruch zwischen der proklamierten Zielsetzung einer möglichst einfachen, zielorientierten Lösung, und Kreativität und Wunsch nach Anerkennung des Entwicklers. Es wurden auch einige Mythen widerlegt, wie z.B.:

  1. Agile Entwicklung ist schneller: stattdessen schnellere time to market / release zyklus
  2. Agile Entwicklung spart kosten: stattdessen ist das Ergebnis näher am Bedarf / Kunde erhält wertvolleres Ergebnis
  3. Agile Entwicklung braucht keine Planung mehr: stattdessen muss das Modell sinnvoll mit Projektmanagement-Methoden verbunden werden

Fazit: Agile Entwicklung ist ein Thema, das nicht mit einer 2-tägigen Schulung gegessen ist.

Testing

Testing war ein Thema, welches sich durch alle drei Konferenztage gezogen hat. JUnit-Tests werden aus offensichtlichen Gründen als absolutes Minimum erwartet. Da es sich bei Enterprise-Software häufig um komplexe Systeme handelt, werden umfängliche Integrations-Tests ebenfalls als eine Selbstverständlichkeit angesehen.

Dringend empfohlen – und daher auch in diversen Talks aufgegriffen – werden allumfassende Integration-Tests durch Einbeziehung der „neuen“ Infrastruktur-Paradigmen: Cloudifizierung und Containerisierung im Zusammenspiel mit CI/CD.

Durch die immer weiterführende system- und containerübergreifende Natur heutiger Systeme tendieren gestrige Integrations-Tests dazu, innerhalb eines Systems zu funktionieren, während systemübergreifende Tests häufiger (und auch unvorhersehbarer) fehlschlagen.

Java

In einem Talk direkt von einem Oracle Manager wurde nochmal klargemacht, dass das aktuelle (Open) JDK (11) (nahezu) identisch mit der Oracle Version ist und mittlerweile sogar einige zuvor ausschließlich kommerzielle Features (z.B. Flight Recorder) in die Open-Source-Version übergegangen sind. Weiterhin steht das JDK nun unter einer eindeutigen GPL-Lizenz, was Deployment vermutlich nochmal deutlich vereinfachen sollte (keine inoffiziellen Repositories oder private Docker-Images). Eine Oracle Version unterscheidet sich also lediglich in der Subscription, die dann kostenpflichtig ist und für LTS (Support > 6 Monate) notwendig ist.

Slider: Difference between Oracle OpenJDK & Oracle JDK with Java SE 8

Sonstiges

Belgier legen großen Wert darauf, dass Pommes in Belgien und nicht in Frankreich erfunden wurden (im Gegensatz zu Rosenkohl), Kassensysteme müssen nicht langweilig sein und Tomaten können ein wirksames Mittel gegen Prokrastination sein.

Tools, die man sich näher ansehen sollte

  1. Testcontainers – direkt aus ’nem JUnit Test einen Docker starten, mit fertigen Vorlagen für gebräuchliche Datenbanken und Selenium
  2. Domain Storytelling für requirements analysis
  3. Google Firebase zum superschnellen Erstellen eines kleinen Backends für Apps
  4. Quartz Scheduling Framework für Java-Anwendungen
  5. MicroProfiles – Tool zur Optimierung von Java EE Anwendungen für Microservice-Architektur
  6. Sakuli – Testing Tool für e2e & GUI Tests
  7. Spring Statemachines – Library zum Zentralisieren von oftmals implizit im Programmcode versteckte Statemachines
  8. Vaadin – Components and tools for building web apps in Java
  9. AsciiDoc – MarkDown Alternative mit vielen Formatierungsmöglichkeiten und einem festen Standard