OPEN SOURCE @ HUK-COBURG – Quarkus-Amazon-Services und DynamoDB Enhanced Client

Open Source Anwendungen spielen eine entscheidende Rolle in der Entwicklung von Software. Durch transparenten Quellcode wird eine gemeinschaftliche Fehlerbehebung und Qualitätsverbesserung ermöglicht. Entwickler aus aller Welt können Innovationen vorantreiben, voneinander lernen und ihre Fähigkeiten verbessern. Die Sicherheit der Software wird gestärkt, da potenzielle Schwachstellen rasch entdeckt und behoben werden. Die Skalierbarkeit und Anpassungsfähigkeit von Open Source Anwendungen tragen dazu bei, dass sie sich schnell weiterentwickeln und den Bedürfnissen einer breiten Zielgruppe gerecht werden.

Ohne die Ergebnisse vieler anderer Entwickler wäre es sehr viel aufwendiger Anwendungen zu realisieren! Teil einer Open Source Community zu sein und etwas zurückzugeben, was wiederum hunderte oder tausende Entwickler nutzen, ist einfach ein tolles Gefühl.

Quarkus-Amazon-Services und DynamoDB Enhanced

Die Erweiterung Quarkus-Amazon-Services ermöglicht die bequeme Integration des AWS SDK for Java 2 in Quarkus-Anwendungen um mit AWS Diensten zu interagieren, darunter auch DynamoDB Tabellen.

Im Service SALES bearbeiteten wir folgenden Anwendungsfall: Tarifrechner der HUK24 sollen um Aktionen erweitert werden. Wir haben uns dazu entschieden die Aktionscodes sowie deren Metadaten (Start/Beginn/Bonus/Teilnahmebedingungen/...) in einer DynamoDB Tabelle zu verwalten. Unsere Quarkus Anwendung soll aus der Tabelle Daten einlesen, um den vom Kunden eingegebene Aktionscodes zu validieren. Der Microservice soll serverless als AWS Lambda umgesetzt sein.

Leider unterstützte die Erweiterung nur den Low-Level DynamoDB Client, bei dem es nötig ist alle Felder, die aus der Tabelle geladen werden sollen, einzeln zu benennen.

Hier ein kleines Beispiel um einen Eintrag aus einer Tabelle zu laden, welcher unter einem String primaryName zu finden ist. Wir laden von dem Eintrag den Namen, eine Beschreibung und ein Freitextfeld für zusätzliche Informationen:

Code

Die Rückgabe der Methode muss nun verarbeitet werden und durch einen passenden Mapper in das gewünschte JAVA Objekt zu überführen. Bei neuen Feldern müssen mehrere Code-Stellen angefasst werden.

Als Lösung gibt es den DynamoDB Enhanced Client, welcher ein auf Annotationen basiertes Mapping anbietet. Hier ein Beispiel einer Java-Klasse mit Annotationen.

Code

Und hier ein Minimalbeispiel, welches den Enhanced Client verwendet sowie die MyTableEntry-Klasse. Auf eine Ausimplementierung wurde verzichtet.

Code

Mehr ist nicht nötig, um Einträge in eine DynamoDB Tabelle zu speichern, zu laden und zu löschen.

Gemeinsam ans Ziel kommen

Aufgrund technischer Limitierungen konnte zur damaligen Zeit nur der Low-Level Client mit der Quarkus-Erweiterung verwendet werden. Bei der Nutzung des Enhanced Clients kam es leider zu Exceptions und zusätzlich funktionierte der Build als native Anwendung durch die GraalVM nicht.

Ich habe bei meiner Recherche eine Erweiterung auf GitHub gefunden, welche dies ermöglicht, schrieb den Entwickler an und gemeinsam haben wir dieses Feature durch diesen PullRequest in die Erweiterung eingebaut. Dabei war wichtig die Struktur einer Quarkus Extension einzuhalten, genug Integrationstest mitzuliefern und den anderen Entwicklern die Probleme sowie die Lösung zu erklären.

Ihr könnt euch den PullRequest gerne durchlesen, lasst euch von den vielen Kommentaren nicht abschrecken. Es hat schon einiges an Zeit und Nerven gekostet dies umzusetzen aber es war auch sehr lehrreich und spaßig.

Veröffentlicht am 04. September 2023 – Autor: Michael Hamburger

Michael

Du hast Lust, uns und unsere Abteilung zu unterstützen?

Wir suchen noch Backend-Entwickler: Backend-Entwickler:in

Zum Stellenmarkt