Aller au contenu principal

Java - Développer des applications avancées

Java reste au cœur des systèmes d'entreprise. Cette formation vous apprend à concevoir des applications Java robustes : architecture propre, traitements parallèles, accès aux données, API REST, performance, tests et déploiement.

Objectif de la formation

Immersion · Savoir faire en situation réelle

À l’issue de cette formation, les participants seront capables de :

  • Structurer des architectures logicielles découplées et évolutives
  • Utiliser pleinement la programmation fonctionnelle (Streams, Lambdas)
  • Écrire du code asynchrone et concurrent performant (Virtual Threads)
  • Optimiser les accès aux données relationnelles avec JPA et Hibernate
  • Concevoir des API REST professionnelles et documentées
  • Diagnostiquer les fuites de mémoire et optimiser les performances de la JVM
  • Sécuriser la non-régression grâce aux tests unitaires et d'intégration avancés

Choisissez votre format

Jusqu’où voulez-vous aller ?

Chaque format reprend le précédent et y ajoute des journées.

Programme détaillé

ACTION · 28 heures (4 jours)

Jour 1
MatinArchitecture logicielle et code propre (Clean Code) en Java

Objectif : Maîtriser les principes du Clean Code et l'organisation en couches pour concevoir des applications maintenables et robustes.

  • Organiser son code en respectant les principes SOLID.
  • Mettre en œuvre le patron de conception Injection de Dépendances (IoC).
  • Configurer et découpler son application grâce aux architectures hexagonales ou en couches (N-Tier).

Atelier pratique : Refactoring pas-à-pas d'une application Java monolithique rigide (« code spaghetti ») pour la rendre modulaire et découplée.

Cas métier : Core Banking - Conception de l'architecture d'un moteur de transactions financières.

Compétence acquise : Être capable de concevoir et d'auditer l'architecture modulaire d'une application professionnelle Java.

Livrable : Squelette d'architecture propre, découplée et prête pour l'injection de dépendances.

Après-midiProgrammation fonctionnelle, Streams et Optional

Objectif : Exploiter la puissance de la programmation fonctionnelle Java pour écrire un code concis, lisible et sécurisé contre les erreurs de pointeurs nuls.

  • Manipuler les expressions Lambda et les références de méthodes.
  • Maîtriser l'API Stream pour filtrer, transformer et agréger des collections de données complexes.
  • Sécuriser la gestion de l'absence de valeur grâce à la classe Optional.

Atelier pratique : Traitement avancé de flux de données (pipeline de filtres, groupements complexes et transformations de type Map/Reduce).

Cas métier : Analyse de Données Logistiques - Filtrage, tri et agrégation en temps réel d'un flux d'expéditions de colis.

Compétence acquise : Maîtriser le paradigme fonctionnel de Java pour manipuler les structures de données de façon élégante et fluide.

Livrable : Module de traitement de données optimisé, sans boucles for traditionnelles ni vérifications if (x != null).

Jour 2
MatinConcurrence et programmation multithread (Virtual Threads)

Objectif : Concevoir des applications hautement performantes et scalables en gérant la concurrence de manière moderne et sécurisée.

  • Maîtriser le cycle de vie des threads traditionnels et les verrous (ReentrantLock, structures thread-safe).
  • Implémenter l'asynchronisme avec l'API CompletableFuture.
  • Découvrir et intégrer les Virtual Threads de Java moderne (Project Loom) pour optimiser l'utilisation du processeur.

Atelier pratique : Mise en œuvre d'un pool d'exécution concurrent pour traiter des tâches lourdes en parallèle sans bloquer le thread principal.

Cas métier : Moteur de Réservation - Gestion de la concurrence d'accès lors de réservations simultanées de billets de transport.

Compétence acquise : Être capable de développer une logique asynchrone performante et tolérante aux accès concurrents massifs.

Livrable : Service d'exécution asynchrone hautement scalable, optimisé par les Virtual Threads.

Après-midiAccès aux données avancé avec JPA et Hibernate

Objectif : Configurer et optimiser de manière Premium la persistance des données relationnelles avec JPA et Hibernate.

  • Maîtriser les correspondances d'héritage et les relations complexes (One-to-Many, Many-to-Many bidirectionnelles).
  • Gérer l'état des entités (transient, persistent, detached) et le mécanisme de mise en cache.
  • Écrire des requêtes performantes (JPQL, Criteria API) et auditer les requêtes SQL générées.

Atelier pratique : Résolution du piège classique de performance « N+1 SELECT » et mise en place de stratégies de chargement paresseux (Lazy Loading).

Cas métier : Catalogue E-Commerce - Gestion des stocks et des fiches produits complexes avec chargement optimisé des avis clients associés.

Compétence acquise : Savoir concevoir une couche de persistance performante, exempte de fuites de mémoire ou de lenteurs d'accès à la base de données.

Livrable : Modèle de données JPA hautement optimisé, testé et validé avec zéro requête redondante.

Jour 3
MatinAPI REST avancées et validation des données

Objectif : Concevoir, structurer et sécuriser des Web Services RESTful robustes répondant aux standards actuels de l'industrie.

  • Structurer des contrôleurs REST respectant scrupuleusement les niveaux de maturité de Richardson.
  • Gérer de manière centralisée les exceptions de l'application et les codes de retour HTTP associés.
  • Valider les données d'entrée via l'API Bean Validation.

Atelier pratique : Création d'une API REST complète dotée d'une gestion globale d'erreurs et de filtres d'interception.

Cas métier : API de Facturation - Conception des points d'accès pour l'envoi, la validation et la récupération de factures en entreprise.

Compétence acquise : Être capable de structurer, documenter et exposer des endpoints RESTful professionnels.

Livrable : API REST Java fonctionnelle, sécurisée par de la validation d'entrée et documentée via OpenAPI.

Après-midiGestion de la mémoire, réglage de la JVM et performance

Objectif : Comprendre le fonctionnement intime de la machine virtuelle Java (JVM) pour identifier et corriger les goulots d'étranglement de performance.

  • Maîtriser l'organisation de la mémoire de la JVM (Stack vs Heap, Metaspace).
  • Analyser le comportement des différents Garbage Collectors (G1, ZGC).
  • Diagnostiquer les fuites de mémoire (Memory Leaks) à l'aide d'outils de profilage professionnels.

Atelier pratique : Analyse et résolution en direct d'une erreur d'essoufflement de la mémoire de type OutOfMemoryError sur une application volontairement corrompue.

Cas métier : Plateforme de Streaming - Profilage et réduction de l'empreinte mémoire d'une application traitant des volumes massifs de métadonnées.

Compétence acquise : Savoir profiler une application Java en temps réel et ajuster finement les options de démarrage de la JVM.

Livrable : Rapport de diagnostic de performance de l'application avec correctifs méthodologiques appliqués.

Jour 4
MatinTests unitaires avancés et mocking

Objectif : Écrire des suites de tests de haute qualité avec JUnit 5 et Mockito pour garantir une régression zéro lors des évolutions logicielles.

  • Maîtriser le cycle de vie de JUnit 5 et l'utilisation des assertions avancées.
  • Mettre en œuvre le bouchonnage (Mocking) avec Mockito pour isoler les composants testés.
  • Utiliser des techniques d'injection de dépendances simulées pour tester des cas d'erreurs complexes ou exceptionnels.

Atelier pratique : Écriture d'une suite de tests unitaires complète avec couverture de code maximale sur des algorithmes métiers complexes.

Cas métier : Moteur de Calcul d'Assurance - Écriture des tests d'une logique d'attribution de primes de sinistres dépendante de plusieurs web-services externes.

Compétence acquise : Être en mesure d'architecturer et d'automatiser des campagnes de tests unitaires isolées, rapides et fiables.

Livrable : Suite de tests JUnit 5 / Mockito robuste avec indicateur de couverture de code optimal.

Après-midiTests d'intégration et déploiement en conteneurs

Objectif : Configurer des tests d'intégration réalistes s'appuyant sur de vraies infrastructures et préparer l'application pour le déploiement cloud (Docker).

  • Écrire des tests d'intégration avec Testcontainers pour lancer des bases de données réelles à la volée pendant la phase de build.
  • Conteneuriser une application Java de manière optimale à l'aide de fichiers Docker multi-étapes (Multi-stage builds).
  • Intégrer les variables d'environnement externes pour rendre l'image hautement configurable.

Atelier pratique : Rédaction d'un script Dockerfile optimisé et exécution d'une suite complète de tests d'intégration connectée à une vraie base de données de test SQL conteneurisée.

Cas métier : Déploiement Industriel - Automatisation du packaging et de l'intégration continue d'un microservice de gestion des expéditions de commandes.

Compétence acquise : Être autonome pour valider l'intégration de son code Java avec de vrais services tiers et pour packager son application sous forme de conteneur d'entreprise prêt pour la production.

Livrable : Image Docker optimisée et sécurisée de l'application Java avancée, prête au déploiement en production.

Les ateliers et cas métier de ce programme pourront être adaptés par le consultant-formateur selon les besoins, le niveau et les prérequis des participants, pour favoriser l’atteinte des objectifs pédagogiques.

Cette formation dans le parcours

Indicateurs de résultats

Indicateurs publiés à partir de 3 avis.

Mode de calcul