GLG203 - TP 12 - Persistence avec JPA
Page 4 - dernière modification par Pascal GRAFFION le 2014/01/12 10:28
Contexte de persistance
L'entity manager utilise un contexte de persistance (petstorePU) qui le renseigne sur le type de la base de données et les
paramètres de connexion à cette base de données. Ces informations sont décrites dans le fichier persistence.xml :
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="petstorePU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>domain.Book</class>
<properties>
<property name="eclipselink.target-database" value="MYSQL"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
<property name="eclipselink.logging.level" value="INFO"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/petstorejpadb"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value=""/>
</properties>
</persistence-unit>
</persistence>
Exemple d'utilisation
Le programme ci dessous crée une instance de Book, la rend persistente puis vérifie sa présence dans la base de données :
public class Main {
public static void main(String[] args) {
// Creates an instance of book
Book book = new Book();
String isbn = "1-84023-742-2";
book.setTitle("The Hitchhiker's Guide to the Galaxy");
book.setPrice(12.5F);
// Persists the book to the database
BookDAO dao = new BookDAO();
dao.persist(book);
// Retrieve one book from the database
book = dao.findByISBN(isbn);
System.out.println("Book with isbn = " + isbn);
System.out.println(book);
Pour compiler ce programme utiliser la cible compile, pour l'exécuter utiliser la cible run. Ces cibles sont définies dans le
fichier build.xml fourni; elles requièrent la présence des 2 fichiers jar javax.persistence-2.0.0.jar et eclipselink-2.0.0.jar livrés
dans le répertoire lib.
Le fichier persistence.xml doit être trouvé lors de l'exécution; il doit être présent dans un répertoire META-INF trouvé dans le
classpath.
Ceci est assuré par la cible prepare :
<target name="prepare" depends="check">
<echo message="Setup the Yaps environment"/>
<mkdir dir="${classes.dir}"/>
<mkdir dir="${classes.dir}/META-INF"/>
<copy file="${src.dir}/META-INF/persistence.xml" todir="${classes.dir}/META-INF"/>
<mkdir dir="${build.dir}"/>
</target>
Exécution depuis Eclipse
En lançant l'exécution de ce programme depuis Eclipse, l'erreur suivante risque de s'afficher :
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named
petstorePU
Pour contourner cette erreur il faudra copier le fichier Hello/src/META-INF/persistence.xml par exemple dans bin/META-
INF/persistence.xml (en supposant que bin est le "default output folder" du projet pour Eclipse (soit le répertoire dans lequel
Eclipse sauvegarde les classes compilées du projet)).