Une application Web d’entreprise avec Spring3, Spring-Data & SpringMVC en 20Ko?

Dans cette série d'articles je souhaite réaliser une vraie application d'entreprise autour des nouveautés de Spring (3+).

Ces nouveautés apportent d'énormes simplifications et conduit de facto à produire beaucoup moins de code (et donc moins de bugs).

Cette application doit permettre:

- de créer (modifier, supprimer) un (nouveau) enregistrement,
- d'afficher la liste des enregistrements présents.

L'objectif est de montrer les énormes simplifications apportées par Spring & Spring MVC ainsi que par ses projets satellites (Spring-Data, par exemple).

L'application est un projet maven multi-modules (multi-couches) basé sur spring avec:

- un module DAO à part basé sur Spring-data. Il sera packagé dans un jar,
- un module Service basé sur Spring packagé dans un jar,
- un module Web basé sur SpringMVC packagé dans un war ou jar.

Et pour ne pas être original, j'ai ajouté un certain nombre de contraintes:

  • Respecter la séparation en couches de l'application (bonne conception horizontale),
  • Appliquer les simplifications de SpringMVC,
  • Utiliser la validation (Bean validation de la JSR 303) avec les annotations,
  • Limiter la taille du war de l'application à 20Ko (sans les dépendances),
  • Respecter le principe DRY (meilleure conception verticale),

Ceci donne un vrai projet web qui adresse les problématiques et difficultés réels.

Pour chaque besoin spécifique de notre projet, la démarche était de choisir la (bonne) brique technologique selon deux critères (moyennement complexes):

  1. la brique est robuste et très "user friendly",
  2. la brique n'exige pas de produire trop de code (de tuyauterie).

Aussi, pour réaliser l'application, nous avons utilisé les technologies suivantes:

  • maven 3,
  • Java 5+
  • Spirng, Spring-MVC, Spring-Data,
  • Spring-JS (ou Dojo),
  • JSR 303 (validation),
  • DisplayTag pour afficher la liste des enregistrements (JQuery suffira).

Commençons par une présentation rapide de spring-data.

Spring-Data réduit considérablement le coût économique de la couche d'accès aux données relationnelles ou NoSQL.

Il simplifie l'accès aux bases de données SGBDR ou de type NoSQL.

Spring-Data peut-être combiné avec le framework QueryDSL (Domain Driven Design) afin de réaliser des requêtes complexes.

Avec Spring-Data-JPA, le développeur bénéficie d'un certain nombre de méthodes d'accès à la base sans écrire une ligne de code d'implémentation.

Le projet Spring-Data-JPA vise à améliorer la mise en œuvre de la couche d'accès aux données en réduisant considérablement l'effort d'écriture du code d'implémentation en particulier pour les méthodes CRUD et de recherche.

La notion centrale dans Spring-Data-JPA est le "Repository". Le repository est une interface à écrire par le développeur.

Il déclare, dans cette interface, les méthodes utiles d'accès aux données et Spring-Data-JPA fournit les implémentations nécessaires.

Notez que la même approche est appliquée à des contextes autres que JPA comme pour les bases non relationnelles.

Vous pouvez télécharger les sources de la démo1 ici.

Avec Spring-Data, écrire des méthodes de requête à la base se fait en 3+1 étapes:

  • Déclarer une interface Repository,
  • Ecrire la signature de la méthode de requête (CRUD ou de recherche),
  • Configurer Spring pour la génération automatique,
  • Appeler dans le client (ou test unitaire) les méthodes du Repository

C'est aussi facile!

Mais là on n'a fait que survoler la surface de Spring-Data.

Nous poursuivons le reste du billet dans la suite.

3 commentaires

  1. Bonjour,
    Billet très intéressent. Y a t’il une suite ? j’aurais bien aimé voir l’architecture du projet fini.

  2. Bonjour @Clement,
    Merci pour le commentaire
    Hélas! L’article date un peu.
    Depuis, beaucoup d’évolutions dans le monde JEE rendent une partie de l’architecture choisie obsolète.
    Peut-être, aurais-je l’envie de reproduire ce même article avec des notions revisitées en phase avec les évolutions récentes.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *