Java Optional – Endlich so, wie es schon immer sein sollte

Seit Java 8 gibt es die Optional-Klasse, die mittlerweile bestimmt fast jeder schon einmal genutzt oder zumindest gesehen hat. Da in Java der Umgang mit optionalen Objekten und damit verbunden null ja leider nicht so elegant ist wie in manch anderen Sprachen, ist Optional angetreten, um genau diesen Umstand zu verbessern.

Man kann an einem Optional unter anderem

  • abfragen, ob ein Objekt wirklich vorhanden ist: boolean isPresent()
  • sich das Objekt zurückgeben lassen: T get()
  • das gesetzte Objekt oder ein alternatives Objekt zurückgeben lassen:
    T orElseGet(Supplier<? extends T> alternative)
  • oder direkt Code mit einem vorhandenen Objekt ausführen lassen:
    void ifPresent(Consumer<? super T> consumer).

Was der API gefehlt hat, war eine schöne, prägnante Lösung für den Anwendungsfall “wenn ein Objekt vorhanden ist, führe folgenden Code aus, ansonsten führe diesen alternativen Code aus”.  Mit der bisherigen API sah das Ganze nämlich immer so oder so ähnlich aus:

Optional<Item> nextItem = loadNextItem(); 
nextItem.ifPresent(Item::process); 
if(!nextItem.isPresent()) { 
    latch.countDown(); 
}

Verständlich…ja…schön…eher nein. Zumindest nicht, wenn man bedenkt, dass mit Optional ja alles besser werden sollte. Erfreulicherweise wurde die Optional API in Java 9 um folgende Methode erweitert:

void ifPresentOrElse​(Consumer<? super T> action, Runnable emptyAction).

Mit dieser Methode lässt sich oben beschriebene Anforderung elegant in einem Einzeiler folgendermaßen lösen:

loadNextItem().ifPresentOrElse(Item::process, latch::countDown);

(Codebeispiele entnommen aus https://bugs.openjdk.java.net/browse/JDK-8071670)

Posted in Java Basics | Tagged , | 1 Comment

Bessere Docker Java Images dank Jib

Google hat mit Jib ein neuen “Containerizer” vorgestellt, der die Erstellung von Container Images für Java Entwickler deutlich vereinfachen soll. Das nächste neue Ding, das durchs Container-Dorf getrieben wird?

Ein Java Entwickler, der seine Applikation als Docker Image ausliefern will, hat gewisse Hürden zu überwinden. Die Applikation muss in den Container, die Start-Skripte wollen geschrieben werden und natürlich muss ein geeignetes Basis Image ausgewählt werden. Das ist nur die Spitze des Eisbergs. Natürlich wollen auch die Build-Tools konfiguriert, die Container-Umgebungen installiert und die Shell-Skripte zum Starten und Stoppen der Anwendung geschrieben werden. Teile davon können die entsprechenden Plugins für das jeweilige Build-Tool übernehmen.

Aber geht es noch einfacher? Googles Antwort drauf: Jib!
Continue reading

Posted in Build, config and deploy | Tagged , , | Leave a comment

Eclipse MicroProfile 1.4 und 2.0 erschienen

In der Java EE (Jakarta EE) Welt passiert derzeit scheinbar nicht allzu viel, Planungen für eine Version 9 sind aktuell noch nicht in Sicht. Vielmehr kostet die Transition von Oracle zu Eclipse EE4J im Moment viel Arbeit und Zeit. Dagegen entwickelt sich die MicroProfile Initiative rasant weiter. Hier hat man sich eine Plattform geschaffen, um unabhängig vom bisher eher langsamen und schwergewichtigen Standardisierungsprozess von Java EE neue und innovative Ideen im MicroService- und Cloud-Umfeld angehen zu können. Trotzdem wird zukünftig der Java Enterprise Standard auch davon profitieren, wenn nämlich aus dem Inkubator MicroProfile die ein oder andere Spezifikationen übernommen wird.

Vor einigen Tagen wurden nun zwei neue Versionen veröffentlicht. Während beim mit Java EE 7 kompatiblen MicroProfile 1.4 fünf der elf Teilspezifikationen aktualisiert wurden, hat man für das MicroProfile 2.0 die vorhandenen Spezifikationen an die Neuerungen von Java EE 8 angepasst (u. a. CDI 2.0, JSON-P 1.1 und JAX-RS 2.1). Neu hinzugekommen ist außerdem die API für JSON Binding (JSON-B), ein Werkzeug, um analog zu JAXB (XML Binding) Java Objekte von und zu JSON Nachrichten zu konvertieren. Die Version 2.0 ist nun auch die Basis für die weitere Entwicklung.

MicroProfile 1.4
Quelle
MicroProfile 2.0
Quelle

Weitere Infos zu den neuen Releases kann man im MicroProfile-Blog nachlesen. Die Release-Notes finden sich hier und hier.

Posted in Java EE | Tagged , , , , | Leave a comment

WildFly Swarm heißt jetzt Thorntail

RedHat/JBoss ist bekannt dafür, seinen Produkten mal einen neuen Namen zu geben. So wurde vor 5 Jahren der JBoss AS in WildFly umbenannt, um den Open Source Application Server besser von den anderen Teilen in der JBoss Produktfamilie abzugrenzen. Und aus den gleichen Gründen hat man nun WildFly Swarm, den Java-EE-Microservice-Verpacker, in Thorntail umgetauft. Thorntails sind im Englischen übrigens verschiedene Kolibri-Arten, die in Südamerika vorkommen.

Gleichzeitig mit der Umbenennung wird sich das bisherige Namensschema (2018.5.0) ändern. Durch die monatlichen Versionsänderungen kam nie so richtig das Gefühl für eine stabile Version auf. Darum wagt man mit Thorntail nun den Neuanfang als Version 2.0.0.Final. Als nächste Schritte will man ein neues Logo entwerfen, den Code in ein neues Github-Repo umziehen, dabei die Maven-Group-IDs ändern und die Namen der Kommunikationskanäle (Twitter, …) anpassen. Die Mailingliste ist bereits umgezogen und von der Dokumentation gibt es ebenfalls bereits eine neue Version.

Thorntail bietet ähnlich wie Spring Boot die Möglichkeit, mit Java EE Microservices Architekturen zu entwickeln, in dem einzelne Services als ausführbare JAR-Archive mit genau so viel Applikationsserver wie nötig zusammengepackt werden. Gleichzeitig ist Thorntail auch eine Implementierung des Eclipse MicroProfile Standards. Weitere Infos findet man bereits unter der neuen Webseite.

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

Single Sign-On – Eine Einführung

Viele Benutzer verwenden täglich eine Menge unterschiedlicher Systeme. Bei jedem dieser Systeme müssen sich die Benutzer separat anmelden, im Optimalfall mit unterschiedlichen Passwörtern. Daher muss man sich als User eine große Menge an Zugangsdaten für all diese Systeme merken. Dies führt dann bei der Mehrzahl der Nutzer dazu, dass sie ständig eines der Passwörter vergessen. Als Resultat wird der Workload am Service Desk durch all die “Passwort-vergessen”-Anfragen signifikant erhöht. Wer sich die vielen verschiedenen Passwörter nicht merken möchte, verwendet überall ein ähnliches oder sogar das gleiche Passwort. Darunter leidet dann die allgemeine Sicherheit der Benutzerkonten.

Eine viel bessere Alternative bietet hier Single Sign-On (SSO). Dabei muss ein Nutzer sich im Optimalfall nur noch einmal anmelden und kann dann auf alle seine Systeme und Services zugreifen.

In diesem Artikel soll eine Einführung in die Konzepte hinter Single Sign-On gegeben werden. Nach einer allgemeinen Einführung folgt eine kurze Diskussion der Vor-und Nachteile, sowie eine Zusammenfassung der wichtigsten konzeptionellen Ansätze. Dazu treten wir zunächst einmal einen Schritt zurück und betrachten das Authentifizierungsproblem etwas abstrakter. Worum geht es bei der Authentifizierung eigentlich?
Continue reading

Posted in Did you know? | Tagged , , , | Leave a comment

Wie werde ich zum IDE Kung Fu-Meister?

Jede/r von uns SoftwareentwicklerInnen dürfte eine eigene Lieblingsentwicklungsumgebung haben, mit der man täglich gut und zufrieden arbeitet, über deren Funktionen man einen guten Überblick hat, und mit der die Arbeit bisher auch Spaß macht. Trotzdem wird bei den meisten von uns der Tag kommen, an dem man auf eine andere Entwicklungsumgebung wechseln muss (oder möchte). Das kann entweder deshalb der Fall sein, weil ein neues Projekt eine andere IDE als Projektstandard vorgibt, oder weil man jetzt doch mal diese andere, moderne IDE ausprobieren möchte, von der alle schwärmen und zu der einige KollegInnen schon begeistert gewechselt sind.

Dieser Artikel möchte allen, denen dieser Schritt bevorsteht, einige nützliche Tipps und Tricks an die Hand geben, die es leichter machen, schnell mit der neuen Umgebung produktiv zu werden. Entstanden sind diese Tipps aus meinen eigenen Erfahrungen, als ich vor einigen Jahren von Eclipse auf IntelliJ IDEA umgestiegen bin. Diese Best Practices haben mir damals sehr dabei geholfen (und helfen mir immer noch dabei), mich zügig umzugewöhnen, ohne dass mich die Arbeit mit der ungewohnten Umgebung frustriert.

Continue reading

Posted in Did you know? | Tagged , , | Leave a comment

Java 10 – Die Änderungen an den Klassenbibliotheken

Mit Java 10 gab es neben dem größeren Update der Local-Variable Type Inference auch noch einige kleinere Änderungen an den Klassenbibliotheken. Hier eine Übersicht über die wichtigsten Änderungen an den Klassenbibliotheken.
Continue reading

Posted in Java Basics | Tagged , , , , | Leave a comment