L'API JPA (Java™ Persistence API)
représente une simplification du
modèle de programmation de la persistance.
La persistance des données, c'est-à-dire la possibilité de conserver les données entre sessions d'application
dans un espace de stockage non volatil (tel qu'une base de données relationnelle), est cruciale pour
les applications d'entreprise. Les applications développées pour cet environnement doivent soit
gérer elles-mêmes la persistance des données, soit recourir à des solutions tierces pour
tout ce qui a trait aux mises à jour et aux extractions dans la base de
données. JPA fournit un mécanisme de gestion de la persistance des données et du mappage
objet-relationnel ; il fonctionne pour les spécifications
EJB 3.0.
JPA est basé sur le modèle
de programmation Java
s'appliquant aux environnements
Java EE, mais il peut
aussi fonctionner dans
l'environnement
Java SE. La spécification JPA définit le mappage objet-relationnel en interne plutôt que de s'appuyer sur les
implémentations de mappage spécifiques aux fournisseurs ; elle utilise aussi des annotations ou des balises
XML pour mapper les objets aux tables de base de données.
JPA est conçu pour fonctionner aussi bien à l'intérieur qu'à l'extérieur d'un conteneur Java Enterprise
Edition (Java EE). Lorsque vous
exécutez JPA à l'intérieur d'un conteneur, les applications
peuvent utiliser ce dernier pour gérer la persistance de leurs données. S'il n'y a pas de conteneur pour gérer JPA, les applications doivent gérer elles-mêmes la persistance de
leurs données. Les applications
conçues pour déléguer leur persistance au conteneur ne peuvent pas être utilisées en dehors d'un conteneur,
tandis que celles qui gèrent elles-mêmes leur persistance peuvent fonctionner aussi bien dans un environnement de
conteneur que dans un
environnement Java SE.
JPA fournit aussi un langage de requête, JPQL, qui vous permet d'extraire des objets sans écrire de requêtes SQL
spécifiques à la base de données que vous utilisez.
Les conteneurs Java EE
prenant en charge JPA doivent procurer un fournisseur de persistance. Un fournisseur de persistance JPA
utilise les éléments suivants pour assurer la persistance des données dans un environnement
EJB 3.0 :
- Objets entité : une entité est une simple
classe Java qui représente une
ligne dans une table de base de données. Les entités peuvent être des classes concrètes ou des
classes abstraites. Elles gèrent leurs états au moyen de propriétés ou de
champs.
- EntityManager : un objet EntityManager (gestionnaire d'entités) tient à jour la
collection active d'objets entité utilisés par l'application.
L'objet EntityManager
se charge de l'interaction avec la base de données et de la gestion des métadonnées qui servent à
réaliser les mappages objet-relationnel. Une instance d'un objet EntityManager représente un contexte
de persistance. Une application exécutée dans un conteneur peut obtenir
l'objet EntityManager soit par injection, soit en le recherchant dans l'espace de nom
des composants Java. Si l'application gère elle-même sa persistance, elle obtient l'objet EntityManager auprès
de la fabrique EntityManagerFactory. Les conteneurs du type serveur d'applications
assurent généralement cette fonction ; en revanche,
la fabrique EntityManagerFactory est indispensable si vous utilisez la persistance JPA gérée
par l'application.
Remarque : L'injection de
l'objet EntityManager est seulement possible pour les artefacts suivants :
- Beans de session EJB 3.0.
- Beans gérés par messages EJB 3.0.
- Servlets (mais l'injection n'est pas supportée les JSP).
- Classe principale du client d'application.
- EntityManagerFactory : la fabrique utilisée pour créer un EntityManager
en vue de gérer les interactions avec la base de données.
- Unité de persistance : une unité de persistance est constituée de métadonnées
déclaratives qui décrivent la relation des objets entité vis-à-vis d'une
base de données relationnelle. La fabrique EntityManagerFactory utilise ces métadonnées pour créer un
contexte de persistance accessible via l'EntityManager.
- Contexte de persistance : le contexte de persistance est l'ensemble d'instances actives que l'application
gère à l'instant considéré. Le contexte de persistance peut être créé manuellement ou
par injection.