MFormations
Modern Java Engineering

Chapitre 23

23 - Annexes

> Glossaire de 200+ termes, cheat sheets, commandes Maven/Gradle et références rapides

Chapitre 23 — Annexes

Glossaire de 200+ termes, cheat sheets, commandes Maven/Gradle et references rapides


Glossaire (A-Z)

A

AOT (Ahead-of-Time) — Compilation du bytecode Java en code natif avant l'execution. GraalVM native-image, Project Leyden.

AOP (Aspect-Oriented Programming) — Paradigme qui separe les preoccupations transversales (logging, transactions, securite). Spring AOP, AspectJ.

API Gateway — Point d'entree unique pour les microservices. Routing, rate limiting, authentification. Spring Cloud Gateway, Kong, Traefik.

ArchUnit — Bibliotheque de tests d'architecture Java. Verifie les dependances entre packages, les conventions de nommage, etc.

AssertJ — Bibliotheque d'assertions fluides pour Java. Alternative a JUnit assertions. assertThat(actual).isEqualTo(expected).

Autoboxing — Conversion automatique entre types primitifs et leurs wrappers. int → Integer. Peut causer des performances inattendues.

B

Bean Validation — Jakarata Bean Validation (JSR 380). Annotations @NotNull, @Size, @Pattern pour valider les donnees.

Bounded Context — Concept DDD : limite explicite d'un modele de domaine. Chaque contexte a son propre langage et ses propres entites.

Builder Pattern — Pattern de conception pour construire des objets complexes avec de nombreux parametres. Lombok @Builder.

C

CAS (Compare-And-Swap) — Instruction atomique CPU pour la synchronisation sans verrou. Utilisee par AtomicInteger, ConcurrentHashMap.

CDI (Contexts and Dependency Injection) — Standard Jakarta EE pour l'injection de dependances et la gestion de contexte.

CI/CD (Continuous Integration/Continuous Deployment) — Automatisation du build, test et deploiement. GitHub Actions, Jenkins, GitLab CI.

Circuit Breaker — Pattern de resilience qui interrompt les appels a un service defaillant. Resilience4j, Hystrix.

CQRS (Command Query Responsibility Segregation) — Separation des modeles de commande (ecriture) et de requete (lecture).

Criteria API — API JPA pour construire des requetes de maniere programmee et type-safe. Alternative a JPQL.

D

Daemon Thread — Thread d'arriere-plan qui ne bloque pas l'arret de la JVM. Thread.setDaemon(true).

DDD (Domain-Driven Design) — Approche de conception logicielle centree sur le domaine metier. Eric Evans.

Docker — Plateforme de conteneurisation. Permet d'emballer et d'executer des applications isolees.

DTO (Data Transfer Object) — Objet pour transporter des donnees entre couches. record en Java 21.

E

EJB (Enterprise JavaBeans) — Composant serveur Jakarta EE. @Stateless, @Stateful, @Singleton.

EntityGraph — API JPA pour definir des graphes d'entites a charger. Alternative a JOIN FETCH.

Event Sourcing — Pattern ou l'etat courant est derive de la relecture des evenements passes.

F

Feign — Client HTTP declaratif pour Spring Cloud. @FeignClient(name = "service").

Flyway — Outil de migration de base de donnees. Versionnement SQL, integration Spring Boot.

Foreign Memory/Function API — Projet Panama. API pour interagir avec la memoire et les fonctions hors-heap (C/C++).

Functional Interface — Interface avec une seule methode abstraite. @FunctionalInterface. Predicate, Function, Consumer, Supplier.

G

G1GC (Garbage-First Garbage Collector) — GC par defaut depuis Java 9. Region-based, pause time cible.

GraalVM — VM polyglotte avec compilation native. Supporte Java, JavaScript, Python, etc.

Gradle — Outil de build moderne. Groovy/Kotlin DSL, incremental build, daemon.

H

HATEOAS (Hypermedia as the Engine of Application State) — Niveau 3 de maturite REST. Liens hypermedia dans les reponses.

Hibernate — Implementation JPA la plus populaire. ORM, L2 cache, HQL.

I

IoC (Inversion of Control) — Principe ou le conteneur gere le cycle de vie des objets. Spring framework.

Immutabilite — Etat d'un objet qui ne peut pas etre modifie apres sa creation. record (immuable), Collections.unmodifiableList().

J

Jakarta EE — Successeur de Java EE sous la fondation Eclipse. Servlets, JPA, CDI, REST.

JEP (Java Enhancement Proposal) — Proposition d'amelioration du JDK. Processus OpenJDK.

JFR (Java Flight Recorder) — Outil de profiling integre a la JVM. Evenements GC, CPU, IO, threads.

JUnit 5 — Framework de test Java moderne. Platform + Jupiter + Vintage.

JVM (Java Virtual Machine) — Machine virtuelle qui execute le bytecode Java. HotSpot, OpenJ9, GraalVM.

JWT (JSON Web Token) — Format de token compact (Header.Payload.Signature). Utilise pour l'authentification.

K

Kafka — Plateforme de streaming distribuee. Pub/sub, event sourcing, log compacte.

Keycloak — Serveur d'authentification Open Source. OAuth2, OIDC, SAML.

Kotlin — Langage JVM concis et sur (null safety). Compatible Java. Coroutines.

L

Lambda — Fonction anonyme (Java 8+). (param) -> expression. Pilier de la programmation fonctionnelle en Java.

Loom — Projet OpenJDK pour les threads virtuels et la concurrence structuree.

Lombok — Bibliotheque d'annotations pour reduire le boilerplate. @Data, @Builder, @Slf4j.

M

Maven — Outil de build et de gestion de dependances. POM.xml, phases (compile, test, package, install, deploy).

Micrometer — Bibliotheque de metriques pour applications JVM. Integration Prometheus, Grafana.

Microservices — Style architectural ou l'application est composee de services petits, independants et decentralises.

Mockito — Framework de mocking pour les tests Java. @Mock, @InjectMocks, when().thenReturn().

N

N+1 Query — Problemes de performance JPA : 1 requete pour la liste + N pour chaque association.

Native Image — Image executable native creee par GraalVM. Demarrage instantane, faible empreinte memoire.

Non-blocking I/O — E/S qui ne bloquent pas le thread appelant. NIO, WebFlux, Netty.

O

OAuth2 — Protocole d'autorisation. Authorization Code, Client Credentials, PKCE.

Optional — Conteneur qui peut contenir une valeur ou etre vide. Optional<T>. Evite les null checks.

ORM (Object-Relational Mapping) — Mapping entre objets Java et tables relationnelles. Hibernate, EclipseLink.

P

Panama — Projet OpenJDK pour l'interoperabilite avec du code natif (C/C++). Foreign Function & Memory API.

Pattern Matching — Fonctionnalite Java 17+ pour matcher des types dans switch et instanceof.

Pessimistic Locking — Verrouillage explicite en base. SELECT ... FOR UPDATE. LockModeType.PESSIMISTIC_WRITE.

PMD — Analyseur statique de code. Detecte les bugs potentiels, code mort, mauvaises pratiques.

Predicate — Interface fonctionnelle boolean test(T t). Utilisee dans les streams pour le filtrage.

Q

Quarkus — Framework Java natif pour Kubernetes. Build time processing, GraalVM integration, dev mode.

R

Reactive Programming — Paradigme de programmation asynchrone base sur les flux de donnees. Reactor, WebFlux, RxJava.

Record — Classe de donnee immuable (Java 16+). record Point(int x, int y) {}. Genere constructeur, equals, hashCode, toString.

Record Pattern — Pattern matching sur les records (Java 21+). case Point(int x, int y) -> ....

Redis — Base de donnees en memoire. Cache, sessions, pub/sub, rate limiting.

Resilience4j — Bibliotheque de resilience pour Java. Circuit Breaker, Retry, Rate Limiter, Bulkhead.

REST (Representational State Transfer) — Style architectural pour les API web. Resources, methodes HTTP, stateless.

S

Sealed Class — Classe qui controle ses sous-classes. sealed class Shape permits Circle, Rectangle {}.

Singleton — Pattern de conception : une seule instance. enum Singleton { INSTANCE }.

SonarQube — Plateforme d'analyse de qualite de code. Bugs, vulnerabilites, code smells, couverture.

Spring Boot — Framework Spring avec auto-configuration et serveur embarque. Simplifie le developpement d'applications Java.

Spring Cloud — Suite d'outils pour les microservices. Config, Discovery, Gateway, Tracing.

Stream API — API de traitement de collections (Java 8+). map, filter, reduce, collect.

Structured Concurrency — Gestion structuree des threads virtuels (JEP 453). StructuredTaskScope.

T

Testcontainers — Bibliotheque pour les tests d'integration avec Docker. PostgreSQL, Kafka, Redis en conteneurs.

TDD (Test-Driven Development) — Cycle : Red (ecrire le test qui echoue) → Green (faire passer le test) → Refactor.

Thread Virtual — Thread leger (Project Loom). Des millions par application. Thread.startVirtualThread().

Transaction — Unite de travail atomique. @Transactional (Spring). ACID (Atomicite, Consistence, Isolation, Durabilite).

U

Unmodifiable Collection — Collection immuable. List.of(), Set.of(), Map.of(). Lance UnsupportedOperationException si modification tentee.

V

Valhalla — Projet OpenJDK pour les value types et primitive classes. JEP 401, 402.

Value Object — Objet immutable defini par ses attributs (DDD). record Money(BigDecimal amount, Currency currency).

Virtual Thread — Voir Thread Virtual.

Volatile — Mot-cle Java garantissant la visibilite des ecritures entre threads. Pas d'atomicite.

W

WebFlux — Module Spring reactive. Non-blocking, event-loop, Netty. Mono<T>, Flux<T>.

WebSocket — Protocole de communication bidirectionnelle. Utilise pour le chat, les notifications temps reel.

X

XSS (Cross-Site Scripting) — Attaque par injection de scripts. Prevention : encodage, CSP, validation.

Y

YAML (YAML Ain't Markup Language) — Format de serialisation de donnees. Configuration Spring Boot, Docker Compose, CI/CD.

Z

ZGC (Z Garbage Collector) — GC a faible latence (< 10ms). Colored pointers, concurrent, scalable jusqu'a 16TB de heap.

Zero-copy — Technique de transfert de donnees sans copie entre kernel et espace utilisateur. FileChannel.transferTo().


Cheat Sheets

Java Streams API

Intermediate Operations

OperationDescriptionSignature
filterGarde les elements matchant le predicateStream<T> filter(Predicate<T>)
mapTransforme chaque elementStream<R> map(Function<T,R>)
flatMapAplatit un Stream de StreamsStream<R> flatMap(Function<T,Stream<R>>)
distinctSupprime les doublons (equals)Stream<T> distinct()
sortedTrie les elementsStream<T> sorted(Comparator<T>)
peekApplique une action (debug)Stream<T> peek(Consumer<T>)
limitLimite a N elementsStream<T> limit(long)
skipSaute N elementsStream<T> skip(long)
takeWhilePrend tant que le predicate est vraiStream<T> takeWhile(Predicate<T>)
dropWhileSupprime tant que le predicate est vraiStream<T> dropWhile(Predicate<T>)

Terminal Operations

OperationDescriptionSignature
forEachExecute pour chaque elementvoid forEach(Consumer<T>)
collectCollecte les elementsR collect(Collector<T,A,R>)
toListCollecte en List immuableList<T> toList()
reduceReduction binaireOptional<T> reduce(BinaryOperator<T>)
countCompte les elementslong count()
anyMatchAu moins un matchboolean anyMatch(Predicate<T>)
allMatchTous matchentboolean allMatch(Predicate<T>)
noneMatchAucun matchboolean noneMatch(Predicate<T>)
findFirstPremier elementOptional<T> findFirst()
findAnyElement quelconqueOptional<T> findAny()
minMinimum selon ComparatorOptional<T> min(Comparator<T>)
maxMaximum selon ComparatorOptional<T> max(Comparator<T>)

Collectors

CollectorDescription
toList()Liste immuable
toSet()Set immuable
toMap(keyMapper, valueMapper)Map
groupingBy(classifier)Map<K, List<V>>
partitioningBy(predicate)Map<Boolean, List<V>>
joining(delimiter)String avec separateur
summarizingInt/Double/Long(...)Statistiques
reducing(identity, accumulator)Reduction
mapping(mapper, downstream)Transformation avant collecte

Spring & Spring Boot Annotations

Core Annotations

AnnotationUsage
@ComponentBean generique
@ServiceBean service
@RepositoryBean repository
@ControllerMVC controller
@RestControllerREST controller
@AutowiredInjection de dependance
@QualifierInjection par nom
@ValueInjection de propriete
@ConfigurationClasse de configuration
@BeanDeclaration de bean
@LazyInitialisation paresseuse
@ScopePortee (singleton, prototype)
@PrimaryBean principal en cas de conflit

Web Annotations

AnnotationUsage
@RequestMappingMapping generique
@GetMappingGET mapping
@PostMappingPOST mapping
@PutMappingPUT mapping
@DeleteMappingDELETE mapping
@RequestParamQuery parameter
@PathVariableURI path segment
@RequestBodyCorps de la requete
@ResponseBodyCorps de la reponse
@ResponseStatusStatus HTTP
@ExceptionHandlerGestionnaire d'exception
@ControllerAdviceAdvice global

Data Annotations

AnnotationUsage
@TransactionalGestion de transaction
@EnableTransactionManagementActive les transactions
@CacheableCache le resultat
@CacheEvictVide le cache
@CachePutMet a jour le cache
@EnableCachingActive le cache

JPA/Hibernate Annotations

AnnotationUsage
@EntityClasse entite
@Table(name)Table associee
@IdCle primaire
@GeneratedValueGeneration de cle
@ColumnColonne
@TransientChamp non persiste
@EnumeratedEnum persiste
@TemporalDate/Timestamp
@LobBLOB/CLOB
@OneToOneRelation 1-1
@OneToManyRelation 1-N
@ManyToOneRelation N-1
@ManyToManyRelation N-N
@JoinColumnColonne de jointure
@JoinTableTable de jointure
@MappedSuperclassClasse mere non-entite
@EmbeddedValeur embarquee
@EmbeddableClasse embarquable
@VersionOptimistic locking
@EntityGraphGraphe de chargement
@NamedQueryRequete nommee
@QueryRequete Spring Data
@ModifyingModification query
@LockVerrouillage pessimiste

Maven Commandes

# Phases de build
mvn clean                    # Nettoie target/
mvn validate                 # Valide le projet
mvn compile                  # Compile le code source
mvn test-compile             # Compile les tests
mvn test                     # Execute les tests
mvn package                  # Cree le JAR/WAR
mvn verify                   # Verifications integration
mvn install                  # Installe dans le repo local
mvn deploy                   # Deploie sur le repo distant

# Cycles de vie complets
mvn clean install            # Nettoie + build complet
mvn clean verify             # Nettoie + build + verification

# Options utiles
mvn -DskipTests              # Saute les tests
mvn -Dmaven.test.skip=true   # Saute compilation + execution des tests
mvn -o                       # Mode offline
mvn -U                       # Force mise a jour des snapshots
mvn -pl module-name          # Build un module specifique
mvn -am                      # Aussi les modules dependants

# Debug
mvn -X                       # Debug mode
mvn dependency:tree          # Arbre des dependances
mvn dependency:resolve       # Resout les dependances
mvn help:effective-pom       # POM effectif
mvn versions:display-dependency-updates  # Verifie les versions

# Profils
mvn -P production            # Active le profil "production"
mvn install -P test          # Build avec profil de test

Gradle Commandes

# Build
gradle build                 # Build complet
gradle clean                 # Nettoie build/
gradle check                 # Tests + verification
gradle assemble              # Cree le JAR (sans tests)

# Tests
gradle test                  # Execute les tests
gradle test --tests "*ServiceTest"  # Filtre les tests
gradle test --info           # Tests en mode verbose

# IntelliJ
gradle idea                  # Genere les fichiers IntelliJ

# Dependances
gradle dependencies          # Arbre des dependances
gradle dependencyUpdates     # Verifie les mises a jour

# Performance
gradle build --parallel      # Build parallele
gradle build --daemon        # Utilise le daemon
gradle build --build-cache   # Cache de build

# Watcher
gradle build --continuous    # Rebuild automatique

# Profils
gradle -Pprofile=prod        # Propriete personnalisee
gradle -Dorg.gradle.jvmargs="-Xmx2g"  # JVM args

Docker Commandes

# Images
docker build -t app:latest .    # Build image
docker images                   # Liste des images
docker rmi image:tag            # Supprime image
docker pull postgres:16         # Pull image

# Containers
docker run -d -p 8080:8080 app  # Lance container
docker ps                       # Containers actifs
docker ps -a                    # Tous les containers
docker stop <id>                # Stop container
docker rm <id>                  # Supprime container
docker logs -f <id>             # Logs en temps reel
docker exec -it <id> bash       # Shell dans le container

# Docker Compose
docker-compose up -d            # Lance les services
docker-compose down             # Arrete les services
docker-compose logs -f          # Logs de tous les services
docker-compose build            # Rebuild les images
docker-compose pull             # Pull les images

# Systeme
docker system prune             # Nettoie les ressources inutilisees
docker system df                # Utilisation disque
docker stats                    # Stats en temps reel

Git Workflow

# Branches
git checkout -b feature/xxx    # Nouvelle branche
git branch -d feature/xxx      # Supprime branche (locale)
git push origin --delete feature/xxx  # Supprime branche (distante)

# Stash
git stash                      # Sauvegarde temporaire
git stash pop                  # Restaure le stash
git stash list                 # Liste des stashs

# Rebase
git rebase main                # Rebase sur main
git rebase -i HEAD~3           # Rebase interactif (squash, edit, reword)

# Merge
git merge --squash feature/xxx # Merge en un commit
git merge --no-ff feature/xxx  # Merge avec commit de merge visible

# Cherry-pick
git cherry-pick <commit-hash>  # Applique un commit specifique

# Reset
git reset --soft HEAD~1        # Annule le commit, garde les modifications
git reset --hard HEAD~1        # Annule le commit + modifications

# Tags
git tag v1.0.0                 # Tag le commit courant
git push --tags                # Push les tags

# Log
git log --oneline --graph      # Log compact avec graphe
git log --since="2 weeks ago"  # Log depuis 2 semaines
git shortlog -sn               # Stats de commits par auteur

Resilient Summary

Ce glossaire et ces cheat sheets sont des references rapides. Pour approfondir :

  • Glossaire : chaque terme est lie a un chapitre du cours
  • Cheat Sheets : utilisables comme antisèche pendant le developpement
  • Commandes : copier/coller directement utilisables

Le repertoire references/ contient des liens vers les sources officielles pour chaque notion abordee.