- Tutoriel Java EE -
Configuration de l'accès à la base de données

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 :

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 :

  1. Lui donner un nom unique permettant à l'application de le référencer comme une source de données ;
  2. 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 :

  1. Aller dans le menu File > New File > GlassFish puis choisir l'assistant JDBC Resource :
  2. Création d'une source de données - Etape 1
  3. Laisser l'écran "Additional Properties" vide :
  4. Création d'une source de données - Etape 1bis
  5. 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 :
  6. Création d'une source de données - Etape 2
  7. 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 :
  8. Création d'une source de données - Etape 3
  9. 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 :
  10. Création d'une source de données - Etape 4
  11. Laisser les valeurs par défaut dans l'écrant "Optional Properties for Connection Pool" et cliquer sur "Finish" :
  12. Création d'une source de données - Etape 4bis

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 :

  1. Les informations concernant la ressource JDBC avec un nom de pool de connexions :
  2. 
      <jdbc-resource enabled="true" jndi-name="jdbc/eMarket" object-type="user" pool-name="eMarketPool">
        <description/>
      </jdbc-resource>
    
  3. Les informations concernant le pool de connexions, juste après la déclaration de la ressource JDBC :
  4. 
      <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".

Création d'une unité de persistance

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>