Spring : la validation simplifiée avec Spring. Démos pratiques.

Ce post a pour objectif de vous faire découvrir les nouveautés de Spring bean validation capable dorénavant de supporter les  JSR 303 & 349. En exemple, nous verrons comment réaliser des tests unitaires et des tests d'intégration (où le validator est injecté par spring) et nous rédigerons des tests d'intégration dans lesquels nous abuserons des nouvelles annotations de spring-boot. A titre d'exemple, nous verrons également comment employer les annotations @RunWith(SpringRunner.class) et @SpringBootTest.

Spring-Batch (Part III) : Comment lire ou parser efficacement divers fichiers CSV avec RecordSeparatorPolicy?

 

L'objet de ce billet est de vous présenter les "best-practices" afin de lire les divers de formats de fichiers csv du simple à l'exotique.

Le reader de spring-batch doit être configuré (et uniquement si possible 🙂 ) pour gérer des formats particuliers de fichiers csv.

La démarche reste identique pour les autres formats de fichiers.

Comme il est difficile de traiter tous les cas pour un blog, la démo ci-après se focalise sur ce fichier csv:

Spring-Batch (Part II): Validation and Skip Policy. Ou comment gérer les données non valides dans un batch?

Après la première partie sur les tests unitaires du reader de Spring-Batch, nous passons à la validation des données input.
Ce second volet exige un minimum de connaissances sur spring & spring-batch.

Nous tentons de relever plusieurs défis majeurs correspondants aux attentes en production:

  • identifier avec précision le numéro de la ligne invalide (non traitée par le batch lancé la veille),
  • générer un rapport exploitable du déroulement du batch (exécutée la nuit),
  • porter en base les erreurs rencontrées en traçant correctement leurs causes exactes,

Nous nous posons la question de la validation des lignes lues par le Reader et aussi comment définir une politique d'éviction (skip) de ces lignes non valides.

En franglais, c'est la question validate & skip policy dans les batchs.

Ce sont deux notions bien distinctes mais fort bien liées.

Spring-Batch (Part I) : Tester unitairement & mocker simplement. FlatFileItemReader

 

 

 

 

Comment tester unitairement et simplement les trois composants principaux de Spring-Batch: Reader, Processor, Writer?

Plus précisément comment mocker le(s) contexte(s) spring-batch pour ces trois composants?

Ce billet, sur plusieurs parties, présente quelques démos pratiques permettant de réaliser ce genre de tests unitaires (et d'intégration en prime).

Les démos sont réalisées en combinant le duo de spring: spring-batch et spring-boot.
Ce duo simplifie grandement (voire à outrance) la configuration de spring et laisse en arrière-plan beaucoup trop de complexité.

La première démo permet de réaliser un projet spring-batch avec un job contenant un seul step, le tout configuré avec java (no xml).

L'unique (step du) job consiste à charger en base (BD) les lignes d'un fichier csv nommé entreprises.csv.

Nul besoin à ce stade de processor!

Ainsi, notre job contient uniquement les composants nécessaires: un reader et un writer.

A la fin de cette première partie, nous écrirons un test TU Junit du reader.

Le seul intérêt de tester unitairement le(s) reader(s) est lorsque le métier exige un traitement personnalisé ce qui est généralement le cas! 🙁

Une fois le test TU posé et automatisé, le(s) refactoring(s) et les évolutions (agilité oblige) deviennent des opérations plus sûres.

Introduction à Spring Integration

Cet article a pour objectif d’introduire Spring Integration. Dans un premier temps, j’y décrirai les différents concepts inhérents à Spring Integration, puis nous verrons un exemple basique d’intégration dans une application.

Spring integration est, comme son nom l’indique, un projet du framework Spring. Il respecte donc tous les principes de Spring dont voici les plus importants : la séparation des préoccupations (separation of concerns), l’injection de dépendances (dependency injection) ou le couplage lâche (loose coupling). En revanche, Spring Integration permet de pousser ces principes encore plus loin en permettant de faire communiquer facilement des beans Spring de manière asynchrone et indépendante via un système de messaging, sans qu’ils aient besoin de se connaître mutuellement.

De plus, Spring Integration fournit également des outils pour communiquer avec des systèmes externes (JMS, RabbitMQ, etc).

Spring Integration est une implémentation des Enterprise Integrations Patterns. Il est construit autour du modèle pipes-and-filters. Les pipes sont n’importe quel composant capable de transporter les messages alors que les filters sont ceux capables de produire ou consommer des messages.

Les mixins de Jackson 2: de vraies améliorations à découvrir

jsonjackson2-logo-onlyxmlindex

 

Les dernières améliorations dans jackson 2,  en particulier les mixins, permettent de mieux gérer les annotations sur les classes (entités) utilisées.

Au lieu d'alourdir ces entités avec les annotations de mapping xml/json ou encore de figer les noms des propriétés retournées par le mapping, nous pouvons, désormais, définir des interfaces séparées contenant ces annotations.