public enum { java, logiciels libres,… }

public enum { java, logiciels libres,… }

Touraine Tech 2019 — 2 février 2019

Touraine Tech 2019

J’ai fini l’édition 2019 du Touraine Tech. Tout d’abord, merci aux organisateurs pour l’accueil et l’organisation. C’était vraiment top!

Cette année, je n’ai pas pu faire beaucoup de conférences. Mon Hands on m’ayant retenu une bonne partie de l’après midi, que ça soit durant le talk ou après pour décompresser 🙂

Mon hands on portait sur l’architecture, j’ai eu une vingtaine de personnes qui l’on suivi et ont pratiqué sur différents sujets.

La cave à vin connecté a remporté un franc succès, du moins pendant la présentation des sujets 🙂

Voici le feedback que j’ai eu sur ma présentation:

Vous trouverez les slides ci-dessous ( voici le lien pour aller directement sur slideshare) :

RDV l’année prochaine !

Deuxième crossover : Opensource business models — 23 janvier 2019
Objectif Top Architecte ! — 14 janvier 2019
Touraine Tech 2019 — 25 décembre 2018

Touraine Tech 2019

Mon sujet de talk « Objectif Top Architecte » a été retenu pour l’édition 2019 de Touraine Tech.

Réservez le 1 février 2019 dans votre agenda !

Tout d’abord merci aux organisateurs pour leur confiance. Je suis vraiment  honoré d’être sélectionné une deuxième année consécutive.

Cette année, j’animerai un hands on sur l’architecture. Je vais tâcher de vulgariser quelques principes qui me paraissent importants et animer un « coding dojo de l’architecture ».

Pas besoin d’être architecte ou (vraiment, … mais vraiment pas besoin) d’avoir une certification TOGAF pour y participer 🙂

Tracer (facilement) les entrées sorties d’une API REST — 1 décembre 2018

Tracer (facilement) les entrées sorties d’une API REST

Il y a quelques jours, je cherchais comment tracer rapidement et simplement les entrées sorties d’une API REST en appliquant quelques formatages, des filtres, et des insertions en base si besoin.

Travaillant sur une stack SpringBoot, vous allez me dire : oui tu peux faire des filtres. Pour être franc, j’ai essayé d’ appliquer des interceptor et filtres mais dans mon contexte, ça ne collait pas.

Me voilà donc à la recherche d’une solution faisant le taff et qui soit peu intrusive dans mon contexte.

J’ai trouvé par hasard au fil de mes lectures sur Stackoverflow le framework logbook réalisé par … Zalando ( et oui, ils ne font pas que des chaussures) en licence MIT. 
Ce composant ne fait qu’une seule chose, mais il le fait bien !

Il permet entre autres de s’intégrer dans une stack JAVA ( JAX-RS ou SpringMVC), de filtrer, récupérer les différentes informations des requêtes et réponses et enfin de formatter selon l’envie (ex. JSON).

Voici un exemple de mise en œuvre dans un projet SpringBoot:

Dans le  fichier pom.xml, ajouter cette dépendance:

<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
<version>1.11.2</version>
</dependency>

Dans une de vos classes Configuration, définir la factory de Logbook

@Bean
public Logbook createLogBook() {
// too easy : return Logbook.create();
return Logbook.builder()
.condition(Conditions.requestTo("/helloworld"))
.formatter(new JsonHttpLogFormatter())
.build();
}

Dans mon cas j’ai fait un filtre en n’incluant que l’ API /helloworld et j’ai formatté en JSON.
On peut également modifier le processus d’écriture pour ne pas écrire dans un fichier mais en base par ex.

Ensuite, j’ai ajouté la configuration du logger dans le fichier application.properties

logging.level.org.zalando.logbook:TRACE

Et voila !

Dans la console, lors d’un appel ou d’une réponse à mon API, j’ai le message suivant :

018-12-01 15:14:18.373 TRACE 3605 --- [nio-8080-exec-1] org.zalando.logbook.Logbook              : {"origin":"remote","type":"request","correlation":"c6b345013835273f","protocol":"HTTP/1.1","remote":"127.0.0.1","method":"GET","uri":"http://127.0.0.1:8080/helloworld","headers":{"accept":["/"],"host":["127.0.0.1:8080"],"user-agent":["curl/7.52.1"]}}
2018-12-01 15:14:18.418 TRACE 3605 --- [nio-8080-exec-1] org.zalando.logbook.Logbook : {"origin":"local","type":"response","correlation":"c6b345013835273f","duration":48,"protocol":"HTTP/1.1","status":200,"headers":{"Content-Length":["11"],"Content-Type":["text/plain;charset=UTF-8"],"Date":["Sat, 01 Dec 2018 14:14:18 GMT"]},"body":"Hello world"}

Vous remarquerez que les requêtes / réponses peuvent désormais être associés grâce à un identifiant de corrélation. On peut facilement déterminer le temps de traitement d’une requête ou encore faciliter les recherches.

Vous trouverez tout le code dans ce repo github.




Gérer plusieurs clés et plusieurs repo GIT — 16 novembre 2018

Gérer plusieurs clés et plusieurs repo GIT

En attendant d’avoir plus d’imagination, voici un rapide tuto pour gérer plusieurs référentiels GIT avec des clés SSH différentes.

Imaginons que vous deviez vous connecter sur différents serveurs GIT (ex. github et gitlab) avec des emails différents et donc des clés RSA différentes ( oui je sais ce cas n’arrive pas souvent ). Le tout sous Windows et GNU/LINUX. Sous GNU/LINUX ont peut le gérer différemment via la commande ssh-add.

Pour pouvoir gérer ceci de manière simple, j’ai fait la manipulation suivante :

Dans le répertoire ~/.ssh. J’ai crée les différentes clés avec la doc fournie par GITHUB. Puis, j’ai crée le fichier ~/.ssh/config avec le contenu suivant:

 

Host monhost1.fr
HostName monhost1.fr
User git
IdentityFile ~/.ssh/id_rsa

Host monhost2.fr
HostName monhost2.fr
User git
IdentityFile ~/.ssh/nouvellecle_rsa

 

Et voila !

Après avoir fait les différentes configurations coté serveur ( c.-a-d. ajout des clés publiques ), je peux interagir avec les différents serveurs ( pull, push ).

En espérant que ça puisse servir à d’autres

 

Premier cross over … — 29 octobre 2018
Installer docker ce sur Debian 9 — 26 septembre 2018

Installer docker ce sur Debian 9

Bon, ça fait quelques temps que je n’ai rien posté…
Voici un rapide tuto pour installer docker-ce sur une debian9. Oui, je sais, docker est déjà présent sur les dépôts, mais si vous souhaitez avoir une version un peu plus récente, vous pouvez passer par l’installation de la version ce fournie par docker.

Pré-requis

Supprimer les éventuelles installations de docker et docker-compose


#apt-get remove docker docker-compose

Installation

Lancer les commandes suivantes:

# apt-get install apt-transport-https ca-certificates
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
# add-apt-repository \ 
"deb [arch=amd64] https://download.docker.com/linux/debian \ 
$(lsb_release -cs) \ stable"

Puis lancer


# apt update

# apt install docker-ce

Installation de docker-compose

Lancer les commandes suivantes:


# curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# chmod a+x /usr/local/bin/docker-compose

Configuration des droits

Pour lancer docker depuis un utiliser non root, il faut lancer les commandes suivantes:


# groupadd docker

# adduser monutilisateur docker

# usermod -aG docker monutilisateur

Après ceci, vaut mieux redémarrer le pc …

Configuration du démon

Voici quelques config à appliquer pour que le démon soit accessible par des outils tels que le plugin maven ou encore configurer l’accès à un proxy

Configuration du port

Exécuter la commande:


# systemctl edit docker.service

Entrer le code suivant:


[Service]

ExecStart=

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

Et l’enregistrer sous /etc/systemd/system/docker.service.d/docker.conf

Configuration du proxy

Avec la même commande


# systemctl edit docker.service

Entrer la configuration suivante:


[Service]

Environment="HTTP_PROXY=http://mon_proxy:mon_port/"

Environment="NO_PROXY=127.0.0.1"

Activation des configurations

Lancer les commandes suivantes:


# systemctl daemon-reload # systemctl restart docker

Validation

Maintenant, vous pouvez valider votre configuration avec la commande:


$ docker run hello-world

Devoxx 2018 — 20 avril 2018

Devoxx 2018

L’édition 2018 de DEVOXX touche bientôt à sa fin. Pour ceux qui ne connaissent pas cette conférence, c’est LA conférence sur le développement en France. A titre personnel, je peux plus apprendre en trois jours à cette conférence qu’en formation.

img_20180419_155256624099247.jpg

Tout d’abord un grand merci aux organisateurs. Ils assurent réellement. Bon, pour l’année prochaine, n’hésitez à retenir ma conférence 😉

Si vous n’avez pas eu la chance d’assister aux trois jours, il faut savoir que vous pourrez voir les rediff sur la chaine youtube.

Les tendances

Voici les tendances que  j’ai retenu :

  • Spring, spring et encore spring
  • Du réactif en veux tu en voila
  • Du DDD sinon rien
  • Du devops

et le plus impressionnant pour moi était la conférence de JOSHUA BLOCH(!!!) sur Effective Java. Pas tant dans le contenu, car il reprenait peu ou prou celui du livre, mais de voir une personne de ce calibre (dans le monde JAVA, c’est une rock star) en France, c’est assez impressionnant.

Les keynotes ( dont celle sur le smart building) étaient dans l’ensemble très intéressantes. Les conférences étaient également d’un très bon niveau. J’ai pu découvrir par exemple l’avance que peut avoir l’Estonie sur l’IT ( voir le projet x-road )  par rapport à la France qui lance le projet french road.

Voici quelques conférences qui m’ont plu et interpelé :

Je ne vais pas trop les décrire ( voire pas du tout ), elles seront disponibles prochainement sur la chaine youtube .

Intégration et médiation avec Apache Camel — 10 avril 2018

Intégration et médiation avec Apache Camel

Depuis quelques jours, je teste Apache Camel pour la mise en œuvre  de médiations.

Apache-camel-logo

Apache Camel est un framework assez ancien. Il est similaire à Spring Intégration et permet l’ implémentation de patterns d’intégration.

Les patterns d’intégration

Qu’est-ce qu’un pattern d’intégration allez-vous me dire ? C’est une solution d’architecture ou plus simplement une recette de cuisine permettant d’avoir une solution toute prête à une problématique d’intégration donnée. L’ensemble de ces patterns est décrit sur ce site ( ne vous attardez pas sur le look des années 90 … ).

Exemple :

PublishSubscribeSolution

 

Camel permet simplement de gérer l’intégration via un DSL.

Choix d’implémentations

On peut faire pas mal de choses avec ce FRAMEWORK et de plusieurs manières. J’ai fait les choix d’implémentation suivants :

  • Tout se fera avec SPRING … et pas en XML 🙂
  • Il faut que toutes les médiations soient testables
  • J’exécute le code dans un FATJAR ( pourquoi avec springboot )

Configuration de la route

Apache Camel définit les médiations dans des routes. Elles se définissent assez rapidement .

Les routes commencent par une instruction from et se terminent par une ou plusieurs instructions to.

Pour mon exemple, j’extrais les données d’une table et les stocke dans un fichier.

Tout se configure par des URLs. La première permet d’extraire les données via JPA/HIBERNATE. Une entité Address permet le requêtage. La seconde permet le stockage dans un fichier texte JSON.

Elles sont externalisées dans des fichiers de configuration pour faciliter les tests et accessibles via SPRING.

Lancement de la route

Le lancement de la route se fait dans une méthode main() :

Tests

Camel fournit une API de test assez bien fournie. Elle permet notamment de mocker des endpoints existants (ex. : le fichier de sortie de mon cas de test).

Dans mon cas, j’ai décidé de remplacer la base de données que j’interroge en input par une base HSQLDB chargée en mémoire. Le fichier de sortie est, lui, remplacé dynamiquement par un mock. Pour ce faire, j’ai utilisé les « adviceWith »

Pour aller plus loin

Il y a pas mal d’exemples sur le GITHUB de CAMEL. Vous pouvez également acheter le livre « Camel In Action ». Ca ne vaut pas Effective Java 🙂 , mais vu qu’il est écrit par le principal développeur, c’est une très bonne référence.