TAA
====
----
[Lien vers cette page](https://hackmd.diverse-team.fr/s/rJKt4lSND)
Voici la page que je vais utiliser pour vous partager les ressources des cours de TAA.
## Plan
* [Cours](#cours)
+ [Introduction](#introduction)
+ [Mapping Objet Relationnel (Cours 1)](#Mapping-Objet-Relationnel-Cours-1-)
+ [JPA (Cours 2-3)](#JPA-Cours-2-3)
+ [NoSQL (Cours 3)](#NoSQL-Cours-3)
+ [Développement Backend avec Spring (Cours 4-5)](#Développement-Backend-avec-Spring-Cours-4-5)
+ [Des servlets aux API Rest en Java](#des-Servlets-aux-API-Rest-en-Java)
+ [Spring avancé](#Spring-avancé)
+ [JHipster](#jhipster)
* [TPs](#Tps)
* [Communication](#Communication)
* [Evaluations](#Evaluations)
* [Links](#Links)
* [FAQ](#FAQ)
* [Tips](#Tips)
## Cours
### Introduction
- [Intro TAA](https://drive.google.com/file/d/11R9O9wKypoYrMAwzthjbJim1onzVapdi/preview)
- [Structuration projet backend](https://drive.google.com/file/d/1An7uVO1d9Y8PHwnJlmN06uI9zU37ZNpw/preview)
### Mapping Objet Relationnel (Cours 1)
- [Introduction problématiques mapping objet relationnel](https://drive.google.com/file/d/1iSxX2mBu2VuKZUgCvoe44RDqGvvyep3A/preview)
- [Plan de la présentation mapping objet relationnel](https://drive.google.com/file/d/1d0BrDulGQxHa6qK76chZhSjv2EHBfuT4/preview)
- [De la table à la classe](https://drive.google.com/file/d/1RCpm0_t9VZhTvybn50EraboQwOvqUZBc/preview)
- [Traduction des associations](https://drive.google.com/file/d/1IzEzdN4ONL1InC5dPgYFVtzWcRU6qtvt/preview)
- [Objet dépendant](https://drive.google.com/file/d/1riuA9Xz3lseVmxPaLqNiR8SgmmvYfnAl/preview)
- [Traduction de l’héritage](https://drive.google.com/file/d/1723vp3Mshcgpl8ByRZ6kM6mdh3oXsrST/preview)
- [Navigation entre les objets](https://drive.google.com/file/d/1FPXR_PhaSMkwt3weSOahx7dVw9VdxOhf/preview)
### JPA (Cours 2-3)
- [Limitations JDBC, motivations pour JPA](https://drive.google.com/file/d/1mT-GPYhMcNmDZL_H0X_Xn9Orrjf4Md-a/preview)
- [Introduction JPA](https://drive.google.com/file/d/1afTFZ0g7zDLsuC_yFHwAmBjVg9sNnfkI/preview)
- [Comprendre la notion d'entité persistante](https://drive.google.com/file/d/1NjVjRSVkTegbz0Q9c5GnIfrCQNRlfqTU/preview)
- [Identité des entités](https://drive.google.com/file/d/1KmNg4j2QdqL_8nF2DbQoOjHTHmusmexM/preview)
- [Associations](https://drive.google.com/file/d/1KMt_Y2EXCq8T-MjzxJD1BkqPelbwf6s-/preview)
- [Héritage](https://drive.google.com/file/d/1vn90ENBWdxbHkMFAmroi2z7vICyDD4kd/preview)
- [*EntityManager*: La façade pour intéragir avec la base de données](https://drive.google.com/file/d/1z6uJh_HEtGC6OgT88W07-DLCcs9IkSwZ/preview)
- [Faire une requête en JPA](https://drive.google.com/file/d/1C_OOCPh-tCFvKz9QQDbmrt7IULA5vYZ6/preview)
- [JPQL *in nutshell*](https://drive.google.com/file/d/15gX32czVlwqMVJ8120qzGom5d2tVs2Vk/preview)
- [Quelques tips en vrac pour finir](https://drive.google.com/file/d/19uULBm-4IR3iWssdIIzPnMvC4t0SrFKH/preview)
### NoSQL (Cours 3)
- [NoSQL, pourquoi ?](https://drive.google.com/file/d/1sz0E09L4u8WiLGfN5fznIxOHVqgrj6Mm/preview)
- [NoSQL, les différentes types de bases de données](https://drive.google.com/file/d/1KME3KDJwuzH6XZPG_a3pyn_pyEMn--CL/preview)
### Des servlets aux API Rest en Java
- [Passer du monde Http à l'appel de méthodes dans la VM Java, rappel sur l'API Servlet](https://drive.google.com/file/d/1kJv6FOR5Pfch_1QQdNYNP01v-bFyvoi5/preview)
- [Démo Servlet](https://drive.google.com/file/d/1xpUyAA_pDxVhc1w40x1tgKsoBFOWL4Kp/preview)
- [Des services Web à la mode du W3C à la notion d'API Rest](https://drive.google.com/file/d/1xg0JYAF3He6dLqGXr2RXVQ7n4IBWi4ZS/preview)
- [Restful Services et son modèle de développement en Java à l'aide de JaxRS](https://drive.google.com/file/d/1DQABOcu4YcO-Ezp4c_rw3trOo1XciJtH/preview)
- [Démo JaxRS](https://drive.google.com/file/d/1nIjm6iNPNryPM4dZk9HhLcJ23EYf9l5c/preview)
### Développement Backend avec Spring (Cours 4-5)
- [Motivations](https://drive.google.com/file/d/1sHhxrM7sUFrdvSbn3_XJPhgtlzBHh8Uo/preview)
- [Rappel Conception objet ou la philosophie derrière Spring](https://drive.google.com/file/d/1n2cveoDjuRTeMifhUXloLikMF3LtEfSI/preview)
- [Spring Core: DIP et injection de dépendances](https://drive.google.com/file/d/1v0Jnbk8xOnvZF-TjHYAey7IDsmMOyZoA/preview)
- [La programmation par aspects: au coeur de Spring](https://drive.google.com/file/d/1iWkMwqUG60Fmn8_S_fq9rz5XR2PFm5W9/preview)
- [AspectJ et Spring AOP, d'une implémentation de référence de l'AOP à une implémentation respectueuse de la conception objet](https://drive.google.com/file/d/1FdW_YA0F_Ka9EDQsA-Y-aMNhDDaiCIj7/preview)
### Spring avancé
- [SpringBoot: Facilité l'intégration des technologies](https://drive.google.com/file/d/1T7Vt8tOB4kR_Uf5WIMNWFGvU4LK-1tor/preview)
- [Spring Data, encore plus d'abstraction pour l’accès aux données](https://drive.google.com/file/d/1rMNR9TvuuMWlTuq9GLdDt2i7uCE6wmdB/preview)
- [Spring pour la configuration des vos API REST](https://drive.google.com/file/d//preview)
- [SpringSecurity: une abstraction pour la configuration de la sécurité dans vos backend](https://docs.google.com/presentation/d/1VagxGEMUw2s4ldhCwYAYS-Uu-YE9L6DvR4f74wXclp4/edit?usp=sharing)
- [Facilités pour les tests unitaires (hors scope TAA)](https://www.youtube.com/watch?v=Ekr4jxOIf4c&ab_channel=DefogTech)
- [slides](https://docs.google.com/presentation/d/1opFbZIpaT08NHB9YZvX0esSwvrAtj3zE93R6YjwDjwI/edit#slide=id.g49a56cd7bf_0_3)
### JHipster
- [JHipster à l'ISTIC (en nostalgie de l'amphi P) ](https://www.youtube.com/watch?v=LgYI6nloMOw&feature=youtu.be&ab_channel=BreizhJUG)
- [JHipster plus à jour](https://www.youtube.com/watch?v=wJruVpv0WH4&ab_channel=DevoxxFR)
Je vous propose aussi les vidéos sous forme de liste de lecture. Vous pouvez les ouvrir directement dans votre lecteur vidéo qui supporte les listes de lecture (genre VLC)
Voici l'adresse [https://raw.githubusercontent.com/barais/videoscours/master/TAA.m3u](https://raw.githubusercontent.com/barais/videoscours/master/TAA.m3u).
## TPs
Tout est sur le share
- [TP1 Mapping objet relationnel](https://docs.google.com/document/d/1XksDBYnQmaqVoNPZ3ZfGVpEPxlP9ATsBQRW1h48j_go/edit?usp=sharing)
- [Vidéo de wrapup](https://drive.google.com/file/d/1jKo-7l1SO6fa0ww0d8B4V4HARS_NoiNs/preview)
- [TP 2: Des servlets aux API Rest documentées avec OpenAPI](https://docs.google.com/document/d/1H3YU4agteIqMysxSWKxEWEqjpQs0kIVQa3gQQG27CXc/edit?usp=sharing)
- [Vidéo de wrapup partie Servlet](https://drive.google.com/file/d/1eler78gnkpVkBXOBJzmPhWHe_TJda2V5/preview)
- [Vidéo de wrapup partie Rest](https://drive.google.com/file/d/1vrJDGcRPT6--_EQov6X5Uz9R_U1jqjxN/preview)
- [TP3 A la découverte de Spring](https://docs.google.com/document/d/1seSUjRonPMPO4lFu6VzCuO4H8U7QB__Oqo1kso6UIY4/edit?usp=sharing)
- [Vidéo de présentation](https://drive.google.com/file/d/1eOCaymz44G_q90-b96pMoyaGAyPiqsU1/preview)
- [Liens pour expliquer la différence entre les annotations JAXRS et SpringBoot](https://www.baeldung.com/rest-api-jax-rs-vs-spring)
- [TP4: Authentification avec Keycloak au sein d'une application SpringBoot](https://hackmd.diverse-team.fr/s/ByjU4Olbo)
## Communication
On se retrouve sur team
## Evaluations
La note de TAA se compose d'une partie TP pour 50% et d'une partie exam sur table d'1h30 pour 50%.
Les TPs seront à rendre pour le 7 octobre à 23h59. Ce n'est pas grave si vous n'avez pas tout fait. L'idée est de passer aux autres UEs rapidement.
Pour le rendu vous utiliserez le formulaire joint afin de transmettre vos repos git. (Attention à les mettres public ou gérer des invitations longues durées ;)
https://docs.google.com/forms/d/e/1FAIpQLSdutdFUoVRD2Zc2uOC2UDclFcybl5fu-EYjJNH8hpC00USwzQ/viewform
Chaque repo doit contenir un fichier readme.md servant de compte rendu ou un fichier pdf dans le repo si vous préférez pour le compte rendu. Dans ce rendu, pensez à bien détaillez le processus pour lancer vos TPs. Pensez aussi à indisquer si vous avez utiliser des branches particulières pour les différents TPs.
N'hésitez pas pour les questions.
<a id="links"></a>
## Links
- [Excellents sites autour de Spring](https://www.baeldung.com/)
- [JHipster](https://www.jhipster.tech/)
- [site du Breizhjug](http://www.breizhjug.org)
- [Spring 5 new features](https://www.youtube.com/watch?v=24QGJn00uRY&ab_channel=JUG.ru)
<a id="faq"></a>
## FAQ
### Est ce qu'il est possible que vous réexpliquiez le registre de service car je ne comprends pas bien comment ça marche avec l'exemple dans votre video?
> L'idée d'un registre de service c'est comme l'utilisation d'un moteur de recherche sur Internet. Pour récupérer ses dépendances, un objet va interroger un autre objet qui est une sortes d'annuaires. Cet annuaire est capable de donner la référence à d'autres objets en fonction par exemple d'un nom. En gros un objet 'a' instance de la classe A a une dépendance version un objet de type B. Il ne vas pas instancier B lui même mais il va interroger un objet c, (l'annuaire de service) pour demander une référence à un objet instance de B (ou instance d'une classe qui implémente B). Cela reste testable car le registre de service peut donner une référence à un bouchon en phase de test. Il n'y a de dépendances directes entre classes concrêtes. Mais par contre cela oblige à avoir la référence du registre de services.
>
### J'ai une erreur du type *No Persistence provider for EntityManager named dev*
```txt
j'ai une erreur lors de la compilation qui dit ceci: Sep 14, 2020 3:01:15 PM javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver logWARNING: javax.persistence.spi::No valid providers found.
Exception in thread "main" java.lang.ExceptionInInitializerError
at JpaTest.main(JpaTest.java:12)
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named dev
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at EntityManagerHelper.<clinit>(EntityManagerHelper.java:10)
... 1 more
```
Le fichier persistence.xml n'est pas trouvé, il doit être dans un répertoire META-INF dans le classpath à l'exécution. Concrètement
## Tips
### Installer mysql et phpmyadmin à l'aide de docker
On stop mysql si il est installé sur notre machine
```bash
sudo service mysql stop
```
Pour démarrer la base de données avec docker.
```bash
# On démarre un conteneur qui aura comme nom some-mysql et comme mot de passe my-secret-pw
# On exporte le port 3306 sur notre host pour que notre programme Java puisse dialoguer facilement avec la base de données
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
```
Pour démarrer phpmyadmin avec docker.
```bash
docker run --name myadmin -d --link some-mysql:db -p 8082:80 phpmyadmin
```
Php myadmin est accessible alors sur http://localhost:8082
Votre base de données est configurable sur localhost sur le port 3306, utilisateur **root**, password **my-secret-pw**
Pour redémarrer les containers après un reboot de la machine. Stopper mysql puis.
```bash
docker start some-mysql myadmin
```
Pour supprimer les containers
```bash
docker stop myadmin some-mysql
docker rm myadmin some-mysql
```