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
Vous êtes ici
Pour aller plus loin
Indicateurs de résultats
Indicateurs publiés à partir de 3 avis.
