Dans la suite de cette page, les instructions que vous devez suivre sont indiquées comme suit :
instructions à suivre !
Introduction
L'application de commande en ligne eMarket dispose de pages web dynamiques avec lesquelles l'utilisateur peut interagir. Cependant, l'application repose uniquement sur des JavaBeans qui ne sont pas persistants, ce qui veut dire que les données créés par l'utilisateur ne sont pas sauvegardées. JPA permet de rendre les données d'une application persistantes dans une base de données relationnelle telle que celle configurée à l'étape précédente (Java DB).
La première étape pour utiliser JPA consiste à configurer l'accès à la base de données.
Rappels sur la persistance avec JPA
JPA est l'API de persistance dans une base de données relationnelle utilisée dans Java EE.
EJB Entity et EntityManager
Le fonctionnement de JPA est basé sur deux éléments principaux :
- Des EJB Entity : ce sont des classes dans lesquelles des annotations définissent des correspondances entre les objets et leurs attributs et les tables relationnelles de la base de données (mapping relationnel-objet).
- Un EntityManager : c'est une classe qui est chargée de réaliser toutes les opérations CRUD (Create, Read, Update, Delete) sur les données de la base de données.
Connecteur JDBC
Pour accéder à la base de données, JPA utilise un connecteur. Pour les bases de données relationnelles, le connecteur utilisé est JDBC. Il faut configurer ce connecteur de la manière suivante :
- Lui donner un nom unique permettant à l'application de le référencer comme une source de données ;
- Définir un pool de connexion, c'est-à-dire un ensemble de liens prédéfinis entre le serveur d'applications et le serveur de bases de données qui pourront être utilisés par l'application. La configuration du pool de connexion consiste à donner l'adresse du serveur de bases de données, le nom de la base à laquelle accéder ainsi qu'un login/mdp d'accès.
Unité de persistance
Pour se connecter à la base de données et réaliser les opérations CRUD, l'EntityManager utilise les informations de configuration contenues dans un fichier appelé unité de persistance qui contient une référence sur le connecteur JDBC à utiliser en tant que source de données.
Création d'une source de données JDBC
Nous allons commencer par configurer le connecteur JDBC permettant d'accéder à la base de données.
Suivez les étapes :
- Aller dans le menu File > New File > GlassFish puis choisir l'assistant JDBC Resource :
- Laisser l'écran "Additional Properties" vide :
- Sélectionner Create New JDBC Connection Pool et donner un nom JNDI à la source de donnée (par exemple "jdbc/eMarket"). Laisser les autres champs tels qu'ils sont :
- Donner un nom au pool de connexion JDBC (par exemple "eMarketPool"). Sélectionner Extract from Existing Connection et choisir la connexion jdbc:derby://localhost:1527/eMarket dans la liste déroulante :
- NetBeans pré-remplit les propriétés nécessaires à la configuration de la source de données. Vérifiez simplement qu'elles sont correctes. Les principales informations à vérifier son que le nom de la base de données est "eMarket", l'utilisateur est "eMarket" et le mot de passe est celui que vous avez choisi :
- Laisser les valeurs par défaut dans l'écrant "Optional Properties for Connection Pool" et cliquer sur "Finish" :






L'assistant de NetBeans génère automatiquement la configuration de la source de données pour vous !
Les informations de configuration qui ont été générées se trouvent dans le fichier "sun-resources.xml" qui se trouve dans le répertoire "Server Resources" de votre projet. Ce fichier contient deux types d'informations :
- Les informations concernant la ressource JDBC avec un nom de pool de connexions :
- Les informations concernant le pool de connexions, juste après la déclaration de la ressource JDBC :
<jdbc-resource enabled="true" jndi-name="jdbc/eMarket" object-type="user" pool-name="eMarketPool"> <description/> </jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.ClientDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="eMarketPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false"> <property name="URL" value="jdbc:derby://localhost:1527/eMarket"/> <property name="serverName" value="localhost"/> <property name="PortNumber" value="1527"/> <property name="DatabaseName" value="eMarket"/> <property name="User" value="emarket"/> <property name="Password" value="emarket"/> </jdbc-connection-pool>
Création d'une unité de persistance
Nous allons maintenant créer une unité de persistance qui sera utilisée par l'EntityManager de JPA.
Aller dans le menu File > New File > Persistence puis choisir l'assistant Persistence Unit.
Donner un nom à l'unité de persistance ("eMarketPU" par exemple), sélectionner la source de données JDBC que vous avez créé à l'étape précédente et sélectionner none pour la Table Generation Strategy comme indiqué ci-dessous. Puis cliquez sur "Finish".

L'assistant de NetBeans génère automatiquement la configuration de l'unité de persistance pour vous !
La configuration de l'unité de persistance ainsi générée se trouve dans le fichier "persistence.xml" dans le répertoire "Configuration Files" du projet.
L'unité référence le nom de la ressource JDBC que nous avons créé à l'étape précédente :
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="eMarket2-warPU" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <non-jta-data-source>jdbc/eMarket</non-jta-data-source> <properties> </properties> </persistence-unit> </persistence>