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.
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.
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:
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.
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.:
Fazit: Agile Entwicklung ist ein Thema, das nicht mit einer 2-tägigen Schulung gegessen ist.
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.
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.
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.