JHipster: Moderne Applikationen mit BEST-P

JHipster: Moderne Applikationen mit BEST-P

Stellt euch vor, ihr setzt ein neues Projekt auf. Vielleicht mit Spring und Angular? Dann werden einige Schritte wohl bekannt sein:

  • Man modelliert die Entities.
  • Man erstellt das Backend in Form von JPA Respositories und REST Services zum Abspeichern und Anzeigen der Daten
  • Man erstellt das Frontend um Daten anzuzeigen und zu bearbeiten.
  • Die Applikation wird mithilfe von Spring Security abgesichert
  • Unit und Performance Tests wollen geschrieben werden
  • Eine CI Konfiguration für Jenkins und/oder GitLab wird geschrieben
  • Ach ja: Und Monitoring… eventuell?

Vieles davon sind Anforderungen an unsere Software die wir für jedes neue Projekt implementieren. Dabei haben sich Standards und Best Practices (BEST-P) durchgesetzt. Diese halten wir als Entwickler natürlich immer ein, vor allem wenn der Zeitdruck hoch ist. Naja zumindest sind wir alle immer "stehts bemüht". Ein schöner Traum, wenn wir all dies, in kurzer Zeit, erstellen könnten ohne auch nur selber eine Zeile Code zu schreiben und gleichzeitig alle BEST-P einhalten.

Ein hipper Traum

Zum Glück bleibt dieser Traum kein Traum, sondern ist schon lange erfüllt worden. Das Stichwort heißt: JHipster.

JHipster is a development platform to generate, develop and deploy Spring Boot + Angular/React Web applications and Spring microservices.
-JHipster-

Was ist JHipster eigentlich?

Im Grunde ein Code Generator auf Yeoman Basis. Doch das Projekt „nur" als Code Generator zu bezeichnen kommt diesem bei weitem nicht gerecht. Viel mehr liefert JHipster eine komplette „Development Plattform", dessen Ziel es ist Applikationen zu generieren, zu entwickeln und zu deployen. Bei der Generierung einer Java Web Applikation werden dabei aktuelle BEST-P genutzt. Unter anderem:

  • Security mit Spring Boot inklusive eines einfachen User Managements
  • Dokumentierte REST Apis mit OpenAPI
  • Eine ausführliche Testabdeckung des generierten Codes
  • Ein strukturierter, gut kommentierter Code
  • Ein responsive Frontend auf Basis von Bootstrap

JHipster bietet daneben noch eine ganze Reihe von Subgeneratoren an, die Teile der Anwendung generieren können. Unter anderem den Entity Subgenerator. Der Subgenerator kann Entity Klassen, die Spring JPA Repositories, REST Services und den dazugehörigen Frontend Code generieren. Das Frontend besteht dabei aus einem CRUD Frontend. Inklusive sind natürlich alle BEST-P!

Installation von JHipster

Um JHipster zu nutzen, gibt es verschiedene Möglichkeiten.

  • Ganz klassisch, eine lokale Installation über NPM oder YARN
  • JHipster online, ermöglicht online eine Applikation zu erzeugen
  • Ein Docker Image, dass mit einer Basis Installation von JHipster daherkommt
  • Eine Vagrant box Installation, eine komplette virtuelle Maschine die alle nötigen Tools vorinstalliert hat
  • Installation mit einem Package Manager. Als Beta markiert und nur für Windows und MacOS erhältlich.

JHipster kann also auf verschiedensten Wegen installiert oder genutzt werden. Bei einer klassischen Installation über NPM oder YARN steht eine CLI zur Verfügung. Mit dieser können neue Applikationen erstellt oder Subgeneratoren aufgerufen werden. Wir wollen uns einmal JHipster Online genauer angucken und welchen Mehrwert uns das bietet.

JHipster Online

Ausgangs habe ich gesagt, JHipster ist im Kern ein Code Generator für Web-Applikationen. Was ich sonst über eine CLI machen würde, kann ich mir auf der Weboberfläche zusammenklicken. Dabei werden einige Aspekte direkt beim Erstellen der Applikation festgelegt. Darunter fällt z. B. welche Datenbank es sein darf, welche Art von Authentifizierung, welcher Cache, ob wir mehrere Sprachen unterstützen wollen und ob ein Monitoring mit der JHipster Registry stattfinden soll. So können wir unterschiedliche Datenbanken für Produktion und Development festlegen. Das spiegelt sich dann anschließend in den Konfigurationsfiles von Spring Boot wieder​. Wenn wir uns jetzt an die Ausgangssituation erinnern: Dann haben wir nach dem Erstellen der Anwendung schon einiges abgedeckt: Wir haben Security mit einem User Management, ein dazugehöriges Frontend und auch die dazugehörigen Tests. Trotzdem fehlen uns immer noch unsere Entities und alle dazugehörigen Klassen zum Speichern und Anzeigen.
Aber auch dabei bietet uns JHipster und auch JHipster Online Hilfe an! Neben der Erstellung einer Anwendung gibt es noch weitere Features die uns das Leben einfacher machen. So kann ich nicht nur ein neues Projekt erstellen, das ich als ZIP herunterladen könnte, sondern auch gleich mein Github oder GitLab Account verknüpfen. Dadurch wird direkt ein neues Repository erstellt und der generierte Code dorthin gepushed. ​Jetzt können wir direkt Subgeneratoren auf das Projekt loslassen. Beispielsweise kann ich aus meinen Datenmodellen den entsprechenden Code für Projekte erstellen lassen und wahlweise auch direkt eine CI Pipeline anlegen lassen. Bei einer klassischen, lokalen Installation, würde ich das mithilfe der Subgenearoten über eine CLI machen. Durch die Verknüpfung mit JHipster Online kann ich das nun direkt mit einem Mausklick starten. Die Datenmodelle erzeuge ich mir dazu im JDL-Studio. Auch hier habe ich eine schöne grafische Oberfläche, die mir meine Entities und die Bezieheungen direkt visualisiert.  JHipster Online verknüpft nun direkt die im JDL-Studio angelegten Modelle mit meinem Account und zeigt diese in JHIpster Online an.

​Angenommen ich möchte nun eins meiner Modelle auf ein Projekt anwenden, dann wird ein Branch mit den entsprechenden Änderungen erstellt. Diesen kann ich nun manuell reviewn und dann mergen. Analog funktionier das ganze, wenn ich eine CI Konfiguration erstelle. Jetzt haben wir sogar unsere Entites mit einem CRUD Frontend. Und immer noch keine eigene Zeile Code geschrieben! 

Zusammenfassung

An diesem Punkt haben wir eine funktionierende Applikation, inklusive Spring Security, User Management, Datenbankanbindung, CRUD Frontend für unser Datenmodell, Unit Tests, Performance Test und vielem mehr. Selbst aber noch keine einzige Zeile Code geschrieben. JHipster kann uns also einen Großteil unserer "fleiß-" Arbeit abnehmen.