Académique Documents
Professionnel Documents
Culture Documents
Introduction
Architecture Java EE
Le conteneur web
Java EE
Java Enterprise Edition Le conteneur EJB
Ghada Feki
2 LTIC IoT
La persistance des données en Java (JPA)
2 Ghada Feki
Web Dynamique
Confiance
Echange entre
applications
Introduction
Java Enterprise Edition Etat /
Architecture logicielle Banque /
Ghada Feki MVC Entreprise
…
4 Ghada Feki
1
Applications
Desktop
Concurrents
Applications
Bibliothèques Web
Ref : openclassrooms.com
Architecture interne MVC
7 Ghada Feki 8 Ghada Feki
2
MVC
Modèle
Vue
Contrôleur
HTML + Java
Ref : openclassrooms.com
Code
Framework Java EE
Architecture Java EE
Java EE
Ghada Feki
11 Ghada Feki
3
Plan Architecture des applications (3-tiers)
4
Plateforme Java EE
JavaEE comprend notamment :
Plateforme : base générique fournissant un ensemble de
fonctionnalités utiles pour une majorité d’applications. • Les spécifications du serveur d'application
Plateforme Java EE est un ensemble constitué de services • Des services, au travers d'API (Application
(API) offerts et de l'infrastructure d'exécution. Programming Interface : Interface de programmation
d’applications , contenant un ensemble de fonctions
courantes de « bas niveau » permettant des
applications de « haut niveau »)
5
Les services de communication
JCA (JavaEE Connector Architecture) est une API JAAS (Java Authentication and Authorization
de connexion au système d'information de l'entreprise, Service) est une API de gestion de l'authentification et
tels que les ERP des droits d'accès.
JMX (Java Management Extension) fournit des JavaMail est une API permettant l'envoi de courrier
extensions permettant de développer des applications électronique.
web de supervision d'applications
6
Java EE / Objectifs
Faciliter le développement de nouvelles applications à
base de composants Conteneur Web JDBC
Intégration avec les systèmes d’information existants HTTP
Navigateur Web JMS
Support pour les applications « critiques » de l’entreprise Servlet/JSP
JTA
Disponibilité, tolérance aux pannes, montée en charge,
RMI JAAS
securité ...
Composants JNDI
EJB
RMI
Application Java Conteneur EJB SGBD
Services / API
Plan
Les Servlet
28 Ghada Feki
7
Les Servlets Création d'une Servlet
Une servlet est un programme qui s’exécute coté serveur Les servlets sont des classes java qui jouent le rôle
en tant qu’extension du serveur. d'aiguilleurs dans une application (Contrôleur).
Une servlet est un composant qui étend les une servlet HTTP doit hériter de la classe
fonctionnalités d'un serveur web de manière portable et abstraite HttpServlet ;
efficace. Un serveur web héberge des classes Java servlets
qui sont exécutées à l'intérieur du container web. Le une servlet doit implémenter au moins une des
serveur web associe une ou plusieurs URLs à chaque méthodes doXXX(), afin d'être capable de traiter une
servlet. La servlet est invoquée lorsque des requêtes requête entrante.
HTTP utilisateur sont soumises au serveur.
Une servlet est une classe Java qui permet de créer
dynamiquement des données au sein d'un serveur HTTP.
Ces données sont présentées au format JSP.
Récupérer une
ressource web du
GET serveur via une URL doGet() HttpServletRequest contient la requête HTTP, et donne accès à
toutes ses informations, telles que les en-
têtes (headers) et le corps de la requête.
Soumettre au
serveur des données
POST de tailles variables
doPost() HttpServletResponse initialise la réponse HTTP qui sera
(volumineuses)
renvoyée au client, et permet de la
personnaliser, en initialisant par exemple
Identique à la
méthode GET mais
HEAD elle renvoie doHead() les en-têtes et le corps.
seulement les en-
têtes HTTP
8
Déclaration de Sevlet dans web.xml Mapping de Servlet dans web.xml
La déclaration de Sevlet dans le fichier web.xml (WEB- L'étape suivante est de faire correspondre la servlet
INF) est cruciale (définir l'identité). déclarée à une URL, afin qu'elle soit joignable par les
clients.
Le rôle primordial du fichier web.xml est de configurer
<servlet-name> permet de donner un nom à une l'application en associant une Servlet à une URL. Ainsi
servlet. C'est ensuite via ce nom qu'on lorsque le client la saisira, la requête HTTP sera
fera référence à la servlet en question. automatiquement aiguillée par le conteneur de servlets
<servlet-class> sert à préciser le chemin de la classe
vers la bonne servlet (celle qui est en charge de répondre
à cette requête).
de la servlet dans votre application.
9
Stratégie de conception:
Limiter le code Java dans les JSP Versions JSP
Deux options Extensions de fichiers
• Ecrire 25 lignes de code directement dans une JSP
•*.jsp, page JSP standard
• Ecrire ces 25 lignes dans une classe Java à part et 1 ligne
•*.jspf, fragment de page JSP
dans une JSP pour l’invoquer
Pourquoi la deuxième option est vraiment meilleure? •*.jspx, page JSP compatible XML
• Développement. Ecriture de la Classe dans un Deux syntaxes
environnement Java et pas HTML •Standard (JSP 1.2)
• Debogage. S’il y a des erreurs, elles sont visible à la
compilation •XML (JSP 2.0)
• Test. L’accès à la classe Java facilite le test (ex: boucle de Depuis la 2.0 : Extensible à travers des librairies de tag
test de100000itérations sur un serveur…) (fichier .tld) importés ou personnels.
• Réutilisation. Utilisation de la même classe dans
différentes pages JSP
37 Ghada Feki 38 Ghada Feki
argument de service/doGet) Le commentaire JSP n’est pas envoyéau client ni compilé dans la Servlet.
Tag de déclaration:<%! une_déclaration %>
Out – Instance de JspWriter (une version bufferisée de Sert à insérer du code Java.
Writer) utilisée pour envoyer des donnés sur la sortie Tag de scriplet :<% un_scriptlet %>
10
JavaBeans Comment utiliser des beans ?
Les JavaBeans forment la partie modèle. Une fois la classe créée, les beans sont des objets Java sur
But: Gérer les structures de données. lesquels on peut faire ces actions :
Recommandations pour un objet java (JavaBean): • instanciation d'un nouveau bean
• être une classe publique;
• récupération de la valeur d'une propriété du bean
• avoir au moins un constructeur par défaut, public et sans
paramètres; • affectation/modification de la valeur d'une propriété
• ne doit pas avoir de champs publics ; du bean
• peut définir des propriétés (des champs non publics), qui Pour faire cela dans une Servlet, le bean est traité comme
doivent être accessibles via des méthodes publiques getter un objet Java standard.
et setter, suivant des règles de nommage.
Ces objets java peuvent implémenter l'interface Serializable, ils
deviennent ainsi persistants et leurs états peuvent être
sauvegardés;
41 Ghada Feki 42 Ghada Feki
Implémentation du MVC
Cependant, dans une JSP, l'utilisation des balise de 1. Définir les beans pour représenter les données
scriptlets n'est pas très « propre », on utilisera plutôt 2. Utiliser une servlet pour gérer les requêtes : La servlet lit
l'une des manière suivantes : les paramètres de requêtes, vérifie les données
• balises JSP (JSP 1.2) : <jsp:useBean>,
manquantes ou malformées, appelle le code métier, etc.
<jsp:getProperty>, <jsp:setProperty> 3. Créer les beans : La servlet invoque le code métier
(spécifique à l’application) ou accède à une base de
• utilisation des EL (JSP 2.0) : ${...} données pour obtenir les résultats. Les résultats sont
dans les beans définis à l’étape 1
4. Placer le bean dans le bon scope : La servlet appelle
setAttribute sur la requête, la session, ou la servlet
context pour garder une référence sur les beans qui
représentent le résultat de la requête
11
Implémentation du MVC avec
RequestDispatcher
5. Transmettre la requête à la JSP (forward) : La servlet
détermine quelle JSP est appropriée à la situation et getServletContext() retourne un objet ServletContext, qui fait référence
utilise la méthode forward du RequestDispatcher pour au contexte commun à toute l'application : celui-ci
transférer le contrôle à la JSP contient un ensemble de méthodes qui permettent à
6. Extraire les données des beans L'EL permet de récupérer l'information sur un bean (s'il a
• JSP 1.2 : la JSP accède aux beans avec jsp:useBean et un été mis préalablement dans un scope par une servlet avec
scope correspondant au choix de l’étape 4. La JSP utilise un setAttribute):
ensuite jsp:getProperty pour afficher les propriétés des ${nomBean.property}
beans - nomBean est celui défini lors du setAttribute fait par la servlet
• JSP 2.0: la JSP utilise ${nameFromServlet.property} pour - property est le nom de la propriété que l'on veut accéder
afficher les propriétés des beans
12
Un Scope
Un scope peut être vu comme un conteneur de beans stocké du Application : ce scope est créé automatiquement au
côté du serveur (le client ne peut avoir aucune connaissance sur lancement du projet JEE sur le serveur. Les beans qu'il
ces beans).
contient sont partagés par tous les clients et ne sont
Il existe 4 types de Scopes, que l'on distingue par la durée de vie
des beans qui y sont stockés : détruit que lors de l'arrêt/rechargement du projet JEE sur
Requête : ce scope est créé à chaque requête du client, les
le serveur.
beans qu'il contient sont détruit lorsque le serveur à envoyé la Page : ce scope restreint la durée de vie des beans aux
réponse au client requêtes POST effectuées sur une page donnée, dès
Session : ce scope est créé automatiquement par le qu'on en sort, les beans sont détruit.(Ce scope n'est
conteneur JEE pour chaque client qui se connecte au serveur. quasiment pas utilisé)
Les beans qu'il contient ne sont visible que par le client
détenant la session, et sont détruit lorsque la session du client
se termine (géré par un timeout du côté du serveur)
13
Partage de données sur session Expression Language (EL)
Syntaxe
14
La librairie Core
La JSTL permet de développer des pages JSP en utilisant Cette bibliothèque « core » comporte les actions de base
des balises XML sans connaissances du langage Java. pour la gestion des variables de scope d’une application
Sun a proposé une spécification pour la Java Standard Tag web :
Library voir adresse java.sun.com/ jsp/ jstl. Affichage de variable, création, modification et
L’implémentation proposée vient du projet Jakarta JSTL suppression de variables de scope et de gestion des
1.1 disponible à l’adresse jakarta.apache.org/ taglibs.
exceptions;
Avantage: Rend le code plus facile à lire, à réutiliser et à
maintenir. Actions conditionnelles et boucles;
La dernière version est JSTL 1.2. Manipulation d’URL et redirection.
C’est un ensemble de balises personnalisées qui propose
des fonctionnalités souvent rencontrées dans les page JSP.
Utilisation conjointe avec les Expressions Languages (EL).
57 Ghada Feki 58 Ghada Feki
Elle propose les tags suivants répartis dans trois Mise en place
catégories :
Catégorie Tag Configurer Tomcat : mettre JSTL 1.2 (fichier jar dans lib
set de WEB-INF)
out
Utilisation de EL
remove Configurer Eclipse pour qu'il connaisse les balises JSTL :
catch ajouter la directive taglib à la JSP.
if <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
choose
Gestion du flux (condition et itération)
forEach %>
forTokens
import
Gestion des URL url
redirect
59 Ghada Feki 60 Ghada Feki
15
Syntaxe Core - Tag out
Le tag out permet d'envoyer dans le flux de sortie de la L'attribut default permet de définir une valeur par défaut
JSP le résultat de l'évaluation de l'expression fournie dans si le résultat de l'évaluation de la valeur est null. Si la
le paramètre " value ". valeur est null et que l'attribut default n'est pas utilisé
alors c'est une chaîne vide qui est envoyée dans le flux de
sortie.
Attribut Rôle <c:out value="${personne.nom}" default="Inconnu" />
value valeur à afficher (obligatoire)
default définir une valeur par défaut si la valeur est null Le tag out est particulièrement utile pour générer le code
escape booléen qui précise si les caractères particuliers (< > & ...) dans un formulaire en remplaçant avantageusement les
Xml doivent être convertis en leurs équivalents HTML (< > scriplets.
& ; ...)
<input type="text" name="nom" value="<c:out
value="${param.nom}"/>" />
16
Syntaxe Core - Tag choose
Ce tag permet de traiter différents cas mutuellement <c:choose>
<c:when test="${personne.civilite == 'Mr'}">
exclusifs dans un même tag. Le tag choose ne possède pas
Bonjour Monsieur
d'attribut. Il doit cependant posséder un ou plusieurs tags </c:when>
fils « when ». <c:when test="${personne. civilite == 'Mme'}">
Le tag when possède l'attribut test qui permet de Bonjour Madame
préciser la condition à évaluer. Si la condition est vraie </c:when>
<c:when test="${personne. civilite == 'Mlle'}">
alors le corps du tag when est évalué et le résultat est
Bonjour Mademoiselle
envoyé dans le flux de sortie de la JSP </c:when>
Le tag otherwise permet de définir un cas qui ne <c:otherwise>
correspond à aucun des autres cas inclus dans le tag. Ce Bonjour
tag ne possède aucun attribut. </c:otherwise>
</c:choose>
17
Syntaxe Core - Tag forTokens
<c:forEach begin="1" end="4" var="i"> Ce tag permet de découper une chaîne selon un ou
<c:out value="${i}"/><br> plusieurs séparateurs donnés et ainsi d'exécuter de façon
</c:forEach> répétitive le contenu de son corps autant de fois qu'il y a
d'occurrences trouvées.
Il possède plusieurs attributs :
L'attribut step permet de préciser le pas de l'itération.
Attribut Rôle
var variable qui contient l'occurrence en cours de traitement
(obligatoire)
<c:forEach begin="1" end="12" var="i" step="3"> items la chaîne de caractères à traiter (obligatoire)
<c:out value="${i}"/><br> delims précise le ou les séparateurs
varStatus nom d'une variable qui va contenir des informations sur l'itération
</c:forEach> en cours de traitement
begin numéro du premier élément à traiter (le premier possède le
numéro 0)
end numéro du dernier élément à traiter
69 Ghada Feki 70 Ghada Feki
step pas des éléments à traiter (par défaut 1)
L'attribut delims peut avoir comme valeur une chaîne de caractères ne Il n'y a pas d'occurrence vide. Dans le cas où deux séparateurs sont
contenant qu'un seul caractère (délimiteur unique) ou un ensemble de juxtaposés dans la chaîne à traiter, ceux-ci sont considérés comme
caractères (délimiteurs multiples). un seul séparateur. Si la chaîne commence ou se termine par un
séparateur, ceux-ci sont ignorés.
<c:forTokens var="token" items="chaine 1;chaine 2;chaine 3" delims=";"> <c:forTokens var="token" items="chaine 1;;chaine 2;;;chaine 3"
<c:out value="${token}" /><br> delims=";">
</c:forTokens> <c:out value="${token}" /><br>
</c:forTokens>
Dans le cas où il y a plusieurs délimiteurs, chacun peut servir de séparateur.
Il est possible de ne traiter qu'un sous-ensemble des occurrences de
<c:forTokens var="token" items="chaine 1;chaine 2,chaine 3" delims=";,"> la collection. JSTL attribut à chaque occurrence un numéro
<c:out value="${token}" /><br> incrémenté à partir de 0.
</c:forTokens> Les attributs begin et end permettent de préciser une plage
d'occurrences à traiter.
18
Contrôle d'un formulaire par une Servlet
<c:forTokens var="token" items="chaine 1;chaine 2;chaine 3" La balise form annonce le début d'un formulaire.
delims=";" begin="1" end="1" >
Attribut method de la balise form peut avoir ces deux
<c:out value="${token}" /><br>
valeurs :
</c:forTokens>
GET: correspond à l'appel d'une page par le navigateur
Résultat: chaine 2
(barre d'adresse ou lien)
Transmet les paramètres dans l'URL :
Il est possible de n'utiliser que l'attribut begin ou l'attribut end. http://localhost:8080/servlet/test?param=value
Si seul l'attribut begin est précisé alors les dernières POST: plus adapté au transfert de données depuis un
occurrences seront traitées. Si seul l'attribut end est précisé
alors seules les premières occurrences seront traitées. formulaire
Les attributs varStatus et step ont le même rôle que ceux du
tag forEach.
73 Ghada Feki 74 Ghada Feki
75 Ghada Feki
19
Plan La logique métier
La logique métier
La logique métier sera implémentée dans les EJB qui sont
Le conteneur EJB des composants transactionnels côté serveur et
accessibles à distance par leurs clients.
Les EJB (Enterprise JavaBeans)
Les EJB s’exécutent dans des serveurs Java EE
Interfaces des Enterprise JavaBeans fonctionnant comme des serveurs intermédiaires dans un
système client/serveur.
Les objets distribués
Les Middlewares
Le conteneur EJB
Deux types de conteneurs sont utilisés dans Du côté serveur, l’accès aux différentes ressources s’avère
l’architecture Java EE : le conteneur Web et le conteneur complexe.
EJB. Avec les EJB, la plupart des tâches se font par déclaration,
évitant ainsi d’écrire du code spécifique pour gérer les
• Le conteneur Web est un environnement d’exécution transactions ou la persistance.
pour les pages JSP et les servlets qui constituent une
passerelle entre l’interface utilisateur et les EJB Il s’agit de se concentrer sur le développement des
implémentant la logique métier. composants en déléguant au conteneur EJB l’implantation
des services techniques et la fourniture de ces services
• Le conteneur EJB est un environnement d’exécution durant l’exécution.
pour les EJBs. Le conteneur EJB contient les
composants métiers et leur fournit des services.
20
À un composant est associé un descripteur de Les principales fonctionnalités fournies par un conteneur
déploiement, pour signifier par exemple qu’un bean soit d’EJB sont :
persistant, sécurisé et accessible par plusieurs clients en
même temps. La connectivité entre les clients et les EJB :
• le conteneur gère les communications entre les clients
21
Les EJB (Enterprise JavaBeans)
La gestion de la concurrence : Les composants peuvent Le développement de logiciel a vu apparaître dans les
être invoqués par un seul client ou par plusieurs clients années 90 la notion de composant comme des morceaux
simultanément. de code standards, préconstruits, réutilisables et
La gestion du cycle de vie des composants : création et la encapsulant de la logique métier.
destruction des instances des composants. Les composants EJB sont conçus pour encapsuler la
La gestion du pool de connexions : logique métier et éviter au développeur d’applications de
• connexion à une BD = coûteuse en termes de
se préoccuper de : transaction, sécurité, concurrence,
ressources, communication, persistance, gestion d’erreurs...
• nombre de connexions limité par le nombre de licences,
• solution : le conteneur gère un pool de connexions.
Un composant EJB est constitué d’une collection de La spécification Enterprise JavaBeans 1.1 définit 2 types de
classes Java et d’un fichier XML, fusionnés en une entité beans : bean entité et bean session.
unique.
Le conteneur prend en charge tout ce qui concerne le La spécification Enterprise JavaBeans 2.0 introduit un
système. Cette séparation des tâches est le concept troisième bean : le bean message.
fondamental de cette technologie.
Un composant EJB est conçu comme un ensemble Il existe donc 3 types de beans :
réutilisable de logiques métiers et fonctionne avec tous
•les beans sessions,
les types de clients : servlets, JSP, application Java/RMI,...
•les beans entités,
•les beans messages.
22
Les beans sessions
Un bean session représente un processus. C’est une
Avec état extension du processus du client dans le serveur
Session d’applications Java EE.
Sans état
On distingue 2 types de beans sessions : les beans
Logique métier Composants
Composants sessions sans état (stateless session) et les beans sessions
CMP
EJB
EJB
Entité avec état (stateful session).
Conteneur EJB BMP
Message Un bean session ne peut avoir qu’un client à un moment
donné.
Pour un bean session sans état, plusieurs clients peuvent Un bean session avec état possède un état
être associés au même bean successivement. conversationnel, c’est à dire un état résultant des
interactions avec un même client.
Pour un bean session avec état, c’est le même client qui
réalise toutes les invocations.
L’état représenté par un bean session est privé et
Un bean session sans état représente un traitement conversationnel . Le bean est accessible par un client
fonctionnel. unique.
23
Les beans entités
Exemple de bean session avec état :
La persistance d’un bean entité peut être gérée par le ⇒ on parle de bean BMP (Bean Managed Persistence).
bean lui-même ou bien par le conteneur.
24
Les beans messages
Les beans sessions et entités sont des composants
• Dans le second cas (gérée par le conteneur) : la distribués invoqués par des clients de manière synchrone,
persistance est gérée par le conteneur et seules les c’est-à-dire par invocation de méthodes
fonctionnalités de recherches avancées doivent être Les beans messages sont des beans qui consomment des
codées dans le bean, les autres opérations de lecture et messages de manière asynchrone, par l’intermédiaire de
d’écriture sur le support de persistance sont effectués Java Messaging Service (JMS).
automatiquement par le conteneur. Exécution sur réception d’un message JMS
(Appel à d’autres beans par exemple).
⇒ on parle de bean CMP (Container Managed Persistence).
Interfaces des Enterprise JavaBeans Les objets distribués - base des EJB
Les composants EJB possèdent des interfaces exposant
leurs services disponibles aux clients. Les objets distribués sont forts utiles puisqu’ils
Les clients utilisent ces interfaces pour exécuter la permettent de distribuer une application sur un réseau.
logique encapsulée dans le bean.
Cependant, des exigences telles que les transactions et la
Il existent 2 sortes d’interfaces : les interfaces distantes et
les interfaces locales. sécurité deviennent indispensables dans des applications
d’entreprise.
Ces interfaces permettent de préciser quelles seront les
méthodes métiers des Beans qui seront accessibles
depuis l’intérieur ou l’extérieur d’un serveur
d’application.
25
Les Middlewares
Un objet distribué est un objet qui peut être appelé
depuis un système distant, notamment : Les objets distribués nécessitent une infrastructure
• depuis un client faisant partie du processus contenant technique permettant d’assurer la communication entre
l’objet (in-process), ces objets.
• depuis un client en dehors de ce processus (out-of-
process) Cette infrastructure doit fournir aux objets un accès aux
• depuis un client situé n’importe où sur le réseau. services transversaux comme les services de nommage,
de gestion des transactions, de gestion de persistance, de
Différentes technologies permettent d’utiliser des objets gestion de sécurité...
distribués telles que CORBA de OMG, DCOM de
Microsoft et Java RMI-IIOP de Sun
101 Ghada Feki 102 Ghada Feki
26
Du côté du serveur Web, les pages JSP et servlets
utilisent:
des beans entités qui correspondent aux objets métiers
comme les articles, clients, commandes, factures;
des beans sessions avec état représentant les paniers des
clients;
des beans sessions sans état qui peuvent implémenter des La persistance des données en Java (JPA)
traitements comme la navigation dans un catalogue ou la Java EE
demande d’un devis pour le contenu d’un panier.
Ghada Feki
27
De JDBC à JPA
Java avec stockage BDD et accès via JDBC Avec un framework ORM comme JPA
Au delà de l'accès à faire à distance Définition des correspondances classes / tables
Qui complexifie forcément les choses mais ne peut pas y Avec des classes Java classiques (POJO : Plain Old Java Object)
couper
Gére ensuite tout seul la cohérence objet / contenu base
Représentation des données très différentes
Coté BDD
JDBC
Structure en table avec langage de requête dédié Très simple d'exécuter des requêtes SQL
Récupère toujours une « sous-table » via le résultat de Mais ensuite le programmeur doit tout gérer à la main
l'exécution d'une requête de type SELECT JPA
Coté Java
Framework assez complexe mais très puissant
Structure des données définies par les classes que l'on
instancie Qui supprime une très grande partie du code nécessaire avec
JDBC
API de JPA offre des fonctionnalités pour les meilleures implémentations / conceptions selon le domaine
Récupérer des objets à partir de leur contenu en BDD Coté métier : structure métier et facilité de manipulation des données
Usage au besoin d'un langage de requête ressemblant à SQL mais se Coté BDD : optimiser la gestion des données et performance d'accès
basant sur la structure des classes On définira ensuite les mappings requis entre les classes et tables
Rendre des objets créés persistants Une classe Java est mappée vers une table dite primaire
Leur contenu est inséré dans la BDD
La plupart des attributs de la classe ont une correspondance avec les
Faire toute opération de création / modification / colonnes de la table
suppression sur des objets avec persistance en BDD Pourra utiliser d'autres tables dites secondaires pour la correspon- dance
Se fait en mode transactionnel d'autres attributs
JPA est une API qui nécessite un moteur l'implémentant Via des jointures réalisées automatiquement par JPA
Hibernate, EclipseLink … Une classe pourra fusionner le contenu de deux (ou plus) tables
Pourra gérer tout type de jointures entre tables /associations entre classes
28
Entité Annotations
Classe Java qui a vocation à avoir le contenu de ses Les mappings classes / tables sont définis par des
objets rendu persistant en BDD annotation Java dans les classes des entités
Ou dans des fichiers XML mais moins pratique
Classe standard : un POJO (Plain Old Java Object) Annotations Java : méta-données
Définit des attributs de tout type Données sur des données
Et éventuellement des méthodes métier S'appliquent sur des éléments du code
Précise qu'un élément joue un certain rôle, a certaines
Peu de contraintes à respecter (programmation classique) caractéristiques, informer de quelque chose …
Constructeurs dont un sans paramètre Une annotation peut contenir des paramètres (nommés s'il y en a
Getters et setters pour les attributs plusieurs)
Un attribut jouera un rôle d'identifiant Une annotation commence par @
Exemple : @Override pour préciser que c'est la rédéfinition d'une
Implémente java.io.Serializable méthode de la classe mère
Rédéfinir equals() et hashcode() pour gestion des collections Une annotation est définie par une classe Java dédiée
29
Manipulation d'entités persistantes
Configuration d'une unité de persistance <persistence-unit ...>
Fichier XML définissant la liste des classes correspondant à Définit le nom de l'unité de persistance et le type de transaction utilisée
des entités, la connexion au SGBD, divers paramètres … <provider>
Dans l'application Java Le moteur de persistance utilisé par JPA
Récupère un « entity manager » <class>
A partir de ce gestionnaire, on manipulera les entités Définit qu'une classe Java sera une entité dont les instances seront
persistantes en base de données
Récupération d'instances d'entités en base, rendre
persistant de nouvelles instances, modifier des entités … <properties>
Ensemble de propriétés de configuration
Les modifications se font via une transaction
Ici on retrouve les paramètres de connexion à la base via JDBC
Avec Jave EE, on peut utiliser d'autres fonctionnalités URL, driver, utilisateur et mot de passe
comme JTA pour les transactions ou JNDI pour les
annuaires
117 Ghada Feki 118 Ghada Feki
30
Requêtes statiques
Paramétrage
Définition @NamedQuery( name=“clientParNom”,
@NamedQuery(name=“clientParCodePostal”, query = “SELECT c FROM Client c
WHERE c.adresse.codePostal = :cp”) queryString=“SELECT c FROM Client c ” + “WHERE c.nom LIKE :nomClient”
@Entity public class Client { )
…
}
@PersistenceContext public EntityManager em; List clients =
Utilisation em.createNamedQuery(“clientParNom”)
public List rechercheClientParCodePostal(int cp) { return .setParameter(“nomClient”,“Marchand”)
em.createNamedQuery(“clientCodePostal”)
.setParameter(“cp”, cp) .getResultList();
.setMaxResults(20)
.get
}
31
Entity Manager persist()
C’est lui qui est chargé de gérer le cycle de vie des entités public Commande creerCommande(Client c) { Commande cmde =
Équivalent de Hibernate Session ou JDO PersistenceManager 4 new Commande(c);
opérations principales // Après l’appel à persist(), l’état de l’entité passe
• persist() // transient à managed.
• insère une entité dans la base // Au prochain commit, l’instance sera insérée dans la
• remove() // base de données entityManager.persist(cmde); return cmde;
• supprime une entité de la base }
• merge()
merge()
• synchronise l’état des entités détachées
la méthode merge() retourne une copie gérée (managed) de l’entité
• refresh()
(préalablement détachée)
• recharge l’état des entités à partir de la base les modifications sur l’état persistant sont appliquées à l’instance gérée
Références
Livres :
Designing Entreprise Applications (Auteur : Nicholas
Kassem and the Entreprise Team / Editeur : Sun
Microsystems )
Java Servlet Programming (Auteur : Jason Hunter et
William Crawford / Editeur : OREILLY / ISBN : 1-56592- Merci de votre attention
391-X)
Supports de cours :
Java EE (Servlets / JSP) (Auteur : Fabien Romeo)
Les Entreprise JavaBeans(EJB) (Auteur : Jean-Marc
Farinone)
Les Entreprise JavaBeans (Auteur : Claue Duallet)
32