Accéder au contenu principal

Articles

Affichage des articles du 2025

Migration d’une application Spring Boot 2.2 vers Spring Boot 4.0 : retour d’expérience concret

 En 2019, nous avons développé une application métier basée sur : Java 8 Spring Boot 2.2.7 Gradle 6.6.1 Thymeleaf Bootstrap 4.3.1 Environ 40 000 lignes de code Java Fin 2025, voici un retour d’expérience concret sur la migration vers : Java 25 Spring Boot 4.0.1 Gradle 9.2.1 La partie thymeleaf, n'a pas été touché, il y a quelques warning concernant l'obsolescence de certain commande tel que th:include. Une migration plus rapide que prévu Un point important : en moins de 30 minutes, l’application démarrait sur la nouvelle stack. Évidemment, "ça démarre" ne veut pas dire "tout fonctionne", mais ce premier jalon est très révélateur : la base Spring Boot reste solide les outils de migration sont matures la dette technique était maîtrisée Les changements majeurs rencontrés De javax.* à jakarta.* C’est probablement le changement le plus visible. Tous les imports javax.* doivent être migrés ve...

Comment les annotations façonnent le code en Java

  Introduction : L'évolution de la métaprogrammation en Java Traditionnellement, l'inspection des métadonnées (comme les annotations) se faisait au runtime via la Réflexion . Approche puissante mais qui introduit des pénalités de performance et des risques d'erreurs cachées. L'approche moderne en Java est la Génération de Code à la Compilation , notamment via l' Annotation Processing , qui permet de transformer les métadonnées en classes sources compilées. J'ai ajouté cette possibilité à la librarie Formatic pour la gestion des formulaires par cette transition, révélant clairement les forces et faiblesses des deux modèles. 1. Le Modèle Traditionnel : Réflexion (Runtime) Avant l'Annotation Processing, nos gestionnaires (TextInputHandler, SelectInputHandler, etc...

Refonte ou refactoring

Refonte vs Refactoring : Quand réécrire, quand faire du refactoring ? Face à un code legacy, la tentation de tout réécrire est forte. Pourtant, le refactoring et la refonte sont deux stratégies radicalement différentes, avec des impacts opposés sur le risque, le temps et la valeur métier. Point à prendre en considération Langage, Framework, Librairie: est-ce qu'ils sont désuet, est-t'il possible de trouver des ressources Usage interne / externe: il peut avoir plus d'exigence si l'application est utilisé par des clients  Utilisation: est-ce que l'application est très utilisé Maintenance: il y a beaucoup de maintenance à faire, temps pour maîtriser le système Documentation: technique, fonctionnel Refactoring : Changer sans changer Le refactoring, est une modification du code interne sans changer son comportement externe. C’est l’art de rendre le code lisible, modulaire, testable sans toucher à la logique métier. Quand l’utiliser ? Le code fonctionne, m...

Gérer le cycle de vie d’un plugin avec Spring Statemachine

Les machines à états sont un sujet très peu discuté, peut-être que le côté mathématique fait peur à certain. Pour faire suite à notre article sur les plugin, nous allons mettre en place une machine à état pour suivre son cycle de vie.  Le projet State Machine de Spring sera utilisé pour la suite de cet article. Un plugin peut avoir différent état  INSTALLED,  ACTIVE,  INACTIVE,  UPDATING,  FAILED, UNINSTALLED Dans un système de gestion de plugin, différente action devrait être mis en place : Téléchargement du JAR Vérification des dépendances Initialisation du contexte Spring Enregistrement des routes ou services Nettoyage des ressources Chaque transition doit être explicitement autorisée.  On ne peut pas désactiver un plugin qui n’est pas activé. On ne peut pas réactiver un plugin désinstallé. Une erreur pendant l’activation doit mener à l’état FAILED. Gérer cela avec des if/else ...

Construire un système de plugins en Java

Les CMS comme WordPress, Joomla ou Shopify ont popularisé une idée puissante : permettre à n’importe qui d’étendre une application sans toucher à son code source. Même si cela existait bien avant ces applications. Cette extensibilité repose sur un système de plugins (ou extensions), qui transforme une application figée en une plateforme vivante. Mais est-il possible de reproduire ce modèle en Java, sans framework web, sans Spring, et sans magie ? Oui ! Et c’est plus simple qu’on ne le pense. Dans cet article, nous allons construire, pas à pas, un système de plugins modulaire en Java pur, inspiré des meilleures pratiques des CMS les plus utilisés au monde. Le résultat sera une application capable de charger dynamiquement des fonctionnalités tierces, de réagir à des événements, et de rester entièrement découplée de ses extensions. Pourquoi un système de plugins ? Avant de coder, posons les fondations : Extensibilité : ajouter des fonctionnalités sans recom...

Spring Events : la magie du pattern Observer

Spring a une solution simple pour découpler ton code sans ajouter de dépendances.  Quelques annotations magiques... au final c'’est juste une implémentation propre du bon vieux pattern Observer qui semble sous utilisé dans la communauté Spring. Le problème classique Imaginons que lorsqu'une commande est passée, il faut envoyer un email, logger l’action, invalider un cache, et notifier un service d’analytics. Si tu mets tout ça dans ta méthode placeOrder() , tu mélanges logique métier et effets secondaires, ton code devient difficile à tester, à maintenir, et à étendre . La solution Spring : les événements Spring te permet de publier un événement et de laisser d’autres composants réagir sans les connaître. public record OrderPlacedEvent(Order order) {} Mise en place de ton évènement @Service public class OrderService { private final ApplicationEventPublisher eventPublisher; public OrderService(ApplicationEventPublisher eventPublisher) { this.eve...

Concevoir un système d’annotations pour l’automatisation

À la suite de l'article concernant  Automatisation d'interface utilisateur , j'ai reçu différents commentaires relatifs au choix qui avait ét fait. J'ai décidé d'écrire un autre article présentant différentes conceptions, avec leurs avantages et inconvénieunts respectifs Annotation et convention over configuration L'approche qui avait été adoptée était basée sur une annotation par responsabilité, avec le moins de choix possible. Un maximum d'automatisation avait été mis en place. @Order(value = 9) @HideField(value = SectionEnum.TABLE) @Mandatory private Integer groundElementOwnerId; Les annotations indiquent  que le champs serait affiché à la neuvième position. que le champ serait caché dans la section table de la page. que le champ est obligatoire @Order(value = 7) @TableStruture private Map<String,String> properties; Ici il y avait détection de la map et un tableau était affiché. Différentes conventions avaient été mises en place. Concernant les sele...

Automatisation d'interface utilisateur

La solution qui est présentée se base sur thymeleaf et boostrap 3.  Interface utilisateur Depuis le tout début de ma carrière, à chaque emploi j'ai eu à créer de nombreuses interfaces web pour des applications de gestion. Ce n'est pas nécessairement très intéressant, c'est redonnant et c'est de plus en plus complexe pour au final prendre des données, les afficher à l'utilisateur, lui permettre de les modifier et finalement les retourner au serveur. Après avoir fait du jsp, jsf, asp, php, struts, gwt, gxt, gwt-ext, jquery, thymeleaf j'avais de grosse attente envers les nouveaux framework / librairie frontend. J'ai été malheureusement fortement déçu après avoir fait quelques nouvelles applications from scratch en angular / react. Encore plus complexe qu'auparavant, mais plus découpé. Courbe d'apprentissage assez élevé et maintenance coûteuse. Le temps et argent pris pour constamment mettre à jour des libraires c'est du temps, argent en moins pour ...

Kde 6 vs Windows 11

Nous allons comparer Kde 6 à l'environnement graphique de Windows 11. Le précédent comparatif date de 2015  Voici une liste d'ancien comparatif. Kde 5 vs Windows 10 https://www.laboiteaprog.com/2015/12/kde-5-vs-windows-10.html Kde 4.9 vs Windows 7 https://www.laboiteaprog.com/2012/09/kde-49-vs-windows-7.html kde 3.4 vs Windows Xp https://www.laboiteaprog.com/2005/08/kde-34-vs-windows-xp.html Menu Le menu sous Kde est toujours divisé par des catégories. Prenez note que sous une autre distribution, cela pourrait être différent. Calculatrice Un mode simple, scientifique, statistique et numérique est disponible  Configuration Le panneau de configuration s'est simplifié, un menu par catégorie s'est ajouté. Explorateur de fichier Bureau Navigateur internet Konqueror est le navigateur par défaut, cependant, il y a aussi maintenant aussi Falkon. Konquer gère toujours la gestion des fichiers et supporte de multiple protocole réseau. Ressource système Cette application a été revu...