Spring Boot JSF Template für Maven multimodul project

Im Januar hatte ich mich bereits mit Spring, JSF und Tomcat beschäftigt. Im Februar und März ging es in meiner Recherche und privaten Projekten hauptsächlich um Spring Boot und der integration mit JSF. Das Resultat dieser Arbeit wird im folgenden Beschrieben.

Als Grundlage für diesen Blogbeitrag habe ich ein (bisher) unveröffentlichtes Projekt verwendet, welches ein Prototypen für eventbasierte Kommunikation mit mehreren API Versionen darstellt. Dazu mehr zu einem anderen Zeitpunkt. 🙂

Struktur

Durch einen meiner kürzlichen Mentoren habe ich mir bei neuen Projekten die folgende Projektstruktur angewöhnt:

  • <project>-api
  • <project>-api-REST-client
  • <project>-service
  • <project>-ui

Mit Hilfe dieser Struktur birgt viele Vorteile, welche ich nur kurz exemplarisch auflisten möchte und nicht weiter ins Detail gehen möchte:

  1. Die API Datenmodelle sind mit dem API Projekt einfach zu referenzieren
  2. Das UI Projekt kann mit geringem digitalen Footprint (Dependencies) in mehreren Anwendungen verwendet werde
  3. Die Logik und Konfiguration der Kernanwendung ist konsolidiert im Service Projekt

Technologien

Die in diesem Projekt verwendeten Frameworks und Bibliotheken habe ich hier aufgelistet. Diese Abhängigkeiten erleichtern mir während meiner Programmierung erheblich die Arbeit und verhindern überflüssigen Code, der durch Änderungen an der Organisation von Package oder Änderung von Models erneut erzeugt/angepasst werden müsste.

In meiner Erfahrung ist die Nutzung der in diesem Projekt genutzten Bibliotheken genügend flexibel um diese bei Bedarf aus zu tauschen oder durch andere Frameworks zu erweitern.

Los gehts!

Im Github Readme habe ich zwei Varianten beschrieben die Anwendung auszuführen.

  1. Plain Java 
  2. Docker

Bei beiden Varianten wird die Anwendung gestartet und die JPA Integration beim Start durch eine initiale Befüllung mit statischen Daten gefüllt.

JSF demo content

Die JSF Demo ist unter http://<SERVER>:8080/index.xhtml zu finden und enthält einen Teil der offiziellen Primefaces Demo und ein Integrationsbeispiel der javax.inject.Named  Bibliothek als Bean (link: IndexBean).

Maven Multimodul

Da das UI Projekt als Abhängigkeit in der Mavenstruktur verwendet wird, müssen die Resourcen der webapp unter META-INF/resources  platziert werden. Sonst werden diese nicht korrekt im Spring Boot Classpath aufgelöst.

Swagger

Swagger-ui

Die automatisch generierte Swagger-ui ist unter http://<SERVER>:8080/api/swagger-ui.html zu finden. Die Nutzung der Swagger-ui ist nicht teil dieses Beitrags und meiner Meinung nach sehr intuitiv.

Api Dokumentation

Neben der Swagger-ui ist die Api Dokumentation unter http://<SERVER:8080/api/v2/api-docs als JSON herunter zu laden. Diese kann im Swagger Editor verwendet werden um Rest-clients für verschiedene Sprachen zu generieren.

Dokumentation

Im Code habe ich an signifikanten Stellen INFO: Blöcke eingetragen um notwendige Konfigurationen oder Implementationen zu markieren und zu beschreiben. Des Weiteren werde ich in den nächsten Wochen die Dokumentation des Codes bei Bedarf noch (detailierter) beschreiben.

An sonsten sollten die README Dateien die ersten 5 Minuten mit dem Code abdecken. Danach hoffe ich, dass der von mir geschriebene Code leserlich genug ist um für Interessenten aussagekräftig zu sein 🙂

Ausblick

Das aktuelle Template wird in den nächsten Wochen in meinem oben kurz angedeuteten Prototypen verwendet (work in progress) und wird mir für zukünftige Projekte als Template dienen. Ich verspreche mir von diesem Template bei neuen Projekten schneller produktiv arbeiten zu können und somit effizienter zu Ergebnissen zu gelangen :-).

Quellen:

  • https://codenotfound.com/jsf-primefaces-example.html
  • https://github.com/code-not-found/jsf-primefaces/tree/master/jsf-primefaces-hello-world
  • http://joinfaces.org/

 

Schreiben Sie einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.