Kotlin für Java Web-Entwickler

Ende-zu-Ende Entwicklung ohne Technologiebruch, Übertragung von Objekten zwischen Backend und Browser-Anwendung, Ausgleich der Unterschiede zwischen Browsern, starke Typisierung, Nutzung des gleichen Codes in UI, Backend oder Android Apps? Ist es möglich, dass eine Programmiersprache all dies leisten kann? Ja, das ist es. Und dies sind nur einige Eigenschaften, die Kotlin bietet. Lass uns losgehen.

Continue reading
Posted in Other languages for the Java VM | Tagged , , | 2 Comments

Dependency Injection mit Angular 9

Der Angular 9 Release, eines der grössten Updates in den letzten drei Jahren, ist bereits knapp vier Monate her. Der Schwerpunkt vom Release und somit auch von vielen der Release Notes lag sicherlich auf dem Ivy-Compiler. Dieser ist nun standardmässig in Angular aktiviert. Ivy wurde bereits mit Angular 8 als Opt-In-Möglichkeit eingeführt und in einem früheren Blog-Artikel erläutert.

Auch wenn die Änderungen mit Ivy sehr umfangreich sind, ist dies jedoch nicht das einzige neue Feature, welches mit dem Angular 9 Release eingeführt wurde. Denn es wurden zum Beispiel auch die Möglichkeiten der Dependency Injection erweitert mit zwei neuen Optionen für providedIn. Dies wurde jedoch im Release Note nur kurz erläutert. Aufgrund dessen wird in diesem Blog-Artikel ein Überblick über die bisherigen und die nun erweiterten Möglichkeiten der Dependency Injection in Angular gegeben.

Continue reading
Posted in Web as a Platform | Tagged , | Leave a comment

Von Java EE 8 zu Jakarta EE 8

Oracle verabschiedet sich von der Java Enterprise Edition, da die Eclipse Foundation Java EE aus urheberrechtlichen Gründen ohne das Warenzeichen “Java“ unter einem neuen Namen „Jakarta“ übernimmt.

Wenn Jakarta bekannt klingt, dann deshalb, weil es nicht das erste Mal ist, dass dieser Name für ein auf Java basierendes Projekt verwendet wird. Von 1999 bis 2011 betrieb die Apache Software Foundation das Projekt Apache Jakarta, das alle Open-Source-Java-Bemühungen von Apache abdeckte.

Continue reading
Posted in Java EE | Tagged | Leave a comment

Testcontainers – das Schweizer Taschenmesser der Integrationstests

Testcontainers

Der Einsatz von Container-Technologien wie beispielsweise Docker hat die Software-Industrie in den vergangenen Jahren revolutioniert. Anstatt durch den Betrieb Binärartefakte installieren zu lassen, kann getreu dem DevOps-Gedanken einmalig ein Image mitsamt der notwendigen Ablaufumgebung (z. B. JDK, Application Server, …) erstellt und dann idealerweise automatisiert auf allen Umgebungen (Entwicklung, Test, Prod) als Container gestartet werden. Aber nicht nur die eigenen Anwendungen lassen sich so verpacken, man kann auch Umsysteme wie zum Beispiel Datenbanken hochfahren, um damit zu interagieren.

Denn auch bei der lokalen Entwicklung benötigt man typischerweise bereits eine Datenbank. In vielen Java Projekten werden dafür häufig In-Memory DBs wie die H2, die Apache Derby oder die HSQLDB eingesetzt. Leider verhalten sich diese leichtgewichtigen Datenbanken nicht ganz gleich zu den typischen Produktionsvarianten (MySQL, PostgreSQL, Oracle etc.). Es treten dann auf dem Test- und Produktionssystem auf einmal Fehler oder ungewollte Effekte auf, die man lokal nicht nachstellen kann. Darum ist es sinnvoll, bereits in der lokalen Entwicklung und den automatisierten Tests gegen die echten Datenbanken zu arbeiten. Die kann man sich natürlich manuell installieren. Aber das ist unnötig aufwändig und außerdem fehlt die Sicherheit, dass es auch wirklich genau die gleiche Version wie zum Beispiel in der Produktion ist. Dadurch wird man laut Murphy’s Law unweigerlich wieder in die Falle tappen, weil die Systeme auf unterschiedlichen Ständen sind. Die Ausrede “Works on my machine” hilft nicht, wenn es in der Produktion gerade lichterloh brennt. Um die Versionsgleichheit sicherzustellen, kommt man deshalb über das Konfigurieren/Skripten und Automatisieren der Infrastruktur (Infrastructure as Code) nicht herum. Und dabei können natürlich auch Container helfen.

Mit Testcontainers bekommt man nun eine Bibliothek, mit welcher aus Java heraus der Docker-Dienst (Daemon) ferngesteuert werden kann. Gerade im Rahmen der Integrationstests vereinfacht das die Verwaltung der Infrastruktur enorm und lässt die Tests zudem ohne zusätzliche Aufwände leicht automatisieren. Und so verwundert der Name “Test”Containers nicht: die Bibliothek ist initial genau für diesen Einsatzzweck entstanden.

Continue reading
Posted in Java and Quality | Tagged , , , | Leave a comment

Was ist der Unterschied zwischen RDD, DataFrame und Dataset in Apache Spark?

Apache Spark wurde entwickelt, um eine höhere Leistung im Hadoop-Ökosystem erreichen zu können. Im Vergleich zu Hadoop soll Spark dank In-Memory-Berechnungen und weiterer Optimierungen bei der Datenverarbeitung wesentlich schneller sein.

In diesem Blog will ich erklären, welche Datenstrukturen Spark mitbringt und wie sich diese voneinander unterscheiden. In Apache Spark verwendet man drei Arten von Datenstrukturen: RDD, DataFrames und Dataset.

Continue reading
Posted in Java Runtimes - VM, Appserver & Cloud | Tagged , , , | Leave a comment

GraphQL als Alternative zu REST

Möchten verschiedene Software-Applikationen miteinander kommunizieren, so braucht es eine Programmierschnittstelle (API). Die API wird hierfür häufig mit REST gebaut, ohne sich über Alternativen zu erkundigen. GraphQL kann dir eine Alternative bieten und diese möchte ich folgend mit dir anschauen.

Continue reading
Posted in Web as a Platform | Tagged , | Comments Off on GraphQL als Alternative zu REST

Möglichkeiten, eine Spring-Anwendung auf der Azure Cloud zu betreiben

Auf Azure gibt es unzählige Möglichkeiten, eine Java Anwendung zu betreiben. In diesem Artikel möchte ich anhand eines Beispiels vier verschiedene Methoden zeigen, wie man eine Spring Boot Applikation auf Microsoft Azure deployen kann.

Continue reading
Posted in Java Runtimes - VM, Appserver & Cloud | Tagged , , | Leave a comment