Artikel in der Java-Aktuell Themenschwerpunkt Architektur

Die Ausgabe 02/2022 enthält einen Artikel mit einem Anwendungsszenario für eine Cloud-basierte Software Architektur. Das Spring-Beispiel mit Cloud-Support und DataProvider Anbindung zur REST Schnittstelle stellt das komplexe Zusammenspiel von mehreren separaten Diensten dar, im Artikel wird auf die Hintergründe zu Design-Entscheidungen eingegangen und die eingesetzten Patterns bei der Software-Entwicklung beschrieben. ‘Wartbare, zukunftsfähige Software-Architekturen in Java mit Annotation-Processing, Spring Boot und Cloud-Technologien‘, ab Seite 33.

Screenshot der GUI Anwendung, die eine REST Schnittstelle in die Clout nutzt

Das beschriebene Beispiel (verfügbar auf GitHub) besteht aus einem Maven Projekt mit mehreren Modulen, eines enthält die Bibliothek mit dem Datenmodell, eines ist eine Spring-Applikation mit Vaadin Web-Benutzerschnittstelle und zuletzt ist ein Spring REST Dienst implementiert, der die Daten bereitstellt und von der GUI genutzt wird. Das Projekt zeigt auch wie ein REST-Query mit Feld-Sortierung und -Filterung durchgeführt wird und die entsprechende FeignClient Definition aussehen kann.

Modul DataModel

Dieses Modul enthält das Datenmodell definiert die Entitäten die von UserInterface und RestServiceEndpoint verwendet werden. Das Projekt enthält auch Value-Objects mit Attributen für Filtern und Suchen (TripFilterVO). Der Benutzer gibt die Filterkriterien in der Oberfläche ein und diese werden weiter über die REST Schnittstelle an den Microservice geschickt. Es muss kein zusätzlicher Code geschrieben werden, da die VO’s automatisch aus den Entities generiert werden.

Modul UserInterface mit Cloud-Anbindung

Enthält den Programmcode der Benutzeroberfläche mit einer Liste und einer Eingabemaske zum editieren. Der meiste Code zur Darstellung der Komponenten wird aus den Informationen am Datenmodell erzeugt.

Start über die Kommandozeile mit mvn spring-boot:run

Das Projekt zeigt wie Paging mit einer REST Serviceschnittstelle implementiert werden kann und nutzt generierte Client-Requests  (z.B.com.uc_mobileapps.examples.restclient.TripClient). Der Code wird automatisch aus den Methoden im Controller ‘TripController’ erzeugt, der im RestServiceEndpoint Projekt definiert ist.

Wenn eine neue Service-Method hinzugefügt wird, aktualisiert das System den Client zur Übersetzungszeit.

Die Oberfläche der Anwendung ist über die Socket-Adresse  https://localhost:8080 erreichbar. Die Service-Discovery wird im Beispiel simuliert und mappt alle Anfragen auf  ‘localhost:8081’ (siehe unten).
Weiterführende Informationen über die Ordnerstruktur auf der englischen Seite.

Modul RestService

Dieser Dienst hört auf localhost:8081, es ist eine Spring Cloud Implementierung eines REST-Controllers. Die Datenbank-Anbindung mit Paging und Filter ist hier implementiert. Im Projekt ist keine Service-Registration konfiguriert (siehe Spring-Cloud Consul).

Start von der Kommandozeile mit mvn spring-boot:run

Das Modell wird nach SeifeModels/RestService.classmodel.json exportiert und zur Erstellung der Clients für den REST-Endpoint benutzt.