01 Aspects avancés de Java
- La programmation concurrente
- Les concepts de la programmation multi-thread :
Le modèle d'activités de Java (Runnable et Thread)
- La création / destruction des threads
- Ordonnancement des threads
- La synchronisation des threads
- Le verrouillage des méthodes et des instructions (synchronized)
- Les moniteurs
- Quelques problèmes du multi-thread
L'interblocage (caractérisation, évitement, prévention, détection), la famine
- Les extensions du modèle introduites dans Java 5 (Callable, Future, ExecutorService), les nouvelles collections
- Le modèle Fork/Join
- Les extensions avec CompletableFuture
- Les divers outils de gestion de la concurrence :
Les verrous partagés / exclusifs, les sémaphores, les barrières cycliques
02 Aspects avancés : La programmation réflexive
- Les objectifs et les principes
- La découverte dynamique des informations relatives à une classe ou à un objet
- L'instanciation et l'invocation dynamique
03 Chargement et vérification des classes
- Rôle du compilateur Java
- Rôle des ClassLoader
- Les différentes zones mémoires de la JVM (Java Virtual Machine) et leur gestion par le GC (Garbage Collector)
- Hiérarchie des différents ClassLoader
- Vérification du Bytecode
- Chargement dynamique de classe
- Implémenter un ClassLoader
04 Accès aux bases de données relationnelles depuis Java
- Les capacités de JDBC (Java Database Connectivity)
- Les avantages des ORM (Object Relational Mapping)
- Hibernate
Présentation et architecture
- Installation et configuration
- Persistance des classes et des attributs, associations et héritage
- Mapping objet-relationnel avec JPA (Java Persistence API)
- Présentation des EJB (Enterprise JavaBeans) Entity
- Introduction à JPA (Java Persistance API)
- Mapping objet-relationnel, rôle de la clé primaire, mapping des associations (one-to-many, many-to-one...)
- L'héritage
- JPQL (Java Persistence Query Language), le langage de requête orienté-objet
05 Les frameworks Java
- Les frameworks
D'accès aux données
D'IHM (Interfaces Homme-Machine) serveur et client
De gestion de composants
Spring
- Les objectifs de Spring et de ses extensions
- Présentation de Spring Core
- Spring et l'accès aux données
- Spring et le Web, Spring MVC (Model-View-Controller)
- Les couches applicatives avec Spring
- Les frameworks de service Web
- Jersey et REST (Representational State Transfer)
- CXF et SOAP (Simple Object Access Protocol) / REST
- Les frameworks d'interface graphique
- Le framework JSF2 (JavaServer Faces 2.0)
- Les frameworks concurrents client
06 Tester ses applications en Java
- Test Driven Development – Découvrir les grands principes du TDD
- Cycle de développement du TDD
- Les 3A : Arrange, Act, Assert
- Remaniement de code : techniques de refactoring en TDD
- Conception émergeante
- Gestion des exceptions
- Gestion des scénarios
- JUnit – Savoir utiliser le framework JUnit pour implémenter des tests
- Tests unitaires
- Framework xUnit, implémentation Java : JUnit
- Principe d'assertions
- Alternatives à JUnit (TestNG)
- Outillage complémentaire
- Mise en œuvre et bonnes pratiques
- TDD
- Correction des anomalies
- Gestion de la montée en charge et de la sécurité des produits
- Gestion de la performance
- Les Stress tests
07 Le processus d'optimisation
- Analyser
- Coder
- Mesurer pour vérifier
- Les outils
- Profiling
- JVisualVM
- Eclipse MAT
- SoapUI
- JMeter
08 Gestion mémoire et optimisation
- L'organisation de la mémoire
- Le ramasse-miettes
- Le cycle de vie des objets
- Configurer la mémoire et le GC
- Mesure de la mémoire
- Off Heap
- La gestion de la mémoire et les performances
- Les options de la JVM HotSpot pour le suivi de l'activité du GC
- Fuite de mémoire
- Fuite de ressources
- Optimiser l'utilisation de la mémoire
- Optimiser l'occupation mémoire
09 Nouveautés Java
- Lambda fonctions
- Streams et Streams parallèles
- Gérer des modules