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.

Date Java8: Exemples de manipulation des dates en java 8

L'un des changements importants en java 8 est l'introduction de nouvelle Api (JSR 310) pour la gestion des dates.

La nouvelle api datetime introduite dans java 8 s'est inspirée de Joda-Time (cette dernière est très utilisée dans les projets).
Ceci dit, l'api java.time de java 8 est différente de Joda sur certains détails.

A ce propos, l'auteur de Joda-Time (Stephen Colebourne) a participé à la réalisation de la  JSR 310.

En effet, la pratique de l'api java.util.Date (donc pour les version java <8) a mis en évidence que son design est assez déroutant, voire peu intuitif, sur certains points:

  • les années des dates démarrent de 1900,
  • les jours commencent à 1, les mois à 0,
  • pas thread safe,
  • sans parler de la gestion du lenient.

La nouvelle api java date & time est donc guidée par ces trois axes:

  • domain driven design (voir site oracle pour plus de précisions),
  • immutabilité renforcée pour garantir thread safe,
  • séparation des calendriers et chronologies.

L'objet de ce blog est de vous donner quelques concepts avancés par des exemples sans rentrer dans la théorie.

Notez donc que ce billet n'est pas structuré comme une introduction à l'api java.time.

Quaoar Virtual Machine – Walkthrough

23Introduction

"Quaoar" is a "Boot2Root" VM originally created for the Hackfest 2016 CTF. It aims to train your computer security skills. You just have to launch the Virtual Machine, and then find a way to get root ! This VM is in free access on Vulnhub.

We just ping the IP adress given by the VM to ensure everything is alright.

$ ping -c 3 192.168.56.101
PING 192.168.56.101 (192.168.56.101) 56(84) bytes of data.
64 bytes from 192.168.56.101: icmp_seq=1 ttl=64 time=0.275 ms
64 bytes from 192.168.56.101: icmp_seq=2 ttl=64 time=0.438 ms
64 bytes from 192.168.56.101: icmp_seq=3 ttl=64 time=0.265 ms

--- 192.168.56.101 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2039ms
rtt min/avg/max/mdev = 0.265/0.326/0.438/0.079 ms

And.. Let's go!

Devoxx 2017 : Retour sur « Reactor 3 et la programmation réactive sur la JVM »

J’ai eu la chance de participer cette année à la 6ème édition du Devoxx France. Je vous propose dans cet article de revenir sur la conférence "Reactor 3 et la programmation réactive sur la JVM" présentée par Simon Baslé qui travaille sur le projet Reactor. J’ai apprécié cette présentation qui plus est, elle est sur un thème dans l'air du temps : la programme réactive.

La recherche dans un site Drupal avec SearchAPI

La recherche est un élément primordial dans un site web.

Les moteurs d'indexation tel que SolR ou ElasticSearch ont la puissance nécessaire pour répondre aux demandes fortes de recherche de nos clients et de simplicité d'utilisation des internautes. Cependant, la mise en place d'un tel moteur d'indexation a un coût important. Il existe sous Drupal une solution alternative à moindre coût. Nous utilisons pour cela un moteur d'indexation en base de données.

Ce moteur d'indexation est fournit par le module search_api_db. Cette API permet de mettre en place une recherche FullText et à facette dans un site Drupal en stockant les indexes en base de données.

Ajouter son grain de sel dans un mot de passe

Un grain de sel dans le cryptage de MDP

Description & concept

Cette technique est notamment utilisée par UNIX et permet de se protéger en cas de vol du hash md5. Comme une même chaîne donne toujours le même hash avec md5, si on chiffrait tous les mots de passe probables avec md5 (ou au moins un très grand nombre) on pourrait à partir d'un hash retrouver le mot de passe en clair. La constitution d'un tel dictionnaire prend du temps et doit être faite à l'avance, toutefois elle est envisageable. La parade se fait par l'introduction d'un grain de sel qui va "déformer" le hash. Ce grain de sel est en fait un très grand nombre que l'on concatène au mot de passe avant de le chiffrer, mais un exemple éclairera tout :

$motDePasse = "toto"; $hash = md5($motDePasse);

Parcourir l'article

ShellCheck outil d’analyse pour vos scripts shell

Qu'est-ce que ShellCheck ?

ShellCheck est un outil d'analyse de scripts shell assez puissant dans la lignée de Lint qui devrait se trouver dans la boîte à outil de tout devops Unix.

Cet utilitaire vous permettra d'identifier de manière statique (sans exécuter le code) un bon nombre de petits défauts dans vos scripts shells qui, sur votre utilisation courante, fonctionnent peut-être comme un charme mais qui mis dans les mains d'autres personnes provoqueront des erreurs pour le moins embêtantes.

Par exemple, imaginez que pour une raison X ou Y, la variable suivante n'est pas renseignée...

rm -rf "$PATH_TO_FOLDER/"*

C'est une erreur triviale mais qui peut coûter très cher; bien d'autres sont listées par Koalaman, l'auteur du script.

Parcourir l'article

DSC – Desired State Configuration

Vous cherchez un moyen d’automatiser vos installations d’applications ou projets ? Vous en avez marre de répéter 50 fois les mêmes actions, et vous commencez à avoir des crampes aux doigts à force de configurer vos services applicatifs à la main ? DSC (Desired State Configuration) est fait pour vous ! Et cerise sur le gâteau, c’est du PowerShell !

Selon la Bible technet, DSC est « une plateforme de gestion en PowerShell ». « Il permet le déploiement et la gestion des données de configuration pour les services et l’environnement sur lequel ces services doivent s’exécuter. ».

DSC dispose de deux modes de fonctionnement : Push et Pull. Le premier consiste à « pousser » ponctuellement une configuration sur un ou plusieurs serveurs. Le Pull repose sur un service web qui va être consommé par des machines afin de s’assurer qu’elles sont dans l’état de configuration attendu, et appliquer cette configuration le cas échéant.