Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
d3:tp06 [2025/10/13 13:32] – dthevenot | d3:tp06 [2025/10/13 14:52] (Version actuelle) – [1-La datasource] dthevenot | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~SLIDESHOW~~ | ~~SLIDESHOW~~ | ||
+ | |||
====== D3-TP06 : Projet " | ====== D3-TP06 : Projet " | ||
< | < | ||
===== ORM ===== | ===== ORM ===== | ||
Un ORM (Object-Relational Mapping / mapping objet-relationnel) est un ensemble de bibliothèques permettant de mapper (faire correspondre) les structures de données orientées objet d'un langage de programmation avec les tables d'une base de données relationnelle. L' | Un ORM (Object-Relational Mapping / mapping objet-relationnel) est un ensemble de bibliothèques permettant de mapper (faire correspondre) les structures de données orientées objet d'un langage de programmation avec les tables d'une base de données relationnelle. L' | ||
+ | ===== ===== | ||
L'ORM offre plusieurs avantages significatifs : | L'ORM offre plusieurs avantages significatifs : | ||
Ligne 13: | Ligne 14: | ||
===== JPA ===== | ===== JPA ===== | ||
JPA est un acronyme qui signifie **Java Persistence API**. C'est évolution de l' | JPA est un acronyme qui signifie **Java Persistence API**. C'est évolution de l' | ||
+ | ===== ===== | ||
==== 1-La datasource ==== | ==== 1-La datasource ==== | ||
Dans Payara il faut une **DataSource JDBC jdbc/ | Dans Payara il faut une **DataSource JDBC jdbc/ | ||
Définir la ressource JNDI sur ton serveur | Définir la ressource JNDI sur ton serveur | ||
+ | < | ||
+ | * d’accéder à différents services de nommage ou de répertoire de façon uniforme ; | ||
+ | * d' | ||
+ | * de faire des opérations sur des annuaires (java naming and directory interface) | ||
+ | </ | ||
+ | ===== ===== | ||
- Aller sur : http:// | - Aller sur : http:// | ||
- Menu : Resources → JDBC → JDBC Connection Pools | - Menu : Resources → JDBC → JDBC Connection Pools | ||
Ligne 23: | Ligne 30: | ||
- Pool Name : MonPoolMariaDB | - Pool Name : MonPoolMariaDB | ||
- Resource Type : javax.sql.DataSource | - Resource Type : javax.sql.DataSource | ||
- | - Classname : org.mariadb.jdbc.MariaDbDataSource | ||
- Database Vendor : MySQL (MariaDB est compatible MySQL) | - Database Vendor : MySQL (MariaDB est compatible MySQL) | ||
- Next | - Next | ||
+ | - Classname : org.mariadb.jdbc.MariaDbDataSource | ||
- Propriétés additionnelles : | - Propriétés additionnelles : | ||
- Finish | - Finish | ||
+ | ===== ===== | ||
< | < | ||
- | < | + | ===== ===== |
- | * d’accéder à différents services de nommage ou de répertoire de façon uniforme ; | + | |
- | * d' | + | |
- | * de faire des opérations sur des annuaires (java naming and directory interface) | + | |
- | </ | + | |
Créer la JDBC Resource (source de données JDBC) : | Créer la JDBC Resource (source de données JDBC) : | ||
- Menu : Resources → JDBC → JDBC Resources | - Menu : Resources → JDBC → JDBC Resources | ||
Ligne 41: | Ligne 45: | ||
- Pool Name : monPoolMariaDB | - Pool Name : monPoolMariaDB | ||
- Clique sur OK | - Clique sur OK | ||
+ | ===== ===== | ||
==== 2-Configurer la persistence avec JPA ==== | ==== 2-Configurer la persistence avec JPA ==== | ||
=== a) Les dépendances JPA === | === a) Les dépendances JPA === | ||
Ligne 60: | Ligne 65: | ||
</ | </ | ||
</ | </ | ||
+ | ===== ===== | ||
=== b) persistence.xml === | === b) persistence.xml === | ||
Ce fichier indique à JPA comment se connecter à la base de données. | Ce fichier indique à JPA comment se connecter à la base de données. | ||
Ligne 78: | Ligne 84: | ||
</ | </ | ||
</ | </ | ||
+ | ===== ===== | ||
==== Les transactions ==== | ==== Les transactions ==== | ||
__Rappel__ :Une transaction est une série d’actions qui doivent toutes se terminer avec succès, sinon toutes les modifications apportées à chaque action sont annulées. Les transactions se terminent par une validation ou une annulation. | __Rappel__ :Une transaction est une série d’actions qui doivent toutes se terminer avec succès, sinon toutes les modifications apportées à chaque action sont annulées. Les transactions se terminent par une validation ou une annulation. | ||
Ligne 88: | Ligne 95: | ||
En règle générale, le conteneur commence une transaction immédiatement avant le démarrage d’une méthode et valide la transaction juste avant la fermeture de la méthode. Chaque méthode peut être associée à une seule transaction. Les transactions imbriquées ou multiples ne sont pas autorisées dans une méthode. | En règle générale, le conteneur commence une transaction immédiatement avant le démarrage d’une méthode et valide la transaction juste avant la fermeture de la méthode. Chaque méthode peut être associée à une seule transaction. Les transactions imbriquées ou multiples ne sont pas autorisées dans une méthode. | ||
+ | ===== ===== | ||
* RESOURCE_LOCAL – mode application-managed | * RESOURCE_LOCAL – mode application-managed | ||
Utilisé dans les applis standalone (Java SE, Spring Boot sans conteneur JEE). Les transactions sont gérées par le code (ex : getTransaction(), | Utilisé dans les applis standalone (Java SE, Spring Boot sans conteneur JEE). Les transactions sont gérées par le code (ex : getTransaction(), | ||
Ligne 96: | Ligne 103: | ||
< | < | ||
</ | </ | ||
+ | ===== ===== | ||
==== L'EJB ==== | ==== L'EJB ==== | ||
- | EJB est une spécification Java pour créer des composants métier côté serveur, qui permettent de gérer automatiquement: | + | EJB (Enterprise Java Bean) est une spécification Java pour créer des composants métier côté serveur, qui permettent de gérer automatiquement: |
* La logique métier (ex : traitement de commandes, calculs…) | * La logique métier (ex : traitement de commandes, calculs…) | ||
* La sécurité | * La sécurité | ||
* La transaction | * La transaction | ||
* La concurrence | * La concurrence | ||
+ | ===== ===== | ||
Types principaux d’EJB | Types principaux d’EJB | ||
- **Stateless (@Stateless)** : | - **Stateless (@Stateless)** : | ||
Ligne 114: | Ligne 122: | ||
- Une seule instance partagée pour tous les clients. | - Une seule instance partagée pour tous les clients. | ||
- Exemple : compteur global ou cache partagé. | - Exemple : compteur global ou cache partagé. | ||
+ | ===== ===== | ||
==== 3-Créer l’entité Client utilisable par la JPA ==== | ==== 3-Créer l’entité Client utilisable par la JPA ==== | ||
Une entité JPA est très proche d’une classe java Bean (Client), mais avec quelques annotations supplémentaires pour que JPA sache comment la relier à la base de données. | Une entité JPA est très proche d’une classe java Bean (Client), mais avec quelques annotations supplémentaires pour que JPA sache comment la relier à la base de données. | ||
Ligne 120: | Ligne 129: | ||
* "New > Entity Class" : création de l' | * "New > Entity Class" : création de l' | ||
* "New > Entity Classes from Database" | * "New > Entity Classes from Database" | ||
+ | ===== ===== | ||
Nous allons créer l' | Nous allons créer l' | ||
<code ruby entité Client> | <code ruby entité Client> | ||
Ligne 172: | Ligne 181: | ||
} | } | ||
</ | </ | ||
+ | ===== ===== | ||
< | < | ||
^Élément ^Classe Java simple ^Classe JPA Entity^ | ^Élément ^Classe Java simple ^Classe JPA Entity^ | ||
Ligne 179: | Ligne 189: | ||
|Constructeur vide|Optionnel|Obligatoire| | |Constructeur vide|Optionnel|Obligatoire| | ||
|Gestion SQL |Fait à la main (JDBC)|Automatique (via EntityManager)| | |Gestion SQL |Fait à la main (JDBC)|Automatique (via EntityManager)| | ||
+ | ===== ===== | ||
==== 4-Créer un DAO ==== | ==== 4-Créer un DAO ==== | ||
La classe java **ClientMysql** est un DAO (Data Access Object) en mode **JDBC classique** (Connection, | La classe java **ClientMysql** est un DAO (Data Access Object) en mode **JDBC classique** (Connection, | ||
Ligne 207: | Ligne 218: | ||
} | } | ||
</ | </ | ||
+ | ===== ===== | ||
< | < | ||
^Action ^JDBC (ClientMysql) ^JPA (ClientJpa)^ | ^Action ^JDBC (ClientMysql) ^JPA (ClientJpa)^ | ||
Ligne 214: | Ligne 226: | ||
|Gestion des transactions |Manuelle (implémentée ou pas) |Automatique via em.getTransaction()| | |Gestion des transactions |Manuelle (implémentée ou pas) |Automatique via em.getTransaction()| | ||
|Fermeture |stmt.close(), | |Fermeture |stmt.close(), | ||
+ | ===== ===== | ||
< | < | ||
^Notion ^Explication^ | ^Notion ^Explication^ | ||
Ligne 226: | Ligne 238: | ||
| | |SELECT c signifie : « prends tous les clients ».| | | | |SELECT c signifie : « prends tous les clients ».| | ||
| | |Client.class indique le type de retour attendu : ici, chaque résultat sera un objet Client.| | | | |Client.class indique le type de retour attendu : ici, chaque résultat sera un objet Client.| | ||
+ | ===== ===== | ||
==== 5-Adaptation de l' | ==== 5-Adaptation de l' | ||
=== Modification de la classe NouveauClientForm === | === Modification de la classe NouveauClientForm === | ||
Ligne 261: | Ligne 273: | ||
} | } | ||
</ | </ | ||
+ | ===== ===== | ||
< | < | ||
=== Modification de la servlet NouveauServlet.java === | === Modification de la servlet NouveauServlet.java === | ||
Ligne 270: | Ligne 283: | ||
< | < | ||
+ | ===== ===== | ||
==== 6-TP: faire évoluer tout le projet " | ==== 6-TP: faire évoluer tout le projet " | ||