Dropwizard? Wir bauen ein UserService – Part II

Nachdem der erste Teil des Tutorials durchgearbeitet ist, haben wir ein lauffähiges Projekt. Darauf bauen wir auf und erstellen unseren ersten Service. Endlich! Ich verzichte an dieser Stelle auf ein langweiliges „Hello World“ Beispiel und erstelle einen Userservice.

Doch erstmal: Was sind denn eigentlich die wichtigsten Bestandteile eines Dropwizard Service?

Erstellen einer Konfigurationsdatei

Dropwizard unterstützt Konfigurationsdateien, so dass alle Konfigurationsparameter ohne neu zu kompilieren geändert werden können. Daher ist es eine gute Idee diese auch zu nutzen. Die Konfigurationsdatei muss im Project Root angelegt werden, andernfalls wird sie beim Starten des Servers nicht gefunden. Der Name spielt keine Rolle, da er beim Starten übergeben werden muss. Ihr könnt also immer nur eine Konfigurationsdateien gleichzeitig nutzen! Ich nenne meine Konfigurationsdatei user.yml. Da wir im weiteren Verlauf eine PostgreSQL Datenbank benutzen wollen, kommen die entsprechenden Einstellungen in die Konfigurationsdatei.

Erstellen einer Klasse zum Nutzen der Konfigurationsdatei

Nun endlich fangen wir mit der eigentlichen Entwicklung an. Dropwizard mapped eure Konfigurationsdatei auf POJOs (Plain Old Java Objects). Zuerst müssen wir eins schreiben. Wir erstellen über unsere IDE ein neues Package (hier de.trollr.example.configuration) und in diesem Package legen wir unsere Konfigurationsklasse an.

Diese Klasse bildet unsere Konfigurationsdatei ab. Dort haben wir die Einstellungen für die Datenbankverbindung abgelegt. Wir werden später in der Hauptklasse unseres Service eine Instanz der Konfigurationsklasse erstellen um eine Hibernate Instanz zu initialisieren.

Ein Entitity-Objekt und ein Data Access Objekt

Als nächstes Erstellen wir unser Entitiy-Objekt. Auf die Annotations gehe ich nicht weiter ein, da es den Rahmen sprengen würde. Schaut einfach in die entsprechenden Dokumentationen, falls ihr Fragen dazu habt. Da Data Access Object (DAO) und Entitiy-Objekt für mich Core Funktionalitäten sind, habe ich ein neues Packagenamens de.trollr.example.core angelegt. 

Jetzt haben wir eine Entity, die den Benutzer darstellt. Sie ist noch relativ simpel, im späteren Verlauf werden wir aber noch weitere Felder hinzufügen. Nun fehlt nur noch das DAO. Dies ermöglicht es uns, Daten aus der Datenbank zu holen und das Entity-Objekt damit zu füllen.

Um das DAO zu verstehen müsst ihr euch etwas in Hibernate einlesen. Darum werdet ihr als Java Web-Entwickler kaum herum kommen. Deshalb werde ich auch hierauf nicht weiter eingehen.

Eine Ressourcenklasse erstellen

Als nächstes müssen wir die Ressourceklasse anlegen. Dafür erstellen wir wieder ein neues Package. Wir wollen es ja ordentlich strukturiert haben. Das Package nenne ich de.trollr.example.resources. In der Ressourcenklasse legt ihr die vorhandenen Endpoints unsere Restschnittstelle fest.

Wie ihr sicherlich schon gesehen habt, haben wir vorerst zwei Endpoints definiert: /users und /users/{id}. Wenn wir über den Browser /users aufrufen, erhalten wir ein JSON Objekt mit allen im System vorhandenen Nutzern. Hängen wir noch eine ID hinten dran, erhalten wir nur die Daten des Nutzer mit der entsprechenden ID. Später werden wir diverse Bereiche noch mit entsprechenden Rechten versehen. Wir wollen ja nicht das Hinz und Kunz unsere Nutzerdaten lesen können!

Die Serviceklasse

Dies ist das Herzstück unseres REST Service. Wie ihr seht laufen hier alle Fäden zusammen. Klassen, die wir zuvor angelegt aber noch nicht genutzt haben, kommen hier das erste mal zu Einsatz. Der Weg hier her war aber auch ziemlich lang! Letztendlich ist unsere Serviceklasse für das Initialisieren und Bootstrapping zuständig. Zudem erstellen wir mit Hilfe unserer Konfigurationsklasse eine Hibernate Instanz. Wie euch (oder eurer IDE) sicherlich schon aufgefallen ist, wird in der Run Methode etwas genutzt, dass uns bisher noch fehlt – ein Healthcheck.

Die Healthchecks

Mit Healthchecks stellt ihr sicher, dass euer Service so funktioniert wie ihr es erwartet. Wenn ihr also eine Datenbank im Hintergrund nutzt, macht es Sinn zu prüfen, ob ihr eine Verbindung herstellen könnt. Diese Checks sind kein Muss, sollten aber trotzdem erstellt werden, da euer Service sonst vielleicht startet, ihr dann aber aus allen Wolken fallt, wenn er nicht richtig funktioniert.

Die Datenbank

Damit Hibernate richtig funktioniert, müsst ihr in eurer PostgreSQL Datenbank noch eine Tabelle anlegen.

Wir haben nun alles was wir brauchen und können unseren Service das erste Mal testen. Ihr habt unterschiedliche Möglichkeiten euren Service zu starten. Entweder könnt ihr in der pom.xml folgende Zeilen ergänzen:

Jetzt müsst ihr über die Konsole in das Project Root navigieren und den Service mit

zum Leben erwecken. Alternativ macht ihr es so wie es in der Dropwizard Dokumentation vorgeschlagen wird und gebt im Projekt Root folgenden Befehl ein:

Last But Not Least könnt ihr aber auch einfach in eurer IDE in den Projekteinstellungen die notwendigen Argumente beim Starten mitgeben. Dies ist mein bevorzugter Weg, da er am einfachsten ist. Wenn der Service läuft, könnt ihr ihn testen in dem ihr euren Browser startet und localhost:8080/users öffnet. Nun solltet ihr die in der Datenbank gepflegten Benutzer als JSON zurück bekommen. Über localhost:8081 erreicht ihr die von Dropwizard bereitgestellte Administrationsoberfläche. Dort könnt ihr euren Service überwachen.

Nach viel Arbeit, Schweiß und Zeit haben wir tatsächlich unseren ersten REST Service gebaut.

Das könnte Dich auch interessieren...

2 Antworten

  1. Peter sagt:

    DatabaseConfiguration ist seit einiger Zeit abstrakt. Und nu?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen