Schwerpunktthema

javaspektrum

Artikel

JSX-Komponenten mit Java nutzen

Die Bedeutung von Oberflächen beziehungsweise der Benutzbarkeit von Software im Allgemeinen hat in den letzten Jahren, zurecht, wieder vermehrt an Bedeutung gewonnen. Bei der Entwicklung von Weboberflächen in Microservice-Architekturen besteht hierbei die Herausforderung, teamübergreifend eine durchgehend passende Nutzererfahrung, insbesondere durch ein konsistentes Look & Feel, zu erzeugen. Diese Kolumne stellt einen möglichen Weg vor, um genau dies zu erreichen.

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

Schleusen auf im Kubernetes-Cluster

Artikel

Was ist die Magie von Spring Boot?

Spring Boot wurde entwickelt, um uns bei der Entwicklung von Spring-Anwendungen Arbeit und Entscheidungen abzunehmen. In der Praxis funktioniert dies so gut, dass häufig das Wort Magie verwendet wird. Die Verwendung dieses Wortes deutet jedoch auch darauf hin, dass wir nicht mehr wirklich verstehen, was dort vor sich geht. Genau dies möchte ich mit diesem Artikel angehen und dazu einen Einblick geben, wie Spring Boot funktioniert.

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

Alles Quark?

Artikel

Parametrizität in Java

So gut wie alle modernen Programmiersprachen erlauben es, Routinen über Werte und über Typen zu parametrisieren. In Java wird letzteres „Generics“ genannt, in C++ hingegen „Templates“. Obwohl die Konzepte die gleichen sind, unterscheidet sich die Implementation doch stark. In diesem Artikel möchte ich diese Art der Parametrisierung in Java unter die Lupe nehmen und erklären, warum „Type Erasure“ doch eine ganz gute Idee ist.

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?

In der Kristallkugel

Artikel

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

Mit Java 11 ist im September 2018 das erste Release, nach Java 8, mit Long-Term-Support erschienen. Neben den neuen Features und Änderungen geht es in diesem Artikel somit auch um das neue Support-Modell von Java. Und auch ein Blick in die nähere Zukunft von Java soll nicht fehlen.

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

Prinzipiell unabhängig

Artikel

Einsatz von Containern zum Testen

Container setzen sich beim Betrieb von Anwendungen immer mehr durch. Doch auch abseits davon helfen diese bei der Entwicklung und dem Testen von Anwendungen. Dieser Artikel zeigt, wie mithilfe der Java Bibliothek Testcontainers Container innerhalb von JUnit Tests verwendet werden können.

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

Die Gesundheit immer im Blick

Artikel

Jepsen – verteilte Systeme testen

An verteilten Systemen kommt heute kein Entwickler mehr vorbei. Selbst wenn man keines baut, setzt man häufig Komponenten ein, die ein verteiltes System sind. Hierzu gehören vor allem viele Vertreter von neueren Datenbanken. Dieser Artikel zeigt, wie man diese mit Jepsen testen kann.

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

Den Ăśberblick behalten

Artikel

Tooling fĂĽr JavaScript-Frontends

Nahezu jede Webanwendung besitzt einen Anteil an JavaScript im Frontend. Im Vergleich zu früher haben sich jedoch viele Dinge geändert. So sind heute zahlreiche Tools üblich, die den Entwickler unterstützen. Dieser Artikel gibt einen Überblick über aktuell genutzte Entwicklungswerkzeuge für die Entwicklung von JavaScript-Frontends.

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

Am Anfang war die Frage

Artikel

Microservice-Infrastruktur

Die Cloud und darauf aufbauend Microservices haben in den letzten Jahren die Softwareentwicklung stark beeinflusst. Vor allem im Bereich der Infrastruktur tut sich hier auch heute noch einiges. Dabei wird man den Eindruck nicht los, dass jede Woche ein neues Produkt veröffentlicht wird. In diesem Artikel versuche ich, Ihnen durch diesen Dschungel zu helfen.

Artikel

Features in Java 9

Bereits seit dem 26. Mai 2016 befindet sich Java 9 im „Feature Complete“-Stadium [1]. Somit ist es bereits jetzt möglich, sich einen Build des Early Access Release herunterzuladen [2] und neue Features auszuprobieren.

Artikel

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

Pacta sunt servanda

Artikel

AWS Lambda

Seit Kurzem gibt es von verschiedenen Cloud-Anbietern Services fĂĽr die Entwicklung serverloser Event-getriebener Anwendungen in der Cloud: Google (Cloud Functions), IBM (OpenWhisk), Microsoft (Azure Functions) und allen voran AWS Lambda von Amazon. Dieser Artikel beschreibt am Beispiel von AWS Lambda das Programmiermodell und hilft bei der Beantwortung der Frage, ob sich der Einsatz fĂĽr Ihre Anwendung lohnt.

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

Auf dem Weg von DIY zu LOTCOI

Artikel

Amazon EC2 Container Service

AWS bieten heutzutage die Plattform für viele Online-Präsenzen. So unterschiedlich Netflix, Expedia, Foursquare, Spotify und Airbnb auch sein mögen, alle nutzen die öffentliche Amazon Cloud Infrastruktur.

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

Lieber mit Batch-Framework

Artikel

Apache Cassandra

Bei Cassandra handelt es sich um eine spaltenorientierte Datenbank, die auf die Verteilung von Daten in großen Umgebungen zugeschnitten ist. Die Konzepte von Cassandra ähneln zwar relationalen Konzepten, unterscheiden sich aber dennoch. Tabelle 1 stellt die Cassandra-Konzepte ihren relationalen Pendants gegenüber:

Artikel

Logging konsolidieren und Performance gewinnen

Apache Log4j 2.0 ist eine Neuimplementierung von Log4j und zeichnet sich – dank asynchronem I/O – vor allem durch einen höheren Durchsatz aus. Die Neuerungen des Frameworks machen Lust darauf, Log4j2 einzusetzen. Aber es 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. Neben einer kurzen Vorstellung des Frameworks betrachten wir daher auch diesen Aspekt.

Artikel

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

Der goldene Käfig

Artikel

Attribut-basiertes Testen mit Scala

Das Testen eines Software-Systems ist eine alltägliche Aufgabe mit dem Ziel, dessen Konformität bezüglich einer Spezifikation nachzuweisen. Die grüne Ampel der Testumgebung ist in vielen Projekten das Fieberthermometer, welches die Normaltemperatur des Systems verkündet oder zu Warnungen bei Überschreitung führt. Doch können wir diesem Messgerät trauen? Das Attribut-basiertes Testen ist ein Werkzeug aus der Welt der funktionalen Entwicklung, welches uns helfen kann die Zuversicht in unsere Systeme zu erhöhen.

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

Quelloffene Leistungsschutzschalter fĂĽr alle

Artikel

Domain-Driven Design in Clojure

Obwohl DDD meist im Zusammenhang mit Objektorientierung genannt wird, sind die Prinzipien auch gut mit einer funktionalen Sprache umsetzbar. Eine EinfĂĽhrung in Clojure, dem Lisp fĂĽr die JVM, bietet beispielsweise [1] [2] [3].

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

Web-Apps zum WohlfĂĽhlen

Artikel

Hypermedia as the Engine of Application State – Spring Hateoas

Das kürzlich veröffentlichte Spring Hateoas vereinfacht das Verlinken von Ressource-Repräsentationen und bietet Mechanismen zur Link-Erzeugung und zum Reverse-Routing. Dieser Artikel stellt vor, wie diese Konzepte mit Spring MVC zusammen arbeiten und die Entwicklung von Webanwendungen erleichtern.

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

Einer der Plattformdienste

Artikel

Java – Funktional ohne Zauberei

In dieser Ausgabe stelle ich die verschiedenen Möglichkeiten vor, mit der quelloffenen Bibliothek Totally Lazy in Java funktional zu programmieren. Mit Hilfe bekannter Higher-Oder-Functions erlaubt sie, Collections elegant sequenziell oder auch nebenläufig zu verarbeiten. Dabei stellt Totally Lazy sicher, dass die Verarbeitung der Sequenzen lazy erfolgt. Wie Totally Lazy hilft, Teile unseres Quellcodes wartungsfreundlicher zu gestalten, ist Gegenstand dieses Artikels.

Artikel

Eine Lanze fĂĽr XML brechen

In der Ausgabe 05/2002 wurde erstmals JAXB im Java-SPEKTRUM [1] vorgestellt. In 2004 war XML eines der Hauptthemen. Heute – zehn Jahre später – begegnen uns immer noch Projekte, in denen die Objekt- Serialisierung hakt. Ob aufgrund der Größe der serialisierten Daten, des Hauptspeicherverbrauchs während des Bindens oder aufgrund der Rechenzeit für Transformationen – es gibt genügend Gründe, sich das Thema noch mal anzuschauen. Hier insbesondere aufgrund der verfügbaren Werkzeugkette außerhalb der Java-Welt.

Artikel

Java-Programme mit Clojure wĂĽrzen

Doppelplusgut

Artikel

Neo4j – Eine graph-basierte transaktionale Datenbank

Während die Kolumne von Michael Hunger in dieser Ausgabe den Aufbau von Neo4j und deren Performance genauer betrachtet, wollen wir uns diese Graphdatenbank aus der Perspektive des Anwendungsentwicklers, des „Praktikers”, anschauen. Um es mit den Worten des Amazon-CTOs Werner Vogels zu sagen: „Für alles, was mehrere Beziehungen und Verbindungen hat, rockt Neo4j total.“ [1]

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

Java EE in der Cloud

Artikel

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

Der Begriff NoSQL ist irreführend, da „No“ nicht einfach mit „kein“ gleichzusetzen ist. Für die meisten steht es nämlich für „Not only SQL“ – also nicht für ein Ende der Ab-fragesprache SQL. Kurz gesagt beinhaltet dieser Trend alle Arten von Datenspeichern, die eben nicht den relationalen Datenbanken (RDBMS) zuzuordnen sind. Häufig sind sie explizit für ein verteiltes Arbeiten mit großen bis sehr großen Datenmengen ausgelegt, bieten diesem Einsatzzweck entsprechende Datenstrukturen und verzichten bewusst auf Transaktionen. Aber in Bezug auf das Datenmodell, die Unterstützung dynamischer Abfragen, die Verteilung und den Persistenzmechanismus unterscheiden sie sich erheblich von einander: „NoSQL“ ist eine sehr breite und unscharfe Rubrik, die alle Varianten von Textdateien bis hin zu objektorientierten Datenbanken beinhaltet.