Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Java Spring
  3. Spring et JHipster
Extrait - Java Spring Le socle technique des applications Jakarta EE (5e édition)
Extraits du livre
Java Spring Le socle technique des applications Jakarta EE (5e édition) Revenir à la page d'achat du livre

Spring et JHipster

Introduction

JHipster, créé en 2014 par Julien Dubois, est un générateur d’applications full stack open source qui combine efficacement Spring Boot pour le backend et les Single Page Applications (SPA) pour le frontend, soutenu par des outils comme Yeoman, Maven, et Gradle. Reconnu pour sa capacité à évoluer rapidement grâce au soutien d’une large communauté de plus de 600 contributeurs, JHipster se distingue par sa personnalisation aisée, permettant aux développeurs de créer des applications sur mesure via des templates modifiables. Avec plus de 168 000 téléchargements mensuels et l’usage dans plus de 300 entreprises, cet outil favorise un démarrage accéléré des projets technologiquement complexes, offrant un avantage stratégique pour l’exploration de nouvelles technologies sans nécessiter de partir de zéro. JHipster intègre la génération du backend, de la base de données, et du frontend avec des technologies comme Angular, React, ou Vue, tout en supportant la préparation d’environnements cloud et dockérisés, avec une couverture complète des tests. Disponible tant en ligne de commande qu’en version web simplifiée, JHipster encourage l’adoption de bonnes pratiques dans le développement d’applications modernes, facilitant ainsi la création rapide d’applications tout en promouvant l’efficacité et la modularité dans le développement de solutions DevOps orientées Spring.

1. JHipster web

Voici un exemple simple avec la version en ligne disponible à l’adresse : https://start.jhipster.tech/

Cette version est gratuite et open source. Il est tout à fait possible de la modifier pour la rendre disponible aux développeurs d’une société en personnalisant les modèles.

images/19EP01N.png

Il faut tout d’abord s’enregistrer, afin d’être dirigé sur la page principale.

images/19EP02N.png

La génération du projet s’effectue en deux étapes :

  • génération d’un squelette applicatif vide ;

  • ajout des entités métier.

Nous pouvons demander à l’outil d’héberger les fichiers source générés sur GitHub ou...

Créer un blueprint

La documentation officielle est ici : https://www.jhipster.tech/modules/creating-a-blueprint

Un blueprint JHipster est un générateur Yeoman qui est composé à partir d’un sous-générateur JHipster spécifique pour étendre les fonctionnalités de ce dernier. Le blueprint peut remplacer tout getter défini du sous-générateur et fournir ses propres modèles et fonctionnalités. Les blueprints JHipster sont répertoriés sur le marketplace JHipster (https://www.jhipster.tech/modules/marketplace/#/list...

JHipster comme outil multi-technologies

L’outil JHipster est un très bon outil pour essayer des technologies et voir comment elles s’articulent entre elles. Il essaie d’en montrer l’état de l’art et les bonnes pratiques, JHipster supporte de nombreux frameworks et de nombreuses technologies.

Dans sa version 8, il gère les technologies suivantes.

1. Côté client

Côté client

Fonctionnalités

HTML5

HTML5 est la dernière révision majeure du HTML (format de données conçu pour représenter les pages web).

CSS3

Feuilles de style en cascade version 3.

BootStrap

Collection d’outils pour la création du design de sites et d’applications web.

TypeScript

Langage de programmation qui améliore et sécurise la production de code JavaScript.

Angular

Angular est un framework JavaScript qui permet de développer des pages web.

React

React est une bibliothèque JavaScript pour faciliter la création d’application web monopage, via la création de composants dépendant d’un état et générant une page (ou portion) HTML à chaque changement d’état.

Vue

Framework JavaScript pour la création d’interfaces utilisateurs.

Redux

Redux est un conteneur d’état prédictible pour les applications JavaScript.

WebSocket

WebSocket est un protocole réseau web basé sur des canaux de communication full-duplex par-dessus une connexion TCP.

npm

npm (Node Package Manager) est un gestionnaire de paquets JavaScript largement utilisé pour l’installation, la gestion et la distribution de bibliothèques et de modules JavaScript.

Webpack

Webpack récupère des dépendances et des modules JavaScript entre autres pour générer des fichiers statiques.

SASS

SASS (Syntactically Awesome Stylesheets) est un langage de génération de feuilles de style.

Browsersync

Browsersync synchronise les URL, les interactions et les changements de code dans un navigateur sur plusieurs appareils.

Jest

Jest est un framework de test JavaScript populaire qui permet aux développeurs de créer et d’exécuter des tests unitaires et d’intégration pour leurs applications JavaScript et React.

Cypress

Cypress est un framework de test end-to-end pour les applications...

Structure du projet

Nous allons illustrer l’architecture des applications générées avec JHipster via l’étude d’un cas de génération d’application simple Angular/Spring Boot.

1. La partie front

La partie front peut utiliser par exemple Angular. Elle est « responsive », c’est-à-dire que l’affichage se réorganise si nous changeons la taille de la zone d’affichage du navigateur web. Il s’agit d’une Single Page Application, c’est-à-dire qu’il n’y a qu’une page qui se met à jour par AJAX. L’application générée utilise HTML5 Boilerplate (https://html5boilerplate.com/) et Twitter Bootstrap (http://getbootstrap.com). Des tests sont générés pour Karma.

Pour le développement de la partie front, JHipster utilise Yeoman avec Angular, React ou Vue.

Ce générateur permet d’utiliser en fait tous les meilleurs frameworks clients disponibles actuellement.

2. Les grandes lignes de la partie back

Nous ne présentons ici que les grandes lignes de la partie back.

Nous utilisons pour cet exemple une application monolithe avec une base SQL H2 et un front Angular.

La partie front Angular n’est pas présentée, car elle sort du cadre de cet ouvrage. Le lecteur pourra s’appuyer sur le livre Angular - Développez vos applications...

Applications générées

1. Spring Boot

Le générateur JHipster profite de la possibilité de générer directement une application Spring Boot préconfigurée. Il est très facile de changer la configuration pour être dans une stack Spring classique dans le cas où vous ne pourriez pas utiliser Spring Boot. Pour ce faire, le plus simple est de regarder le pom.xml effectif déduit par votre outil de développement préféré et de refaire le lanceur.

Spring Boot permet donc de créer rapidement une application fonctionnelle. La configuration est simplifiée.

a. Système de gestion des dépendances

Il est possible de générer les fichiers de configuration du build pour Maven et Gradle. Nous ne verrons que les aspects de la génération de projets basés sur Maven. JHipster utilise les profils pour personnaliser les éléments externes comme la base de données pour avoir des valeurs spécifiques en développement et en production.

b. Utilisation de Spring Security

L’intégration de Spring Security est très bien faite, ce qui nous permettra d’étudier des exemples concrets.

c. Spring MVC REST + Jackson

Nous profiterons de cette utilisation pour introduire ce sujet que nous n’avions pas traité auparavant. Nous utiliserons Swagger pour...

Étude des sources générées

1. Dépendances Maven

L’application utilise les dépendances Maven principales suivantes :

Dépendance

Version

tech.jhipster:jhipster-framework

8.1.0

org.springframework.boot:spring-boot-configuration-processor

3.2.0

org.springframework.boot:spring-boot-loader-tools

3.2.0

org.springframework.boot:spring-boot-starter-actuator

3.2.0

org.springframework.boot:spring-boot-starter-cache

3.2.0

org.springframework.boot:spring-boot-starter-data-jpa

3.2.0

org.springframework.boot:spring-boot-starter-logging

3.2.0

org.springframework.boot:spring-boot-starter-mail

3.2.0

org.springframework.boot:spring-boot-starter-oauth2-resource-server

3.2.0

org.springframework.boot:spring-boot-starter-security

3.2.0

org.springframework.boot:spring-boot-starter-test

3.2.0

org.springframework.boot:spring-boot-starter-thymeleaf

3.2.0

org.springframework.boot:spring-boot-starter-undertow

3.2.0

org.springframework.boot:spring-boot-starter-web

3.2.0

org.springframework.boot:spring-boot-test

3.2.0

org.springframework.security:spring-security-data

6.2.0

org.springframework.security:spring-security-test

6.2.0

org.springdoc:springdoc-openapi-starter-webmvc-api

2.3.0

com.fasterxml.jackson.datatype:jackson-datatype-hibernate6

2.15.3

com.fasterxml.jackson.datatype:jackson-datatype-hppc

2.15.3

com.fasterxml.jackson.datatype:jackson-datatype-jsr310

2.15.3

com.fasterxml.jackson.module:jackson-module-jaxb-annotations

2.15.3

com.tngtech.archunit:archunit-junit5-api

1.2.1

com.tngtech.archunit:archunit-junit5-engine

1.2.1

com.zaxxer:HikariCP

5.0.1

io.dropwizard.metrics:metrics-core

4.2.22

io.micrometer:micrometer-registry-prometheus

1.12.0

jakarta.annotation:jakarta.annotation-api

2.1.1

javax.cache:cache-api

1.1.1

org.apache.commons:commons-lang3

3.13.0

org.ehcache:ehcache (classifier: jakarta)

3.10.8

org.hibernate.orm:hibernate-core

6.3.1.Final

org.hibernate.orm:hibernate-jcache

6.3.1.Final

org.hibernate.orm:hibernate-jpamodelgen

6.3.1.Final

org.hibernate.validator:hibernate-validator

8.0.1.Final

org.liquibase:liquibase-core

4.24.0

org.mapstruct:mapstruct

1.5.5.Final

org.mapstruct:mapstruct-processor

1.5.5.Final

org.testcontainers:jdbc

1.19.3

org.testcontainers:mysql

1.19.3

2. Configuration de l’application

L’application est basée sur une configuration entièrement en Java avec les annotations. 

Toute la configuration se trouve dans le package com.mycompany.myapp .config et ses sous-packages....

JHipster et WebFlux

WebFlux a été intégré dans JHipster 6 et amélioré dans JHipster 7.

Cet ajout était très attendu par les utilisateurs. Il est déjà très complet et permet les expérimentations.

Au niveau des bases de données, il nous propose :

  • SQL (H2, MySQL, PostgreSQL, MSSQL) ;

  • MongoDB ;

  • Cassandra ;

  • [BETA] Couchbase ;

  • [BETA] Neo4j ;

  • No database.

Si on choisit SQL, il propose alors en utilisant R2DBC :

  • H2 ;

  • PostgreSQL ;

  • MySQL ;

  • MariaDB ;

  • Microsoft SQL Server.

Les couches domain, service, web sont conformes aux spécifications que nous avons vu dans le chapitre sur WebFlux.

Le fait d’avoir une application réactive change un peu certaines classes de configuration.

1. Configuration DatabaseConfiguration

Pour les bases SQL, jHipster utilise R2DBC avec l’annotation @EnableR2dbc Repositories dans la classe DatabaseConfiguration.

Nous avons des convertisseurs pour les dates :

@Configuration 
@EnableR2dbcRepositories({ "com.mycompany.myapp.repository" }) 
@EnableTransactionManagement 
public class DatabaseConfiguration { 
 
  private final Logger log = LoggerFactory.getLogger( 
      DatabaseConfiguration.class); 
 
  private final Environment env; 
 
  public DatabaseConfiguration(Environment env) { 
    this.env = env; 
  } 
 
  /** 
   * Open the TCP port for the H2 database, so it is available 
   * remotely. 
   * 
   * @return the H2 database TCP server. 
   * @throws SQLException if the server failed to start. 
   */ 
  @Bean(initMethod = "start", destroyMethod = "stop") 
  @Profile(JHipsterConstants.SPRING_PROFILE_DEVELOPMENT) 
  public Object h2TCPServer() throws SQLException { 
    String port = getValidPortForH2(); 
    log.debug("H2 database is available on port {}", port); 
    return H2ConfigurationHelper.createServer(port); 
  } 
 
  private String getValidPortForH2()...

Points clés

Points à retenir :

  • JHipster génère une application Spring propre qui peut servir de modèle et propose un bon support de l’hypermédia et de HATEOAS.

  • JHipster permet de tester et de comparer différentes options de générations.

  • JHipster est très bien pour découvrir les technologies du moment.

  • Nous pouvons facilement personnaliser le code généré par JHipster.