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

How to run a containerized Java application in the cloud on Microsoft Azure

My intention for this blog post was to see how fast could I, with basically zero practical cloud experience, deploy a Java application in just that. For this purpose I decided to go for the Azure Cloud Services. Additionally, I made up my mind to also containerize my Java application making use of Docker. This promises me an easier deployment by including all the binaries and libraries needed.

This post is not meant for any Docker/Microsoft Azure e­xpert. But for people like me, who already wrote some Java code and may have peeked a little bit into the Docker topic. Who have never touched “the cloud”, but are interested to see if this is possible without that much background or even if it can be done without spending any money in the first place. To see how you can achieve this in just a few hours of work…

Continue reading
Posted in Java Runtimes - VM, Appserver & Cloud | Tagged , , , | 2 Comments

Microsoft SQL 2019: Java Unterstützung und Open Source Java-Spracherweiterung

Vor Version 2019 unterstützte Microsoft SQL Server R, Python und .Net  als Spracherweiterung.  Mit der neuen Version SQL Server 2019 wurde auch Java integriert. Das bedeutet, dass man beim Kauf eines Microsoft SQL Servers den Java-Support dazu erhält.

Im April 2020 wurde bekannt gegeben, dass die Java-Spracherweiterung für SQL Server 2019 als Open Source zur Verfügung gestellt wird. Die Spracherweiterung dient zur Ausführung von externem Code im Rahmen von SQL-Abfragen. Java-Anwendungsentwicklungsteams, die SQL Server als Backend-Speicher nutzen, können jetzt sogar Java-Code in Stored Procedures einbetten, wodurch Geschäftslogik für eine bessere Leistung in die Datenbank verlagert werden kann.

Insbesondere verwendet die Erweiterung das „Extensibility Framework API“ für SQL Server, das öffentlich dokumentiert ist. Diese neue Architektur gibt Kunden die Freiheit, ihre eigene Runtime mitzubringen und Programme unter Verwendung dieser Runtime in SQL Server auszuführen und gleichzeitig die vorhandenen Sicherheitsmechanismen zu nutzen, die die Erweiterungsarchitektur des SQL Servers bietet.

Die Wahl der verwendenden JRE bietet die Flexibilität, zwischen verschiedenen Java-Distributionen zu wählen. Wenn neuere Versionen veröffentlicht werden, erleichtert diese Architektur die Aktualisierung der Java-Laufzeitumgebung.

Außerdem bedeutet die fortlaufende Partnerschaft zwischen Microsoft und Azul, dass die „Distribution Zulu for Azure – Enterprise von Java für alle SQL Server-Kunden direkt kostenlos zur Verfügung steht. Dies stellt sicher, dass Kunden eine vollständig unterstützte Distribution nutzen können, ohne sich Sorgen machen zu müssen, dass eine bestimmte Laufzeitumgebung aus dem Support herausfällt.

Posted in Java and Quality, Uncategorized | Tagged , , | 1 Comment