Quarkus
Développer des applications microservices en Java pour le cloud et Kubernetes
Édition Eni
Chapitre 1
Avant-propos
1. Objectifs du livre9
2. Public visé10
3. Prérequis10
4. Choix pédagogiques10
Chapitre 2
Quarkus : carte d'identité
1. Qu'est-ce que Quarkus ?13
2. Les piliers de Quarkus15
2.1 Developer Joy15
2.2 Pensé pour les conteneurs et Kubernetes16
2.3 Librairies reconnues et standards17
2.4 Unification des styles de développement impératif et réactif19
3. La philosophie de Quarkus21
4. Le temps de démarrage et l'empreinte mémoire22
5. Le support de GraalVM23
Chapitre 3
Introduction à Cloud Ready et Cloud Native
1. Cloud Ready25
2. Applications prévues pour les conteneurs27
3. Cloud Native29
Chapitre 4
Développement d'applications avec Quarkus
1. Création d'un projet avec la ligne de commande, code.quarkus.io ou un IDE31
2. Anatomie d'un projet Quarkus36
3. Bases : configuration, logs, injection de dépendances et tests40
3.1 La configuration40
3.2 Les logs44
3.3 L'injection de dépendances45
3.4 Les tests50
4. Developer Joy : dev mode, dev UI, continuous testing, dev services54
4.1 Le dev mode54
4.2 La dev UI56
4.3 Le continuous testing57
4.4 Les dev services58
5. Webservice REST avec JAX-RS60
5.1 Les extensions HTTP60
5.2 Le développement d'un endpoint REST avec JAX-RS61
5.3 Le support de JSON66
5.4 L'implémentation des tests de son endpoint REST via JUnit67
5.5 Le démarrage et le test de l'application en local70
5.6 La gestion des exceptions72
5.7 Les annotations spécifiques RESTEasy Reactive73
5.8 Le contexte et le filtre73
6. Documentation d'API avec OpenAPI75
7. Appel d'un autre service web avec le client REST79
8. Fonctionnalités HTTP84
8.1 Servir du contenu statique84
8.2 CORS - Cross-Origin Resource Sharing85
8.3 La configuration HTTP87
8.4 La sécurisation des connexions avec SSL88
9. Sécurité : authentification et habilitation89
9.1 L'authentification via fichier de configuration90
9.2 L'habilitation via annotations91
9.3 L'habilitation via fichier de configuration93
9.4 Le test d'un endpoint sécurisé94
10. Applications ligne de commande96
Chapitre 5
L'accès aux bases de données
1. Datasource et transaction99
1.1 Datasource et driver JDBC99
1.2 Gestion des transactions101
2. Gestion de migration de base de données104
2.1 Gestion de schéma avec Liquibase104
2.2 Migration de base de données avec Flyway105
3. Hibernate ORM106
4. Gestion du cache113
5. Bean validation115
6. NoSQL avec MongoDB118
Chapitre 6
Développement d'applications réactives
1. Architecture réactive et application réactive125
2. Vert.x : le cour réactif de Quarkus126
3. Mutiny130
4. Webservice REST réactif avec RESTEasy Reactive132
5. Base de données réactive avec Hibernate Reactive134
5.1 Reactive SQL Clients134
5.2 Hibernate Reactive with Panache136
5.3 Support des transactions réactives139
6. NoSQL réactif avec MongoDB140
7. REST client réactif142
8. Reactive Routes144
9. Messaging réactif avec Apache Kafka148
9.1 Recevoir des messages150
9.2 Envoyer des messages151
9.3 Traiter des messages154
9.4 Configurer les canaux154
9.5 Tester156
Chapitre 7
Cloud Ready
1. Test de santé159
2. Métrologie162
3. Open Tracing et Open Telemetry165
4. Tolérance à la panne169
4.1 Rejeux171
4.2 Temps d'attente172
4.3 Circuit breaker173
4.4 Fallback175
4.5 Configuration176
5. Service discovery et load balancing client177
5.1 Service discovery avec Stork178
5.2 Load balancing client avec Stork181
Chapitre 8
Compilation d'images natives avec GraalVM
1. Le projet GraalVM183
2. La compilation native185
3. Les pièges et comment les contourner grâce à Quarkus187
3.1 L'initialisation de classe au runtime189
3.2 L'inclusion des ressources190
3.3 Le support de la réflexion190
4. Tester une image native191
5. Monitorer et déboguer une image native192
5.1 Génération d'un thread dump193
5.2 Génération d'un heap dump193
5.3 Mémoire et Garbage Collector194
5.4 Débogage d'une application native avec GDB194
5.5 Monitoring d'une application native avec Java Flight Recorder195
Chapitre 9
Conteneurisation et Kubernetes
1. Conteneurisation197
1.1 Utilisation d'images fournies à la création d'un projet197
1.2 Génération automatique d'une image Docker200
2. Génération de ressources Kubernetes et OpenShift203
2.1 Génération de ressources Kubernetes203
2.2 Génération de ressources OpenShift211
3. Déploiement dans Kubernetes214
3.1 Configuration des ressources des conteneurs214
3.2 Sondes Kubernetes215
3.3 Déploiement dans Kubernetes avec Quarkus216
3.4 Déploiement via Helm218
3.5 Débogage à distance219
4. ConfigMap, Secret et Service Binding220
4.1 ConfigMap et Secret220
4.2 L'extension Kubernetes Config222
4.3 Service Binding224
5. Interagir avec un cluster Kubernetes226
Chapitre 10
Déployer dans Amazon Web Services
1. AWS Lambda231
1.1 Quarkus Amazon Lambda232
1.2 Quarkus Amazon Lambda HTTP237
1.3 Amazon Lambda SnapStart241
2. Services AWS : S3, SNS243
2.1 Configuration et authentification246
2.2 Amazon S3248
2.3 Amazon SNS250
2.4 Amazon DynamoDB254
2.5 Amazon Secrets Manager259
Chapitre 11
Déployer dans Google Cloud Platform
1. Google Cloud Functions263
1.1 Quarkus Google Cloud Functions264
1.2 Quarkus Google Cloud Functions HTTP271
2. Google App Engine274
2.1 Google AppEngine standard runtime274
2.2 Google AppEngine custom runtime276
3. Google Cloud Run277
4. Services GCP : Storage, PubSub279
4.1 Configuration et authentification280
4.2 Google Cloud Storage281
4.3 Google Cloud PubSub283
4.4 Google Cloud Firestore286
4.5 Google Cloud Secret Manager288
Chapitre 12
Déployer dans Microsoft Azure
1. Azure Functions291
2. Azure App Service295
3. Azure Container Apps297
Chapitre 13
Funqy : des fonctions portables
1. Développer une fonction événementielle avec Funqy301
2. Développer une fonction HTTP avec Funqy303
3. Déployer une fonction Funqy dans AWS306
3.1 Déployer une fonction Funqy événementielle dans AWS306
3.2 Déployer une fonction Funqy HTTP dans AWS310
4. Déployer une fonction Funqy dans Google Cloud311
4.1 Déployer une fonction Funqy événementielle dans Google Cloud311
4.2 Déployer une fonction Funqy HTTP dans Google Cloud313
5. Funqy Knative Eventing314
Chapitre 14
Développer une extension Quarkus
1. Build versus Runtime317
2. Les trois phases de bootstrapping318
3. Steps et items319
4. Jandex322
5. Développer une extension pas à pas323
5.1 Configurer une extension325
5.2 Ajouter un bean CDI326
5.3 Utiliser Jandex et enregistrer pour réflexion328
5.4 Aller plus loin329
Conclusion
1. Conclusion331
2. Aller plus loin332
Index333