Posts

Es werden Posts vom 2020 angezeigt.

Clean Code in JUnit 5 und Spring Boot Tests

Bild
Clean Code ist auch im Unit-Test Pflicht. Hier schreibe ich eine saubere JUnit 5 Testklasse und übersetze sie anschließend in einen Spring Boot Test. Außerdem zeige ich ein paar JUnit 5 Features zum Parametrisieren von Tests und zum Testen von Exceptions. (JUnit 5 Logo 😮) Clean Code im JUnit Test Das Schreiben von möglichst einfachem und gut wartbaren Code (Clean Code) ist für viele Entwickler selbstverständlich. Die Unit-Tests zu diesem Code haben leider häufig eine schlechtere Code-Qualität. Dabei sollte es eigentlich bekannt sein, dass auch Unit-Tests leicht verständlichen und gut wartbaren Code benötigen, insbesondere wenn sie regelmäßig und automatisiert ausgeführt werden. In einem der bekanntesten Bücher zum Thema Clean Code von Robert Martin , gibt es deshalb ein eigenes Kapitel zu JUnit. Ich zeige euch nun einen JUnit Test und erkläre dann, welche Clean Code Prinzipien ich dabei angewendet habe. Getestet wird der InMemoryItemStore , den ich in einem früheren Blog-Post kernkonz

Clean Code mit dem Linux sed-Befehl

Bild
Clean Code ist ein wichtiges Thema, das manchmal aufwändig und langweilig sein kann. So musste ich vor kurzem in circa 100 Klassen überflüssige Annotationen löschen 😒 Statt Eclipse nutzte ich die Linux-Shell und sed, um alle Dateien mit einem Befehl aufzuräumen. Wie das genau geht, zeige ich euch hier. Das Problem bzw. der dreckige Code Die Modell-Klassen unserer Anwendung wurden früher zum Parsen von JSON in Java-Objekte und zum Schreiben per JPA in eine relationale Datenbank verwendet. Nach einem Redesign werden die Modell-Klassen nur noch zum Parsen von JSON Texten verwendet, so wie ich es z.B. hier zeige  rest-json-apis-in-java-leicht-gemacht.html . Im Zuge des Redesigns wurde leider vergessen die nun ungenutzten JPA Annotationen in den Modell-Klassen zu entfernen. Konkret sehen alle Klassen ungefähr so aus: import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated;

Java Anwendungen im Docker Container

Bild
Jede Java Anwendungen bauen, ausliefern und überall ausführen - klingt super und geht mit Docker! Ich zeige euch, wie ihr möglichst einfach und schnell in die Docker Welt einsteigt. Wir bauen ein Docker Image mit einer Java Anwendung, starten den eigenen Container lokal und testen die Anwendung im Container. Installationen und Vorbereitung Um die Voraussetzungen für den Einstieg in die Docker Welt zu schaffen, müssen wir folgendes tun: Docker für Windows installieren, siehe:  https://docs.docker.com/docker-for-windows/install/ Wenn ihr Linux oder MacOS nutzt, findet ihr auf der Docker Webseite auch passende Anleitungen. Eine Java-Anwendung schreiben, die dann in den Container kommt 😄 Falls ihr gerade keine zur Hand habt, könnt ihr diese verwenden: https://github.com/elmar-brauch/thymeleaf   Im Prinzip funktioniert es mit jeder beliebigen Java-Anwendung. Hier in der Demo nutze ich Vorteile von Spring Boot, um eine möglichst einfache Demonstration machen zu können. Docker Image bauen N

Validierung per Annotation in Java und Spring

Bild
Security ist mittlerweile ein allgegenwärtiges Thema. SQL-Injection oder Cross-Site Scripting Angriffe sind klassische Bedrohungen, die mittels Validierung aller Eingabedaten abgewehrt werden können. Macht man das ungeschickt, ist es aufwändig und unsicher. In diesem Artikel zeige ich euch, wie man auf einfache Weise per Annotation den eigenen Spring Web-Service absichert. Der harte Weg: Validierung im Java Code Die beste Methode SQL- oder Code-Injection Angriffe zu verhindern, ist Eingaben dieser Art nicht zu erlauben. Auf die Details wie diese Art von Angriffen funktionieren, möchte ich hier nicht eingehen - ihr könnt es aber z.B. hier nachlesen: https://de.wikipedia.org/wiki/SQL-Injection https://en.wikipedia.org/wiki/Code_injection Wichtig ist, dass die Überprüfung der Eingabedaten Server-seitig stattfinden, da Hacker Client-seitige Eingabevalidierung (z.B. mit JavaScript im Browser) umgehen können. Mit Java könnte man die Überprüfung der Eingabedaten mittels regulärer Ausdrücke du

Kernkonzepte von Spring: Beans und Dependency Injection

Bild
In diesem Blog-Post besprechen wir die Basics von Spring: Spring Beans und wie man diese miteinander vernetzt bzw. referenziert (Dependency Injection). Den kompletten Code zu diesem Blog-Post findet ihr in GitHub: https://github.com/elmar-brauch/beans Spring Bean Spring Beans sind Java Objekte, die durch den Spring IoC Container instanziiert und verwaltet werden. Der IoC (Inversion of Control) Container erstellt Beans anhand einer Bean Definition, die der Entwickler in Form von Annotationen oder xml Konfiguration bereitstellt. IoC ist ein Umsetzungsparadigma und bedeutet Steuerungsumkehr. Im Kontext des Spring Frameworks versteht man darunter, dass das Framework die Erstellung des Objektnetzes (Beans) anstelle des Entwicklers übernimmt.   In vorherigen Blog-Artikel haben wir bereits Projekte mit Spring Boot aufgesetzt, siehe z.B.  microservices-mit-spring-boot-erstellen.html . In diesen Projekten verwendeten wir die Annotation  @SpringBootApplication , welche eine Aggregation diverser