Vous êtes sur la page 1sur 7

‰ Toutes les applications n’ont pas une

complexité qui nécessite une architecture n-


Types d’applications tiers
pour la persistance ‰ Ce cours décrit les grands modèles
d’applications qui utilisent une base de
Université de Nice Sophia-Antipolis données relationnelle
Version 0.9 – 28/8/07
Richard Grin

Richard Grin Types d’application pour la persistance page 2

Base de données préexistante ? Outils de développement


‰ 2 points importants pour processus de ‰ Des outils permettent de générer des classes
développement de l’application : Java à partir du schéma d’une base ou
n La base de données qui sera utilisée existe-t- inversement de générer le schéma d’une base à
elle déjà ou non ? partir des classes Java des objets persistants
n S la base préexiste, le développeur de ‰ Si la base préexiste et ne peut être modifiée, le
l’application peut-il modifier, au moins mapping objet-relationnel devra tenir compte à
partiellement, la structure de la base ? la fois de la conception objet et du schéma de la
base
‰ Sinon, le schéma de la base pourra être généré
automatiquement à partir des classes Java
Richard Grin Types d’application pour la persistance page 3 Richard Grin Types d’application pour la persistance page 4

3 modèles Variantes avec passerelles


‰ Toutes les applications n’ont pas une complexité ‰ Chacun de ces modèles peut utiliser ou non des
qui nécessite une architecture n-tiers « passerelles » entre l’objet et le relationnel,
‰ 3 modèles schématiques d’architecture : classes supplémentaires qui isolent le code qui
n Modèle « procédural » gère la persistance (DAO par exemple)
n Modèle objet simple avec persistance
intégrée aux objets
n Modèle objet avec utilisation d’un outil de
mapping

Richard Grin Types d’application pour la persistance page 5 Richard Grin Types d’application pour la persistance page 6

1
Autour des procédures
‰ Pour les applications aux fonctionnalités les plus
simples et pour un développement rapide
‰ Le plus souvent la base de données est
Modèle « procédural » préexistante
‰ L’application est organisée autour de
procédures qui accèdent directement à la base
de données quand c’est nécessaire
‰ Utilisation possible de procédures stockées pour
encapsuler les scénarios des cas d’utilisation

Richard Grin Types d’application pour la persistance page 7 Richard Grin Types d’application pour la persistance page 8

Exemple : classe GestionEmployes Pour des modèles métier simples


‰ Les traitements de l’application doivent être
‰ Méthode pauvres en traitements métier et
void ajouter(int matricule, String
nom,…) essentiellement liés à la persistance des
ajoute un nouvel employé, en ajoutant une données :
nouvelle ligne dans la base n ajouts et suppressions d’enregistrements

‰ Méthode n modifications simples de données effectuées


double getTotalDept(int dept) directement par l’utilisateur
renvoie le total des salaires pour un département,
en lançant une requête SQL qui ramène le
résultat
‰ On peut se passer d’une classe Employe

Richard Grin Types d’application pour la persistance page 9 Richard Grin Types d’application pour la persistance page 10

Ce modèle est limité


‰ On est dans ce cas très éloigné du modèle
objet ; on ne profite donc pas de ses atouts :
n héritage

n polymorphisme Modèle objet simple avec


n facilité de réutilisation des objets persistance intégrée aux objets
n relations entre objets

n…

‰ Quand l’application se complexifie il est difficile


de l’enrichir avec de nouvelles fonctionnalités
et de réutiliser/partager du code
Richard Grin Types d’application pour la persistance page 11 Richard Grin Types d’application pour la persistance page 12

2
Un modèle objet simple Exemple : classe Employe
‰ La correspondance entre les tables et les ‰ La table EMPLOYE lui est associé
classes est le plus souvent bijective ‰ Elle contient la méthode d’instance ajouter()
‰ Chaque classe contient le code pour gérer la (on pourrait l’appeler ajouteToiDansLaBase)
persistance de ses propres instances qui ajoute une ligne dans la table EMPLOYE ;
‰ Pattern appelé « active record » par Martin cette ligne contient les valeurs des attributs de
Fowler l’instance
‰ La classe contient aussi des méthodes
sauvegarder() (ou modifier()),
supprimer()

Richard Grin Types d’application pour la persistance page 13 Richard Grin Types d’application pour la persistance page 14

Méthodes pour la recherche Exemple


‰ Elles peuvent être mises : ‰ Une méthode qui recherche tous les employés
d’un département
n dans une classe qui se charge des
‰ Choix 1 :
recherches (un finder)
List<Employe> rechercher(Dept dept)
n en static dans la classe métier qui
dans la classe RechercheEmploye
correspond au type renvoyé
‰ Choix 2 :
n dans le cas particulier où le critère de static List<Employe> rechercher(Dept dept)
recherche correspond à une des classes de la classe Employe
métier, la méthode peut être mise dans cette ‰ Choix 3 :
classe métier (choix 3 du transparent suivant) List<Employe> getEmployes()
de la classe Departement

Richard Grin Types d’application pour la persistance page 15 Richard Grin Types d’application pour la persistance page 16

Désavantages
‰ Les classes métier sont trop liées au support
de persistance utilisé
‰ En conséquence tout refactoring entraînant
une modification du modèle objet va obliger à
revoir le code de la persistance
Utilisation d’un outil de mapping
‰ Le code pour la persistance se révèle vite long,
fastidieux et difficile à écrire et à mettre au
point dès que le modèle objet se complexifie et
qu’on recherche des bonnes performances
dans un environnement chargé

Richard Grin Types d’application pour la persistance page 17 Richard Grin Types d’application pour la persistance page 18

3
Un modèle objet complexe Outils de mapping
avec outil de mapping
‰ La correspondance objet-relationnel est décrite
‰ Pour les modèles objets complexes avec dans des fichiers des configuration ou par des
beaucoup d’héritage et d’associations entre annotations
classes le modèle précédent est difficile à ‰ La persistance peut devenir presque
implémenter et à maintenir transparente pour le développeur qui écrit le
‰ Un outil de mapping ou un framework permet code Java
d’automatiser la correspondance objet- ‰ Difficile d’écrire soi-même de tels outils car ils
relationnel sont très complexes

Richard Grin Types d’application pour la persistance page 19 Richard Grin Types d’application pour la persistance page 20

JPA Hibernate
‰ Spécification standard pour la persistance de ‰ Avec Toplink, l’outil de mapping le plus utilisé
objets Java (étudié à la fin de ce cours) dans le monde Java
‰ Fait partie de la spécification EJB 3, ‰ Utilise un gestionnaire de persistance,
framework pour les applications d’entreprise l’introspection et l’enrichissement de code à
‰ TopLink Essentials est l’implémentation de l’exécution pour récupérer les valeurs des
référence de JPA propriétés des objets et gérer leur persistance
‰ Les dernières versions sont conformes au
standard JPA

Richard Grin Types d’application pour la persistance page 21 Richard Grin Types d’application pour la persistance page 22

Autres possibilités Framework (cadre de


développement)
‰ JDO (Java Data Objects) est une autre API
qui offre des possibilités semblables à JPA ‰ Ensemble de classes et ressources
préexistantes que le développeur doit
‰ Utilise l’enrichissement de code pendant la
compléter
phase de compilation
‰ Utilisation d’une librairie : l’exécution est
dirigée par le code écrit par le développeur,
qui fait appel aux classes de la librairie
‰ Utilisation d’un framework : l’exécution est
dirigée par le framework qui fait appel au
code écrit par le développeur

Richard Grin Types d’application pour la persistance page 23 Richard Grin Types d’application pour la persistance page 24

4
EJB EJB
‰ Classes Java qui implémentent les
‰ Le framework standard pour les applications fonctionnalités d’une application
Java d’entreprise, EJB (Entreprise Java
‰ Le développeur écrit le code lié aux
Beans), est fourni par J2EE, la version
fonctionnalités du métier, sans s’occuper des
« d’entreprise » de Java
services techniques (sécurité, distribution sur
‰ Il nécessite l’utilisation d’un serveur plusieurs machines, transactions,
d’applications qui est un logiciel lourd persistance,…)
‰ À réserver pour les grosses applications
‰ Le serveur d’applications utilise ce code et y
d’entreprises ajoute tous les services techniques
indispensables au bon fonctionnement de
l’application
Richard Grin Types d’application pour la persistance page 25 Richard Grin Types d’application pour la persistance page 26

EJB Entités version 2 Problèmes EJB entités version 2


‰ Il existe plusieurs types d’EJB ‰ Les classes persistantes doivent hériter de
‰ Les EJB entités correspondent aux objets certaines classes fournies par le framework
métier persistants ‰ Elles ne peuvent donc hériter d’autres classes
‰ Leur persistance peut être entièrement prise ‰ Le framework ne peut prendre en charge la
en charge par le container d’EJB fourni par le persistance d’objets des classes Java
serveur d’application ordinaires (POJO : Plain Old Java Object)
‰ Il est aussi difficile, sinon impossible, d’utiliser
les classes persistantes en dehors du
container, en particulier pour les tests

Richard Grin Types d’application pour la persistance page 27 Richard Grin Types d’application pour la persistance page 28

EJB version 3 Avantages des serveurs


d’applications pour les EJB
‰ Les EJB entités n’existe plus en tant que tels
dans EJB 3 ‰ L’avantage d’utiliser les serveurs
d’applications qui supportent les EJB est que
‰ Une entité est une classe Java ordinaire
la prise en charge est complète (sécurité,
POJO dont la persistance est prise en charge
transaction, distribution, accès concurrents,…)
par JPA (étudié dans la suite du cours)
‰ Il est plus facile de maintenir le code lorsque
‰ Les entités n’ont plus à hériter de classes
l’application monte en charge (plus grand
spéciales et peuvent être testés en dehors du
nombre de connexions, distribution des
serveur d’applications
serveurs sur plusieurs machines,…)

Richard Grin Types d’application pour la persistance page 29 Richard Grin Types d’application pour la persistance page 30

5
Passerelle
‰ Classe qui contient tout le code pour gérer la
persistance
‰ Chaque table a une classe « passerelle » qui
Passerelles lui correspond
‰ Le reste de l’application fait appel aux
passerelles pour gérer la persistance

Richard Grin Types d’application pour la persistance page 31 Richard Grin Types d’application pour la persistance page 32

Utilisation 2 types de passerelle


‰ Isolent la persistance du reste de l’application ‰ Une instance de passerelle par table (le plus
‰ Facilitent les changements de SGBD et fréquent)
permettent d’alléger le code des classes métier ‰ Une instance de passerelle par ligne de table
‰ Peuvent être utilisées avec les 3 modèles vus ‰ Le pattern DAO (Data Access Object), très
précédemment utilisé et étudié plus loin dans ce cours,
correspond au type « une passerelle par
table »

Richard Grin Types d’application pour la persistance page 33 Richard Grin Types d’application pour la persistance page 34

Exemple de passerelle Exemple de passerelle


‰ La classe EmployeDAO gère la persistance des ‰ Avec une instance de passerelle par ligne, on
instances de la classe Employe et correspond à aurait une méthode
la table employe ajouter()
‰ Elle contient la méthode car la passerelle aurait toutes les informations
ajouter(int matricule, String nom,…) sur l’employé auquel elle est liée
‰ La méthode prend en paramètre les informations
sur l’employé à ajouter car il existe une seule
instance de la classe EmployeDAO pour tous les
employés

Richard Grin Types d’application pour la persistance page 35 Richard Grin Types d’application pour la persistance page 36

6
Bibliographie
‰ Patterns of Entreprise Application
Architecture de Martin Fowler – Addison
Wesley

Richard Grin Types d’application pour la persistance page 37

Vous aimerez peut-être aussi