Commit 736d1fd3 authored by Julien SADAOUI's avatar Julien SADAOUI
Browse files

feat: Update Spring reactor tp

parent 0526bdc6
######################
# Intellij
######################
.idea/
*.iml
*.iws
*.ipr
*.ids
*.orig
classes/
out/
######################
# Gradle
######################
.gradle/
gradle/
out/
\ No newline at end of file
*build/
######################
# Windows
######################
# Windows image file caches
Thumbs.db
# Folder config file
Desktop.ini
######################
# Mac OSX
######################
.DS_Store
.svn
# Thumbnails
._*
######################
# Gradle Wrapper
######################
!gradle/wrapper/gradle-wrapper.jar
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java project to get you started.
* For more details take a look at the Java Quickstart chapter in the Gradle
* user guide available at https://docs.gradle.org/5.0/userguide/tutorial_java_projects.html
*/
subprojects {
version = "1.0"
}
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
rootProject.name = 'reactive'
/*
* This file was generated by the Gradle 'init' task.
*
* The settings file is used to specify which projects to include in your build.
*
* Detailed information about configuring a multi-project build in Gradle can be found
* in the user guide at https://docs.gradle.org/5.0/userguide/multi_project_builds.html
*/
rootProject.name = "reactive-programming"
include("spring-reactor")
include("rxjava")
# spring-reactor
This is a sample demonstrating Spring 5 Webflux framework. It uses Spring Data Mongo’s support for reactive libraries to provide an end to end reactive flow.
Enoncé : Spring 5 & Reactor
===========================
L'application que nous développons sert à gérer des listes de comptes
- Il y a plusieurs utilisateurs
- Chaque utilisateur peut avoir plusieurs comptes
- Ces comptes peuvent être partagées entre plusieurs utilisateurs
- Chaque compte contient plusieurs transactions
L'application est déjà en partie codée:
Depuis le début, nous avons fait uniquement des traitements avec des appels synchrones. En mode Servlet, un thread
est monopolisé pendant tout le traitement d'une requête HTTP qu'il soit en traitement ou en attente d'entrées/sorties
(accès en base de données, lecture de fichier, appel réseau, etc.)
Maintenant, nous allons utiliser les technologies Spring WebFlux et Reactor pour ajouter et afficher des Todos contenus
dans ces listes avec des traitements aynchrones.
I. Configuration de la sécurité HTTP
------------------------------------
1. Dans la classe "SecurityConfiguration", activez la sécurité pour les applications réactives dans Spring
2. Toujours dans la classe "SecurityConfiguration", ajoutez la gestion des annotations de sécurité
3. Afin de récupérer les informations de l'utilisateur, ajoutez un Bean UserDetailsService.
- Utilisez l'implémentation MongoReactiveUserDetailsService permettant de récupérer l'utilisateur dans la base MongoDB
Vous devez maintenant être capables de vous authentifier dans l'application en mode réactif avec l'un des utilisateurs
créés par le Bean InitialSetupMigration (par exemple: philip@ippon.fr / Pa$$word1)
Partie II : Développement de la liste des comptes
-------------------------------------------------
Nous allons coder les couches Controller et Service permettant d'ajouter, supprimer et lister la liste des Comptes
pour l'utilisateur en cours.
1. Implémentez la méthode "getCurrentUser" de la classe "UserServiceImpl" pour retourner l'utilisateur en cours:
- La classe helper ReactiveSecurityContextHolder fournit le nom de l'utilisateur connecté
2. Implémentez les méthodes de la classe "AccountServiceImpl"
- Ajoutez un nouveau Compte et partagez-la à un utilisateur
- Ajoutez une nouvelle Transaction à un Compte.
- Récupérez la liste des Transactions associées à un Compte
3. Complétez les méthodes de la couche Controller
Partie III : Création d'un test d'intégration
---------------------------------------------
Nous allons maintenant réaliser les tests d'intégration sur le controllers AccountController et TransactionController.
On exploite l'utilitaire WebTestClient pour tester le contrôleur ; l'API permet d'effectuer des traitements en mode asynchrone.
Elle offre en outre toute une panoplie d'outils permettant de vérifier les réponses obtenues.
- Configurez l'utilitaire WebTestClient
- Utilisez WebTestClient pour créer un nouveau Transaction
- Utilisez WebTestClient pour récupérer la liste des Transaction et vérifiez le flux de données avec la classe StepVerifier
\ No newline at end of file
repositories {
mavenCentral()
jcenter()
}
plugins {
......@@ -23,11 +24,11 @@ defaultTasks("bootRun")
dependencies {
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb-reactive")
implementation("org.springframework.boot:spring-boot-starter-security")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb-reactive")
implementation("com.github.mongobee:mongobee:0.13")
runtimeOnly("de.flapdoodle.embed:de.flapdoodle.embed.mongo")
compileOnly("org.projectlombok:lombok")
implementation("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
......
Enoncé : Spring 5 & Reactor
===========================
L'application que nous développons sert à gérer des listes de comptes
- Il y a plusieurs utilisateurs
- Chaque utilisateur peut avoir plusieurs comptes
- Ces comptes peuvent être partagées entre plusieurs utilisateurs
- Chaque compte contient plusieurs transactions
L'application est déjà en partie codée:
Depuis le début, nous avons fait uniquement des traitements avec des appels synchrones. En mode Servlet, un thread
est monopolisé pendant tout le traitement d'une requête HTTP qu'il soit en traitement ou en attente d'entrées/sorties
(accès en base de données, lecture de fichier, appel réseau, etc.)
Maintenant, nous allons utiliser les technologies Spring WebFlux et Reactor pour ajouter et afficher des Todos contenus
dans ces listes avec des traitements aynchrones.
I. Configuration de la sécurité HTTP
------------------------------------
1. Dans la classe "SecurityConfiguration", activez la sécurité pour les applications réactives dans Spring
2. Toujours dans la classe "SecurityConfiguration", ajoutez la gestion des annotations de sécurité
3. Afin de récupérer les informations de l'utilisateur, ajoutez un Bean UserDetailsService.
- Utilisez l'implémentation MongoReactiveUserDetailsService permettant de récupérer l'utilisateur dans la base MongoDB
Vous devez maintenant être capables de vous authentifier dans l'application en mode réactif avec l'un des utilisateurs
créés par le Bean InitialSetupMigration (par exemple: philip@ippon.fr / Pa$$word1)
Partie II : Développement de la liste des comptes
-------------------------------------------------
Nous allons coder les couches Controller et Service permettant d'ajouter, supprimer et lister la liste des Comptes
pour l'utilisateur en cours.
1. Implémentez la méthode "getCurrentUser" de la classe "UserServiceImpl" pour retourner l'utilisateur en cours:
- La classe helper ReactiveSecurityContextHolder fournit le nom de l'utilisateur connecté
2. Implémentez les méthodes de la classe "AccountServiceImpl"
- Ajoutez un nouveau Compte et partagez-la à un utilisateur
- Ajoutez une nouvelle Transaction à un Compte.
- Récupérez la liste des Transactions associées à un Compte
3. Complétez les méthodes de la couche Controller
Partie III : Création d'un test d'intégration
---------------------------------------------
Nous allons maintenant réaliser les tests d'intégration sur le controllers AccountController et TransactionController.
On exploite l'utilitaire WebTestClient pour tester le contrôleur ; l'API permet d'effectuer des traitements en mode asynchrone.
Elle offre en outre toute une panoplie d'outils permettant de vérifier les réponses obtenues.
- Configurez l'utilitaire WebTestClient
- Utilisez WebTestClient pour créer un nouveau Transaction
- Utilisez WebTestClient pour récupérer la liste des Transaction et vérifiez le flux de données avec la classe StepVerifier
\ No newline at end of file
rootProject.name = "spring-reactor"
rootProject.name = "spring-reactor_solution"
<?xml version="1.0" encoding="UTF-8" ?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %-5level %class - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.jsadaoui.demo" level="DEBUG"/>
<logger name="ch.qos.logback" level="WARN"/>
<logger name="org.springframework" level="WARN"/>
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
......@@ -24,12 +24,12 @@ public class Account {
@Id
private String number;
@NotNull
private BigDecimal balance;
@Size(min = 1, max = 255)
private String description;
@NotNull
private BigDecimal balance;
@Builder.Default
private Set<Transaction> transactions = new HashSet<>();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment