Schwerpunktthema

javaspektrum

Artikel

Bibliotheken fĂŒr Kommandozeilen­anwendungen

Kommandozeilenanwendungen in Java sind zwar, aufgrund der Startzeit der JVM, nicht die verbreitetsten. Allerdings kann die Entwicklung fĂŒr interne Anwendungen, je nach Wissensstand des Teams, sinnvoll sein. Und dank der nativen Kompilierung mit der GraalVM wird die Startzeit beschleunigt. Neben der Fachlichkeit besteht ein Großteil der Arbeit einer Kommandozeilenanwendung darin, die ĂŒbergebenen Argumente und Optionen auszulesen und anzuwenden. Dazu schauen wir uns vier mögliche Bibliotheken an.

Artikel

Java-HTTP-Clients im Vergleich

Neben der Einbindung von Datenbanken findet sich die Kommunikation per HTTP zu anderen Diensten mittlerweile in fast jedem Projekt wieder. Innerhalb von Java hat sich hierzu mittlerweile eine große Menge an Bibliotheken gebildet, die wir einsetzen können. In dieser Kolumne wollen wir uns darum vier dieser Kandidaten anschauen und sehen, in welchen Aspekten sich diese unterscheiden.

Artikel

Maven, das unbekannte Wesen – Teil 2

Noch mehr Themen rund um Maven

Artikel

Maven, das unbekannte Wesen - Teil 1

In sehr vielen Java-Projekten wird heute zum Bauen Maven als Build-Tool verwendet. Die grundlegende Nutzung von Maven ist dabei in der Regel schnell erlernt und auch die erste pom.xml schnell geschrieben. Die nÀchsten Schritte bestehen dann meiner Meinung nach darin, sich mit weiteren Details zu beschÀftigen. Dazu wollen wir uns in diesem Artikel vier ausgewÀhlte Themen zur Vertiefung von Maven anschauen.

Artikel

WiderstandsfÀhigen Java-Code mit Resilience4j schreiben

Eines ist beim Betrieb von Software sicher: Fehler und unerwartete Situationen werden eintreffen. Stabile Software sorgt deswegen vor und kann auch mit solchen Situationen umgehen. Diese mit Resilienz oder WiderstandsfÀhigkeit beschriebene Eigenschaft kann den Unterschied zwischen einer Anwendung, die nicht mehr reagiert oder erreichbar ist, und einer darstellen, die noch ihren Dienst tut. Dieser Artikel beschÀftigt sich deshalb mit StabilitÀtsmustern und zeigt, wie wir diese mit Resilience4j in Java umsetzen können.

Artikel

Feature Flags mit FF4j, Togglz oder Unleash in Java einsetzen

Spaß mit Flaggen

Artikel

Mit Git die Vergangenheit manipulieren

Nachdem wir uns in der letzten Kolumne mit Grundlagen von Git auf der Kommandozeile beschÀftigt haben, wollen wir uns nun einige erweiterte Konzepte, vor allem rund um die nachtrÀgliche Manipulation der Historie, anschauen.

Artikel

Es muss nicht immer grafisch und klickbar sein

In dieser Kolumne geht es um Git. Genauer gesagt die Benutzung von Git auf der Kommandozeile. Neben Grundeinstellungen und vielen Kommandos wird hier und da auch ein Trick vorgestellt, um die Benutzung zu erleichtern.

Artikel

Unbekannte Besonderheiten von Java

Was? Das geht mit Java?

Artikel

Images fĂŒr Java-Anwendungen bauen

Vielfach werden fĂŒr den Betrieb von Java-Anwendungen Container verwendet. Das setzt voraus, dass die Anwendung als Container-Image zur VerfĂŒgung gestellt wird. Doch wie entsteht ein solches Image? Und worauf sollten wir achten? Dieser Artikel zeigt mehrere Wege, wie wir fĂŒr eine Anwendung zu einem solchen Image gelangen können und worauf wir dabei achten sollten.

Artikel

Modernes funktionales Programmieren in Java

Erfahrene Java-Entwickler*innen können viele der Entwurfsmuster des „Gang of Four“-Buches aus dem Stand zitieren, identifizieren und anwenden. Trotzdem stehen diese praktisch seit der Erscheinung des Buches unter Kritik: da sie teils vage definiert sind, strotzen „moderne“ Codebasen nur so von Singletons, Factories und Buildern. Auf der anderen Seite stehen die AnhĂ€nger*innen der funktionalen Programmierung, die sich gerne ĂŒber die objektorientierten Patterns lustig machen. Die Wahrheit liegt wie so oft in der Mitte: seit Version 8 lassen sich auch in Java die cleveren Gedanken aus der funktionalen Welt effektiv und komfortabel benutzen, ohne die Objektorientierung aufzugeben.

Artikel

JSX-Komponenten mit Java nutzen

Eine Lingua franca fĂŒr HTML-Views

Artikel

Dynamische Proxys mit dem JDK umsetzen

Bei der Entwicklung mit Java verwenden wir zwangsweise einige der im JDK enthaltenen APIs. Das Collections-API mit seinen Listen, Maps und Sets wird beispielsweise in so gut wie jedem Projekt genutzt. Neben solchen bekannten gibt es jedoch auch einige APIs, die vielen, auch nach mehreren Jahren Java-Entwicklung, noch nicht begegnet sind. In diesem Artikel wollen wir uns eine solche unbekanntere Programmierschnittstelle anschauen, nÀmlich das Dynamic Proxy Class API.

Artikel

EinfĂŒhrung in ReplicaSet und Service

Um eine Anwendung ausfallsicher in einem Kubernetes-Cluster zu betreiben, wird diese mit mehreren Pod-Instanzen betrieben. Dadurch stellt sich allerdings die Frage, wie wir anschließend dafĂŒr sorgen, dass diese Pods auch fĂŒr Clients innerhalb des Clusters einfach erreichbar sind. Um diese Frage und um eine verbesserte Version zur Replizierung von Pods geht es in diesem Artikel.

Artikel

Was ist die Magie von Spring Boot?

Ein Blick hinter die Kulissen

Artikel

JUnit5 fĂŒr das Testen von Spring Boot-Anwendungen

Bei der Entwicklung von Spring und Spring Boot wurde schon immer darauf geachtet, dass hiermit entwickelte Anwendungen testbar sind. Ab und zu reichen die im Standardumfang mitgelieferten Mittel jedoch nicht vollkommen aus. In diesem Artikel wollen wir uns deshalb an drei AnwendungsfÀllen aus der Praxis anschauen, wie sich die vorhandenen Mittel in Kombination mit JUnit5 erweitern lassen.

Artikel

Cloud native Java-Anwendungen mit Quarkus

Anfang MĂ€rz wurde meine Timeline auf Twitter mit Tweets ĂŒber das neue Java-Framework Quarkus ĂŒberrollt. Bei soviel erzeugter Aufmerksamkeit sollten wir uns doch einmal genauer ansehen, was daran so besonders ist und warum wir Quarkus einsetzen sollten.

Artikel

ParametrizitÀt in Java

Artikel

Ein praxisorientierter Einstieg in Kubernetes

Beim Deployment von Containern reicht es zu Beginn, diese – mehr oder weniger – manuell auf einer einzelnen Maschine laufen zu lassen. Mit der Zeit entstehen dann immer weitere Anforderungen an Automatisierung, Ausfallsicherheit und Strategien zum Deployment. Ein Cluster zur Verwaltung von Containern muss her. Genau fĂŒr diese Aufgabe wurde Kubernetes entwickelt, und aktuell ist es nahezu unmöglich, daran vorbeizukommen, wenn Container verwendet werden. Dieser Artikel bietet einen praxisorientierten Einstieg in die Welt von Kubernetes.

Artikel

Was sind eigentlich Web Components?

FĂŒr die Erstellung von BenutzeroberflĂ€chen im Web sind HTML, CSS und JavaScript gesetzt. Doch die Wiederverwendung und Kapselung von so erstellten Komponenten lĂ€sst zu wĂŒnschen ĂŒbrig. Um eine fertige Komponente zu nutzen, muss man das HTML ĂŒbernehmen und passendes CSS und JavaScript separat einbinden. Web Components versprechen, hier zu helfen. In dieser Kolumne schauen wir uns gemeinsam an, was Web Components sind und wie diese funktionieren.

Artikel

Die erste Java-Version mit Long-Term-Support seit Java 8

Java, die Elfte

Artikel

Java-Bibliotheken fĂŒr den Einsatz in Tests

In den meisten Projekten entfĂ€llt ein nicht gerade kleiner Anteil des Codes auf Tests. FĂŒr diesen Testcode sollten dieselben Regeln wie fĂŒr Produktivcode gelten. Neben dem Achten auf VerstĂ€ndlichkeit und Wartbarkeit gehört auch das Erschaffen von Abstraktionen und das Vermeiden des Not-invented-here-Syndroms durch den Einsatz von passenden Bibliotheken dazu. Dieser Artikel stellt sechs Bibliotheken vor, die sich im Einsatz als praktisch und hilfreich erwiesen haben.

Artikel

Prinzipien zur Entwicklung von unabhÀngigen Systemen

Viele Systeme werden aktuell mit einer Microservice-Architektur geplant und umgesetzt. Da jede Architektur Vor- und Nachteile aufweist, muss die gewÀhlte jedoch auch zum Problem passen. Dieser Artikel zeigt, welchen primÀren Vorteil eine Microservice-Architektur hat und welche Prinzipien bei der Entwicklung beachtet werden sollten, um diesen Vorteil nicht zu neutralisieren.

Artikel

Einsatz von Containern zum Testen

Testcontainers in JUnit-Tests verwenden

Artikel

Java 10 – Evolution statt Revolution

Gerade erst ist Java 9 erschienen, da steht auch schon das nÀchste Release, Java 10, an. Dieser Artikel betrachtet die Neuerungen von Java 10 und wagt einen kurzen Blick in die Zukunft.

Artikel

Health-Checks in Java-Anwendungen

Health-Checks sind fĂŒr den Betrieb von Anwendungen heute, insbesondere wenn sie als Container in einem Cluster deployt werden, unerlĂ€sslich. Dieser Artikel zeigt, wieso Health-Checks so wichtig sind, welche Details beachtet werden sollten und wie Health-Checks in Java mit drei gĂ€ngigen Bibliotheken umgesetzt werden können.

Artikel

Jepsen – verteilte Systeme testen

Den Problemen in verteilten Datenbanken auf der Spur

Artikel

Command Line Interfaces in Java

Die meisten neuen Anwendungen stellen eine Web- oder grafische BenutzungsoberflĂ€che fĂŒr die Interaktion mit dem Benutzer bereit. Doch gerade fĂŒr Anwendungen, die Teil eines Batch-Jobs sind, automatisiert aufgerufen werden oder fĂŒr sogenannte Powernutzer gemacht sind, bietet es sich an, eine OberflĂ€che fĂŒr die Kommandozeile anzubieten. Dieser Artikel zeigt die Bestandteile einer solchen Anwendung und wie man diese in Java benutzt.

Artikel

Logging und Metriken in verteilten Systemen

Aufgrund des aktuellen Trends rund um Microservices entsteht in vielen Projekten ein verteiltes System. Eine Herausforderung von verteilten Systemen ist deren Überwachung und das Nachvollziehen, was zur Laufzeit vor sich geht. Dieser Artikel gibt Ihnen einen Überblick, wie dies mit Logging und Metriken gewĂ€hrleistet werden kann.

Artikel

Tooling fĂŒr JavaScript-Frontends

HĂ€mmer und Schraubenzieher

Artikel

Docker Compose – Komplette Systeme mit Docker managen

Der Einstieg in Docker ist einfach. Schnell hat man gelernt, mit Dockerfiles Images zu erzeugen und die ersten Container laufen bereits. Dann wird es wirklich spannend. Wie manage ich mehrere Container, die zusammen eine ganze Umgebung bilden? Dieser Artikel liefert Ihnen die Antwort auf diese Frage.

Artikel

Lokale Datenanalyse mit Data Frames

Der Wunsch, aus GeschĂ€ftsdaten Erkenntnisse gewinnen zu wollen, ist in der Breite der Unternehmen angekommen. HĂ€ufig werden dabei technologische Aspekte wie Machine-Learning-Algorithmen und Cluster-Lösungen als SchlĂŒssel betrachtet, um viele Fragen quasi automatisch zu beantworten. Doch muss es fĂŒr einen Einstieg in dieses Thema immer direkt ein Big-Data-Framework oder ein Cluster fĂŒr Machine Learning sein? Dieser Artikel zeigt Ihnen, wie Sie ganz einfach lokal auf Ihrem Rechner die ersten Schritte im Data-Science-Umfeld gehen können und dabei einen Überblick ĂŒber die Vorgehensweise erhalten.

Artikel

Microservice-Infrastruktur

Ein unvollstĂ€ndiger Überblick

Artikel

Features in Java 9

Passend zum Schwerpunktthema „Java – die Neunte“ dreht sich auch diese Kolumne um Neuigkeiten, die uns mit Java 9 zur VerfĂŒgung gestellt werden. Da sich den großen neuen Themen wie Jigsaw, JShell und HTTP/2 in diesem Heft eigene Artikel widmen, stelle ich Ihnen ein paar der vielen weiteren, jedoch deutlich kleineren Neuerungen vor. Freuen Sie sich also auf ein buntes Sammelsurium.

Artikel

Consumer-Driven Contracts – Testen von Schnittstellen innerhalb einer Microservices-Architektur

In einer Microservices-Architektur entstehen viele Services – potenziell in den verschiedensten Programmiersprachen. Um eine reibungslose Kommunikation zwischen diesen zu gewĂ€hrleisten, mĂŒssen die Schnittstellen passen und auch ĂŒber lĂ€ngere Zeit stabil bleiben. Consumer-Driven Contracts stellt hierzu einen Ansatz dar, der zudem die Schnittstellen und deren Aufrufer noch zusĂ€tzlich testet.

Artikel

AWS Lambda

Serverlose Microservices

Artikel

Java-Web-Frameworks von innen?

Web-Frameworks fĂŒr Java gibt es nun bereits seit fast 20 Jahren. Diese nehmen dem Anwendungsentwickler eine Menge Arbeit ab und sorgen dafĂŒr, dass dieser sich nicht auf Infrastruktur konzentrieren muss, sondern die Anwendungslogik im Vordergrund steht. Doch was genau tut so ein Web-Framework eigentlich? Dieser Artikel zeigt, was heutige Web-Frameworks leisten und wo diese sich dann doch in Nuancen unterscheiden.

Artikel

Ein DomĂ€nenmodell fĂŒr das SmartHome

Es gibt in der DomĂ€ne SmartHome viele unterschiedliche Sichtweisen, proprietĂ€re Produktfamilien, einige offene Standards und verschiedene Konsortien, die versuchen, langfristig tragfĂ€hige, standardisierte Kommunikationsstandards zu definieren. Wir skizzieren fĂŒr das Umfeld des sogenannten Ambient Assisted Living eine mögliche API fĂŒr die relevanten Anwenderrollen.

Artikel

Amazon EC2 Container Service

Docker goes AWS

Artikel

Bessere Web-Apps mit HTML5-APIs

Der Begriff HTML5 fasst eine bunte Sammlung aus verfĂŒgbaren und geplanten APIs zusammen, auf die im Browser von JavaScript aus zugegriffen werden kann. Einige dieser APIs ermöglichen heute, Anwendungen fĂŒr den Browser zu realisieren, die vor wenigen Jahren noch Plugins erfordert hĂ€tten. Die prominentesten Vertreter sind sicherlich Video oder WebRTC. Zum Beispiel ist heute die Public-Key-VerschlĂŒsselung bereits im Web-Client integrierbar oder das Reagieren auf Sensordaten der Betriebs-Hardware des Browsers möglich. Es folgt eine persönliche Auswahl an etablierten APIs und ein Ausblick auf einige noch recht frische.

Artikel

Batch-Computing in Java

Auch heute noch gibt es Bedarf fĂŒr die wohl Ă€lteste Form der elektronischen Datenverarbeitung. Dass Batch immer noch relevant ist, zeigt der junge JSR 352 fĂŒr Batch-Verarbeitung in Java EE 7. In diesem Beitrag diskutieren wir verschiedene Fragestellungen, die im Zusammenhang mit der Modernisierung bestehender und Umsetzung neuer Batch-Prozesse auftreten, und gehen auf Strategien und Technologieauswahl ein, die bei der Implementierung von Batch in der JVM auftreten können.

Artikel

Apache Cassandra

FĂŒr Daten ohne Grenzen

Artikel

Logging konsolidieren und Performance gewinnen

Apache Log4j 2.0 ist eine Neuimplementierung von Log4j zeichnet sich vor allem durch einen höheren Durchsatz – dank asynchronem I/O – aus. Die Neuerungen des Frameworks machen Lust darauf, Log4j2 einzusetzen. Da drĂ€ngt sich die Frage auf, wie die VorzĂŒge von Log4j2 in einem System genutzt werden können, wenn Teile noch Log4J 1, commons-logging oder Ähnliches verwenden.

Artikel

Micro-Services in Java realisieren – Teil 2: Web-Apps in Docker-Umgebungen

In dem ersten Teil dieser zweiteiligen Reihe haben wir uns mit der Realisierung von Web-Apps mit dem leichtgewichtigen Framework DropWizard beschĂ€ftigt. In diesem Teil beschĂ€ftigen wir uns mit der offenen Plattform Docker. Damit lassen sich Umgebungen definieren und voneinander isolieren. Wie sich Docker von virtuellen Maschinen unterscheidet und was das fĂŒr unsere Anwendungen bringt, stellt dieser Artikel vor.

Artikel

Attribut-basiertes Testen mit Scala

Wo hilft funktionale Programmierung bei der Automatisierung von Testaufgaben

Artikel

Micro-Services in Java realisieren – Teil 1: Leichtgewichtige Web-Apps mit DropWizard

Dieser Beitrag in zwei Teilen stellt zwei interessante Zutaten fĂŒr den Bau von Micro-Services vor: Docker.io zum Bereitstellen von definierten Umgebungen fĂŒr unsere Services und DropWizard zum Realisieren von Web-Anwendungen. In dieser Ausgabe beschĂ€ftigen wir uns zuerst einmal mit der Realisierung und einem dafĂŒr passenden Framework.

Artikel

Hystrix – Wider den Totalausfall

Michael T. Nygard hat in seinem Buch „Release It!” sehr anschaulich die Folgen von sich fortpflanzenden Fehlern beschrieben. Seine klare Empfehlung lautete, Isolationsmuster wie zum Beispiel Leistungsschutzschalter – engl. Circuit Breaker – in die Software zu integrieren, um TotalausfĂ€lle zu vermeiden. Mit Hystrix hat Netflix ein Framework bereitgestellt, das den Einbau von solchen Schaltern vereinfacht. Dieser Beitrag stellt das Framework vor.

Artikel

Domain-Driven Design in Clojure

Gut bewertet

Artikel

Endlich viel erben?

Im Fahrwasser der Lambda-Funktionen werden in Java 8 Default-Methoden eingefĂŒhrt, um Interfaces aus dem JDK abwĂ€rtskompatibel um neue Methoden zu erweitern. Hier schließen wir an den Artikel von Christian Robert (Default-Methoden in Java 8, JavaSPEKTRUM 03/2013) an. Wir klĂ€ren bis zu welchem Grad Mehrfacherbung in Java einzieht und wie wir die Möglichkeiten und das Risiko fĂŒr bestehende Systeme einschĂ€tzen.

Artikel

ROCA: Keine Angst vor HTML und JavaScript

ROCA ist ein Architekturstil zur Entwicklung anstĂ€ndiger und zukunftsfĂ€higer Web-Frontends. Er umfasst eine Reihe von Empfehlungen sowohl fĂŒr die Client- als auch fĂŒr die Serverseite. Der ROCA-Stil erfordert von vielen Java-Entwicklern ein gewisses Umdenken. Grund genug, sich den Stil genauer anzuschauen.

Artikel

Hypermedia as the Engine of Application State – Spring Hateoas

RESTlos glĂŒcklich

Artikel

Log-Daten effektiv verarbeiten mit Apache Kafka

Mit Apache Kafka stellen wir ein ungewöhnliches Messaging-System vor. Es besticht durch persistente Speicherung der Nachrichten, hohen Transaktionsdurchsatz und gute Skalierbarkeit. Kafkas Architektur ermöglicht dadurch nicht nur den Einsatz in Online-Szenarien mit zeitnaher Verarbeitung, sondern auch in Offline-Szenarien mit stark zeitverzögerter Verarbeitung von Nachrichten. Dieser Beitrag demonstriert, wie Kafka auch mit großem Log-Aufkommen zurecht kommen kann.

Artikel

Micro-Cloud mit Cloud Foundry

In dieser Ausgabe stellen wir mit Cloud Foundry einen Plattformdienst vor, mit dem Java-Anwendungen in der Cloud betrieben werden können. Die Plattform stellt Java-Anwendungen eine virtuelle Umgebung mit Ressourcen zur VerfĂŒgung. Wir haben Cloud Foundry fĂŒr diese Kolumne gewĂ€hlt, weil es die Cloud-Plattform auf den eigenen Rechner holt. Dadurch wird die Cloud- Entwicklung netzunabhĂ€ngig.

Artikel

Java – Funktional ohne Zauberei

Totally Lazy

Artikel

Eine Lanze fĂŒr XML brechen

Heute – zehn Jahre nach der ersten Vorstellung von JAXB im JavaSPEKTRUM – möchte ich noch einmal eine Lanze fĂŒr XML brechen. Auch wenn JSON, der sympathische Cousin von XML, immer mehr Freunde gewinnt, bietet XML immer noch einiges, wenn auch selten genutztes Potenzial. In dieser Kolumne möchte ich ein paar Aspekte von XML noch mal in Erinnerung rufen.

Artikel

Java-Programme mit Clojure wĂŒrzen

FĂŒr jeden, der einen Lisp-Dialekt auf der JVM verwenden will, ist Clojure eine naheliegende Wahl. Es verbindet die Ausdruckskraft von Lisp mit der Vielzahl von bestehenden Java-Bibliotheken. Was zur Integration von Clojure mit Java gehört und wie sich die MĂ€chtigkeit von Clojure auswirkt, wollen wir am Beispiel der Clojure-Bibliothek Incanter betrachten.

Artikel

Neo4j – Eine graph-basierte transaktionale Datenbank

Es rockt total

Artikel

Webanwendungen mit dem Play!-Framework

Das Play!-Framework ist ein recht junges, vollstĂ€ndiges MVC-Framework, das den Charme von Ruby on Rails hat. Aber anstatt unreflektiert jede Entwurfsentscheidung von Rails ins Play!-Framework zu ĂŒbernehmen - wie das manch andere Rails-Klone gemacht haben -, haben die Entwickler darauf geachtet, es so zu konstruieren, dass es sich gut in das Ökosystem eines typischen Java-Entwicklers einfĂŒgt.

Artikel

OpenShift Express

Oracle hat bereits zu Zeiten des Grid-Computing-Hypes verkĂŒndet, dass die bestehenden Java EE/J2EE-Standards völlig ausreichen, um Systeme fĂŒr das Grid zu entwickeln. Diese Idee gewinnt im Cloud Computing bei verschiedenen „Platform as a Service (PaaS)“-Anbietern an Bedeutung, zumal der vom JCP akzeptierte JSR 342 verschiedene Features fĂŒr Java EE 7 vorschlĂ€gt, die effizientere PaaS ermöglichen. Einen der Anbieter habe ich herausgepickt und mit ihm erste Geh-Versuche gemacht.

Artikel

NoSQL - Einsatzgebiete fĂŒr die neue Datenbank-Generation

Sie haben die Wahl!