GLG203 - TP13
Page
1
- dernière modification par Pascal GRAFFION le 2011/06/28 16:13
T
P1
3
Pasc
al
GRA
FFIO
N
2011
/06/2
8
16:1
3
Table des matières
TP 13 - Persistence avec JPA ................................................................................................................................................................................................................................. 2
Hello PetStore ! ......................................................................................................................................................................................................................................................... 2
GLG203 - TP13
Page
2
- dernière modification par Pascal GRAFFION le 2011/06/28 16:13
Entity manager ........................................................................................................................................................................................................................................................ 2
Expression des besoins ............................................................................................................................................................................................................................................. 4
Analyse et conception ................................................................................................................................................................................................................................................ 4
Vue logique ................................................................................................................................................................................................................................................................. 4
Vue processus ........................................................................................................................................................................................................................................................... 4
Vue implémentation ................................................................................................................................................................................................................................................. 4
Architecture .............................................................................................................................................................................................................................................................. 4
Vue déploiement ....................................................................................................................................................................................................................................................... 4
Implémentation ............................................................................................................................................................................................................................................................. 4
Recette utilisateur ........................................................................................................................................................................................................................................................ 4
Résumé ........................................................................................................................................................................................................................................................................... 4
Références ..................................................................................................................................................................................................................................................................... 5
TP 13 - Persistence avec JPA
La persistance des données en EJB 3 a été complètement réarchitecturée au travers de JPA (Java Persistence
API). Alors que nous parlions de composants persistants en EJB 2.x, JPA se recentre sur de simples classes
Java. En EJB 2.x la persistance ne pouvait être assurée qu’à l’intérieur du conteneur alors qu’avec JPA elle peut
être utilisée dans une simple application JSE (Java Standard Edition).
Hello PetStore !
Dans le modèle de persistance JPA, un entity bean est une classe java simple (un Pojo) complétée par de
simples annotations :
@Entity // 1
public class Book {
@Id // 2
private Long id;
@Column(nullable = false) // 3
private String title;
private Float price;
@Column(length = 2000) // 3
private String description;
private String isbn;
// ...
Notez la présence d’annotations à plusieurs endroits dans la classe Book :
1. tout d’abord, l’annotation @javax.persistence.Entity permet à JPA de reconnaître cette classe comme une
classe persistante et non comme une simple classe Java.
1. L’annotation @javax.persistence.Id, quant à elle, définit l’identifiant unique de l’objet. Elle donne à l’entity
bean une identité en mémoire en tant qu’objet, et en base de données via une clé primaire. Les autres
attributs (description, isbn, ...) seront rendus persistants par JPA en appliquant les paramétrages par
défaut : le nom de la colonne est identique à celui de l’attribut et le type String est converti en varchar(255).
1. L’annotation @javax.persistence.Column permet de préciser des informations sur une colonne de la table :
changer son nom (qui par défaut porte le même nom que lattribut), préciser son type, sa taille et si la
colonne autorise ou non la valeur null.
Entity manager
Quand on veut rendre persistent en base de données un entity bean (ou une entité), il faut utiliser un entity
manager. Il est logique d’encapsuler cet entity manager dans un DAO (Data Access Object) :
public class BookDAO {
private EntityManager em;
private EntityTransaction tx;
public BookDAO() {
// Gets an entity manager and a transaction
GLG203 - TP13
Page
3
- dernière modification par Pascal GRAFFION le 2011/06/28 16:13
EntityManagerFactory emf = Persistence.createEntityManagerFactory(”petstorePU”);
em = emf.createEntityManager();
tx = em.getTransaction();
}
public void persist(Book book) {
tx.begin();
em.persist(book); // 1
tx.commit();
}
Book findByISBN(String isbn) {
String queryString = ”select b from Book b where b.isbn = :isbn”;
Query query = em.createQuery( queryString ); // 2
query.setParameter( ”isbn”, isbn );
Book b = null;
b = (Book)query.getSingleResult();
return b;
}
}
L’entity manager peut notamment rendre persistant une entité par sa méthode persist() (1) ou permettre de
retrouver une entité en base en créant une requête JPQL (2)
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);
GLG203 - TP13
Page
4
- dernière modification par Pascal GRAFFION le 2011/06/28 16:13
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.
Noter que 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>
Expression des besoins
Analyse et conception
Vue logique
Nous allons conserver notre architecture en continuant à utiliser des DAOs. Ainsi seules les classes métiers et
leurs DAOs vont être amenées à évoluer.
Vue processus
Vue implémentation
Architecture
Vue déploiement
Identique au TP précédent.
Implémentation
Vous pouvez maintenant développer l’application à partir de la version précédente. Votre travail va consister
essentiellement à réécrire les classes Category, Product et Item ainsi que leurs DAO associées.
Recette utilisateur
Téléchargez les classes de test représentant la recette utilisateur et exécutez la classe AllDomainTests.
GLG203 - TP13
Page
5
- dernière modification par Pascal GRAFFION le 2011/06/28 16:13
Résumé
Références
Les cahiers du programmeurs : Java EE 5, 2nd Edition A Goncalves. Eyrolles. 2008.
EntityManager Java EE5 javadoc
http://download.oracle.com/javaee/5/api/index.html?javax/persistence/EntityManager.html
Testing Java EE components : JPA 2.0 With EclipseLink
http://www.antoniogoncalves.org/xwiki/bin/view/Article/TestingJPA
JPA implementation patterns: Data Access Objects
http://blog.xebia.com/2009/03/09/jpa-implementation-patterns-data-access-objects/
EclipseLink/Examples/JPA/JBoss Web Tutorial
http://wiki.eclipse.org/EclipseLink/Examples/JPA/JBoss_Web_Tutorial#JNDI_JTA.2Fnon-JTA_Server_DataSourc
e_Setup
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !