Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
2. Mise en place
2.1. Instructions pour Eclipse
Suivre la procédure précédente pour la création d’un projet Web Application.
Dans la section "Configuration", cliquer sur Modify. Dans la popup qui s’ouvre, sélectionner JPA - la version dépend de la version de TomEE.
Puis cliquer sur OK et continuer la création comme précédemment.
Une nouvelle étape de configuration apparaît dans le flux de l’assistant, JPA Facet. Cette étape permet de référencer le JAR qui contient l’API JPA à la compilation. Remplir les champs ainsi :
Champ | Valeur |
---|---|
Platform |
Generic 2.x |
JPA implementation type |
User library |
Persistent class management |
Annotated classes must be listed in persistence.xml |
Dans la section JPA implementation, cliquer sur le bouton de bibliothèque. Dans la fenêtre pop-up :
-
Cliquer sur New… pour créer une nouvelle bibliothèque utilisateur. L’appeler JPA.
-
Cliquer sur le Add External JARs… pour référencer le JAR qui contient l’API JPA. Il s’agit du JAR
javaee-api-x.y.z.jar
situé dans le répertoirelib
de TomEE. -
Finalement, cliquer sur Apply and Close.
Dans la fenêtre, sélectionner la librairie nouvellement créée.
Cliquer sur Next et terminer la configuration. Le projet doit être similaire à la structure suivante :
2.2. Instructions pour IntelliJ IDEA
Suivre la procédure précédente pour la création d’un projet Web Application.
Cocher également la case Java EE persistence. Indiquer les valeurs suivantes :
-
persistence.xml : 2.1
-
OpenJPA (il s’agit du moteur de persistence fourni par TomEE)
Dans la section Library, cliquer sur Create. Dans la popup, sélectionner le JAR openjpa-2.4.x.jar
.
Ce JAR est situé dans le répertoire lib du répertoire d’installation de TomEE.
|
Le projet créé doit avoir une structure similaire à la suivante :
2.3. Base de données
La base de données utilisée est HyperSQL (ou HSQLDB). Il s’agit d’une base de données très légère disponible au format JAR, qui contient le moteur d’exécution, le pilote JDBC ainsi qu’une console d’administration très simple. Il est disponible dans le répertoire TomEE.
L’avantage d’HSQLDB est d’être indépendant de toute installation externe. |
2.3.1. Configuration de la source de données
Dans le cadre d’un projet réel, il est nécessaire de créer une source de données explicite.
Dans le cadre du TP et pour des raisons de simplification, nous allons utiliser la source de données HSQLDB par défaut de TomEE. Son emplacement dépend de plusieurs critères, notamment de l’IDE, du système d’exploitation, etc.
Par exemple, avec IntelliJ IDE sous OSX, elle est située dans $HOME/Library/Caches/IntelliJIdea2017.2/tomcat/Unnamed_jpa/data/hsqldb/hsqldb
Trouver l’emplacement de la base de données sur le système de fichiers
|
2.3.2. Création automatisée du schéma
De même, dans le cadre d’un projet réel, il serait pertinent de créer le schéma de base de données a priori via les scripts DDL appropriés.
Dans le cadre du TP, il est suffisant de déléguer cette opération à OpenJPA.
Dans le fichier persistence.xml
, ajouter une propriété supplémentaire :
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit ...>
...
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
</properties>
</persistence-unit>
</persistence>
2.3.3. Logging
Afin de pouvoir d’analyser les problèmes qui risquent d’apparaître dans l’utilisation d’OpenJPA, il est possible (et souhaitable) d’activer les logs.
Pour ce faire, il faut juste ajouter une propriété supplémentaire dans le fichier persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit ...>
...
<properties>
<property name="openjpa.Log" value="DefaultLevel=TRACE, Tool=INFO" />
</properties>
</persistence-unit>
</persistence>
2.3.4. Visualisation des données
Pour vérifier l’état de la base, il est possible d’utiliser l’application contenue dans le JAR d’HSQLDB. Pour ce faire, double-cliquer sur le JAR.
Remplir les champs ainsi :
Champ | Valeur |
---|---|
Type |
HSQL Database Engine In-Memory |
Driver |
org.hsqldb.jdbc.JDBCDriver |
URL |
jdbc:hsqldb:file:<path/to/hsqldb> |
User |
SA |
Password |
Puis, cliquer sur Ok.
-
Le volet de gauche affiche les tables et les propriétés.
-
Le volet du haut permet d’écrire des requêtes SQL.
-
Le volet du bas affiche les résultats.
Le fichier HSQLDB ne peut être utilisé que par un seul processus à la fois avec le protocole |
3. Manipulation de l’API JPA
L’objectif de cette section est de lire et d’écrire un entité depuis un servlet depuis & vers la base de données. |
3.1. Implémentation du modèle
Créer une entité Book
qui comprend les propriétés suivantes :
Propriété | Type |
---|---|
|
|
|
|
|
|
|
|
|
|
-
Créer une classe
Book
avec les champs adéquats -
La modifier pour en faire une entité JPA
-
Choisir l’identifiant de manière adaptée
3.2. Contraintes sur la conception
Un certain nombre de raccourcis ont été pris dans le cadre du cours afin de rester dans la limite du volume horaire fixé. En particulier, la notion de transaction n’a pas été abordée. Un contexte transactionnel est en général nécessaire pour utiliser JPA. Contrairement aux servlets, les EJB sont des composants qui proposent un tel contexte par défaut.
Il est donc nécessaire d’adopter la conception suivante :
Cela se traduit dans le code ainsi :
@Stateless
public class MyService {
// Reference the entity manager
}
public class MyServlet extends HttpServlet {
/** Reference the EJB. */
@EJB
private MyEjb myEjb;
}