Vous êtes sur la page 1sur 7

Types dapplications pour la persistance

Universit de Nice Sophia-Antipolis


Version 0.9 28/8/07

Toutes les applications nont pas une complexit qui ncessite une architecture ntiers Ce cours dcrit les grands modles dapplications qui utilisent une base de donnes relationnelle

Richard Grin

Richard Grin

Types dapplication pour la persistance

page 2

Base de donnes prexistante ?

Outils de dveloppement
Des outils permettent de gnrer des classes Java partir du schma dune base ou inversement de gnrer le schma dune base partir des classes Java des objets persistants Si la base prexiste et ne peut tre modifie, le mapping objet-relationnel devra tenir compte la fois de la conception objet et du schma de la base Sinon, le schma de la base pourra tre gnr automatiquement partir des classes Java

Richard Grin Types dapplication pour la persistance page 4

2 points importants pour processus de dveloppement de lapplication : n La base de donnes qui sera utilise existe-telle dj ou non ? n S la base prexiste, le dveloppeur de lapplication peut-il modifier, au moins partiellement, la structure de la base ?

Richard Grin

Types dapplication pour la persistance

page 3

3 modles
Toutes les applications nont pas une complexit qui ncessite une architecture n-tiers 3 modles schmatiques darchitecture : n Modle procdural n Modle objet simple avec persistance intgre aux objets n Modle objet avec utilisation dun outil de mapping

Variantes avec passerelles


Chacun de ces modles peut utiliser ou non des passerelles entre lobjet et le relationnel, classes supplmentaires qui isolent le code qui gre la persistance (DAO par exemple)

Richard Grin

Types dapplication pour la persistance

page 5

Richard Grin

Types dapplication pour la persistance

page 6

Autour des procdures


Pour les applications aux fonctionnalits les plus simples et pour un dveloppement rapide Le plus souvent la base de donnes est prexistante Lapplication est organise autour de procdures qui accdent directement la base de donnes quand cest ncessaire Utilisation possible de procdures stockes pour encapsuler les scnarios des cas dutilisation

page 7 Richard Grin Types dapplication pour la persistance page 8

Modle procdural

Richard Grin

Types dapplication pour la persistance

Exemple : classe GestionEmployes


Mthode void ajouter(int matricule, String nom,) ajoute un nouvel employ, en ajoutant une nouvelle ligne dans la base Mthode double getTotalDept(int dept) renvoie le total des salaires pour un dpartement, en lanant une requte SQL qui ramne le rsultat On peut se passer dune classe Employe

Richard Grin Types dapplication pour la persistance page 9

Pour des modles mtier simples

Les traitements de lapplication doivent tre pauvres en traitements mtier et essentiellement lis la persistance des donnes : n ajouts et suppressions denregistrements n modifications simples de donnes effectues directement par lutilisateur

Richard Grin

Types dapplication pour la persistance

page 10

Ce modle est limit


On est dans ce cas trs loign du modle objet ; on ne profite donc pas de ses atouts : n hritage n polymorphisme n facilit de rutilisation des objets n relations entre objets n Quand lapplication se complexifie il est difficile de lenrichir avec de nouvelles fonctionnalits et de rutiliser/partager du code

Richard Grin Types dapplication pour la persistance page 11

Modle objet simple avec persistance intgre aux objets

Richard Grin

Types dapplication pour la persistance

page 12

Un modle objet simple


La correspondance entre les tables et les classes est le plus souvent bijective Chaque classe contient le code pour grer la persistance de ses propres instances Pattern appel active record par Martin Fowler

Exemple : classe Employe


La table EMPLOYE lui est associ Elle contient la mthode dinstance ajouter() (on pourrait lappeler ajouteToiDansLaBase) qui ajoute une ligne dans la table EMPLOYE ; cette ligne contient les valeurs des attributs de linstance La classe contient aussi des mthodes sauvegarder() (ou modifier()), supprimer()
Richard Grin Types dapplication pour la persistance page 14

Richard Grin

Types dapplication pour la persistance

page 13

Mthodes pour la recherche

Exemple
Une mthode qui recherche tous les employs dun dpartement Choix 1 :

Elles peuvent tre mises : n dans une classe qui se charge des recherches (un finder) n en static dans la classe mtier qui correspond au type renvoy n dans le cas particulier o le critre de recherche correspond une des classes mtier, la mthode peut tre mise dans cette classe mtier (choix 3 du transparent suivant)
Types dapplication pour la persistance page 15

List<Employe> rechercher(Dept dept)

dans la classe RechercheEmploye Choix 2 :


static List<Employe> rechercher(Dept dept)

de la classe Employe

Choix 3 : List<Employe> getEmployes() de la classe Departement


Types dapplication pour la persistance page 16

Richard Grin

Richard Grin

Dsavantages
Les classes mtier sont trop lies au support de persistance utilis En consquence tout refactoring entranant une modification du modle objet va obliger revoir le code de la persistance Le code pour la persistance se rvle vite long, fastidieux et difficile crire et mettre au point ds que le modle objet se complexifie et quon recherche des bonnes performances dans un environnement charg

Richard Grin Types dapplication pour la persistance page 17

Utilisation dun outil de mapping

Richard Grin

Types dapplication pour la persistance

page 18

Un modle objet complexe avec outil de mapping


Pour les modles objets complexes avec beaucoup dhritage et dassociations entre classes le modle prcdent est difficile implmenter et maintenir Un outil de mapping ou un framework permet dautomatiser la correspondance objetrelationnel

Outils de mapping
La correspondance objet-relationnel est dcrite dans des fichiers des configuration ou par des annotations La persistance peut devenir presque transparente pour le dveloppeur qui crit le code Java Difficile dcrire soi-mme de tels outils car ils sont trs complexes

Richard Grin

Types dapplication pour la persistance

page 19

Richard Grin

Types dapplication pour la persistance

page 20

JPA
Spcification standard pour la persistance de objets Java (tudi la fin de ce cours) Fait partie de la spcification EJB 3, framework pour les applications dentreprise TopLink Essentials est limplmentation de rfrence de JPA

Hibernate
Avec Toplink, loutil de mapping le plus utilis dans le monde Java Utilise un gestionnaire de persistance, lintrospection et lenrichissement de code lexcution pour rcuprer les valeurs des proprits des objets et grer leur persistance Les dernires versions sont conformes au standard JPA

Richard Grin

Types dapplication pour la persistance

page 21

Richard Grin

Types dapplication pour la persistance

page 22

Autres possibilits
JDO (Java Data Objects) est une autre API qui offre des possibilits semblables JPA Utilise lenrichissement de code pendant la phase de compilation

Framework (cadre de
dveloppement)
Ensemble de classes et ressources prexistantes que le dveloppeur doit complter Utilisation dune librairie : lexcution est dirige par le code crit par le dveloppeur, qui fait appel aux classes de la librairie Utilisation dun framework : lexcution est dirige par le framework qui fait appel au code crit par le dveloppeur
Richard Grin Types dapplication pour la persistance page 24

Richard Grin

Types dapplication pour la persistance

page 23

EJB
Le framework standard pour les applications Java dentreprise, EJB (Entreprise Java Beans), est fourni par J2EE, la version dentreprise de Java Il ncessite lutilisation dun serveur dapplications qui est un logiciel lourd rserver pour les grosses applications dentreprises

EJB
Classes Java qui implmentent les fonctionnalits dune application Le dveloppeur crit le code li aux fonctionnalits du mtier, sans soccuper des services techniques (scurit, distribution sur plusieurs machines, transactions, persistance,) Le serveur dapplications utilise ce code et y ajoute tous les services techniques indispensables au bon fonctionnement de lapplication
Richard Grin Types dapplication pour la persistance page 26

Richard Grin

Types dapplication pour la persistance

page 25

EJB Entits version 2


Il existe plusieurs types dEJB Les EJB entits correspondent aux objets mtier persistants Leur persistance peut tre entirement prise en charge par le container dEJB fourni par le serveur dapplication

Problmes EJB entits version 2


Les classes persistantes doivent hriter de certaines classes fournies par le framework Elles ne peuvent donc hriter dautres classes Le framework ne peut prendre en charge la persistance dobjets des classes Java ordinaires (POJO : Plain Old Java Object) Il est aussi difficile, sinon impossible, dutiliser les classes persistantes en dehors du container, en particulier pour les tests

Richard Grin Types dapplication pour la persistance page 28

Richard Grin

Types dapplication pour la persistance

page 27

EJB version 3
Les EJB entits nexiste plus en tant que tels dans EJB 3 Une entit est une classe Java ordinaire POJO dont la persistance est prise en charge par JPA (tudi dans la suite du cours) Les entits nont plus hriter de classes spciales et peuvent tre tests en dehors du serveur dapplications

Avantages des serveurs dapplications pour les EJB


Lavantage dutiliser les serveurs dapplications qui supportent les EJB est que la prise en charge est complte (scurit, transaction, distribution, accs concurrents,) Il est plus facile de maintenir le code lorsque lapplication monte en charge (plus grand nombre de connexions, distribution des serveurs sur plusieurs machines,)

Richard Grin

Types dapplication pour la persistance

page 29

Richard Grin

Types dapplication pour la persistance

page 30

Passerelle
Classe qui contient tout le code pour grer la persistance Chaque table a une classe passerelle qui lui correspond Le reste de lapplication fait appel aux passerelles pour grer la persistance

Passerelles

Richard Grin

Types dapplication pour la persistance

page 31

Richard Grin

Types dapplication pour la persistance

page 32

Utilisation
Isolent la persistance du reste de lapplication Facilitent les changements de SGBD et permettent dallger le code des classes mtier Peuvent tre utilises avec les 3 modles vus prcdemment

2 types de passerelle
Une instance de passerelle par table (le plus frquent) Une instance de passerelle par ligne de table Le pattern DAO (Data Access Object), trs utilis et tudi plus loin dans ce cours, correspond au type une passerelle par table

Richard Grin

Types dapplication pour la persistance

page 33

Richard Grin

Types dapplication pour la persistance

page 34

Exemple de passerelle
La classe EmployeDAO gre la persistance des instances de la classe Employe et correspond la table employe Elle contient la mthode ajouter(int matricule, String nom,)

Exemple de passerelle
Avec une instance de passerelle par ligne, on aurait une mthode ajouter() car la passerelle aurait toutes les informations sur lemploy auquel elle est lie

La mthode prend en paramtre les informations sur lemploy ajouter car il existe une seule instance de la classe EmployeDAO pour tous les employs
Richard Grin Types dapplication pour la persistance page 35 Richard Grin Types dapplication pour la persistance page 36

Bibliographie

Patterns of Entreprise Application Architecture de Martin Fowler Addison Wesley

Richard Grin

Types dapplication pour la persistance

page 37

Vous aimerez peut-être aussi