1. Ministère de l’Enseignement
Supérieur
*** * ***
Université du 7 novembre à
Carthage
*** * ***
Institut National des Sciences
Appliquées et de Technologie Institut National des
Sciences Appliquées et de
Technologie
Hibernate 3
1
3. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• Premier service complet de persistance
• Gestion de la persistance par conteneur (CMP) ou
par le bean (BMP)
• Techniquement, ça ne permet pas de gérer les
relations entre entités ainsi que les lourdeurs des
spécifications d’EJB
• Succès EJB2.0 ( interfaces locale, gestion de
relations)
3
4. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• Fin 1990, ORM propriétaire de WebGain
puis Oracle
• Puissance relationnelle
• Flexibilité
• Plus d’efficacités que les beans entités
• Une complexité de mise en œuvre
4
5. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• 1999, une norme de persistance
transparente, libre et unique
• Mapping d’objet relationnel
• Abstraction de stockage de données
• Logique d’interrogation, JDOQL, peu efficace et
très complexe
• Echec de la première version (spécifications
incomplètes)
5
6. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Les données importent plus que le code
JDBC, ça craint!
-Visant le développement du
système
-Manque de fonctionnalités
Persistance
Persistance
non
Lourdeur d’usage transparente
transparente
Objets ≠ relations (la guerre!)
6
8. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
“An object is sent to
hibernation to a
RDBMS, when it
comes back ( if it
does ) it wakes up
from his hibernation.”
“If an object is sent to
a DB it may wait for a
Hibernate week, a month, a
year, before it gets
fetched again hence it
was sent to
hibernation.”
8
9. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Outil mapping objet/relationnel en Java
Définition & Historique
(ORM)
Novembre 2001, Gavin King
Octobre 2003, rejoint JBOSS (Red Hat)
Standardisé par spécifications JPA/EJB3
Entity
Décembre 2005, Hibernate 3.1
Aout 2011, implémentation du standard de
persistance EJB 3 9
10. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Objet
temporaire Objets persistants
implémentés sous la
forme de POJO
Architecture
Objet mono-threadé, à
durée de vie
Obtention des
courte, représentant
instances session
une conversation entre
(EntityManagerFactor
l'application et l'entrepôt
y: JPA): mono-
de persistance
threadé
10
11. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
A la différence de hibernate.properties qui ne
contient que des paramètres de configuration, le fichier
hibernate.cfg.xml peut également spécifier
l’emplacement des documents de mapping.
• Propriétés relatifs à la Base de Données (url, driver, username,
password...)
• Les différents déclarations : cache, pool, dialect,...
• L’emplacement des fichiers de mapping (beans, cas des
annotations)
11
13. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Remplacement des fichiers XML par des
annotations JDK 5.0 implémentant les annotations du
standard JPA et les annotations spécifiques à
Hibernate
@Entity: déclarer une classe comme étant persistante
Annotation
@Id: Indiquer l’identifiant
@GeneratedValue(strategy = GenerationType.AUTO) : définir la
stratégie de génération de l’identifiant
Annotations concernant les collections
@Where : (appliquée à l'entité cible)
La stratégie de suppression en cascade avec
@OnDelete(action=OnDeleteAction.CASCADE)
13
14. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
@Cacheable: Entité sera tenu en compte pour le
cacheing
@Cache(usage=CacheConcurrencyStrategy.READ_
ONLY) : Définir la stratégie du cache
Annotation
@Embeddable: (pour la classe)
Ne pas considérer l’entité comme étant une table à
créer (jointure de colomne)
@Embedded: (au niveau de l’attribut)
@Transient: Enlever l’aspect persistant d’un attribut
14
15. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Cycle de vie d’objet
15
16. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Trop de temps passé par
le développeur pour interagir avec la base de
données!
A votre avis, quel est le % de temps pour
écrire du code afin de gérer l’accès à une BD?
Moins de 20%
Environ 50%
Environ 70%
Presque 90%
Rang estimé entre 30-70%
Donc 30 à 70% du temps de développement
16
17. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Génération du code SQL
Utilisation du langage de requêtes :
Avantages
HQL
Persistance transparente
Récupération de données optimisée
Portabilité du code, changement de
base de données
17
18. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Inconvénients
« NO tool can solve ALL
problems », Gavin King
Hibernate est une technologie jeune
Nécessité d’apprendre à l’utiliser
18
19. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• Les API Criteria
• La gestion du flush manuel
• Mécanismes d’attachement et détachements
d’objets
• Filtrage dynamique des résultats
• Gestion du cache de second niveau
• Cascade « delete-orphan »
Version 3.2.x d’Hibernate : implémentation du standard de
persistance EJB 3.0 et Java Persistence API (JPA)
JPA est une spécification/standard à respecter , Hibernate est
un Framework
19
21. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Différer au maximum le chargement des objets
impliqués dans une relation d’associations, ou d’une
collection.
Fetching
• Défini par défaut, Hibernate 3.
• Son contraire, Eager Loading
Un moyen de trouver des objets d'une
certaine classe et un certain nombre d'associations
avec une réduction de requêtes. 21
22. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Cacheing
N.B. : Les caches ne sont jamais avertis des modifications faites
dans la base de données.
22
23. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• Read-only : Si l’application a besoin de lire mais ne modifie
jamais les instances d'une classe
• Read-write : Si l'application a besoin de mettre à jour des
données
• Nonstrict-read-write : Isolation transactionnelle stricte n'est
Cacheing
pas nécessaire
• Transactionnal : ne peut être utilisé que dans un
environnement JTA
23
25. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Hibernate3 ajoute la capacité de prédéfinir des
critères de filtre et d'attacher ces filtres à une classe
ou à une collection.
Afin d'utiliser des filtres, ils doivent d'abord être
définis:
<filter-def name=" effectiveDate ">
<filter-param name=" asOfDate " type="date"/>
</filter-def>
Filtres
<class name=" Employeeêtre attaché à une classe :
Puis, ce filtre peut " ...> ...
<property name="effectiveStartDate" type="date"
column="eff_start_dt"/>
<property name="effectiveEndDate" type="date"
column="eff_end_dt"/>
<filter name=" effectiveDate " condition=": asOfDate BETWEEN
eff_start_dt and eff_end_dt
"/>
25
</class>
26. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• Pas besoin de spécifier le filtre dans
requêtes
• Le filtre peut être défini et nommé dans le
fichier de mapping
Filtres
• Filtre doit être activée au niveau de la
session par:
session.enableFilter(filtername)
26
27. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Il s'agit d'une couche dédiée à la sécurité
composée de classes Java chargées de vérifier
l'authentification et les autorisations d'accès aux
méthodes.
Sécurité
Ces classes seront automatiquement sollicitées lors
de l'appel à une méthode protégée
• Laisser passer la requête ou non en fonction
des informations de sécurité qui leur sont
fournies et de celles dont elles ont besoin.
27
28. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
• Gérée dans la couche de session.
• Hibernate3 permet à certaines actions d'être
approuvées via JACC(rôles et permissions), et
autorisées via JAAS(authentification).
Sécurité
Cette fonctionnalité optionnelle est construite au
dessus de l'architecture d'événements.
JAAS (Java Authentication and Authorization Services).
JACC (Java Authorization Contract for Containers) spécification qui permet de
gérer les décisions de sécurité.
28
29. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
raccourci pour <event
type="..."><listener
class="..."/></event>
D'abord, on doit configurer les listeners d'événements appropriés pour
permettre l'utilisation d'autorisations JAAS.on a un istener pour un type
Si
d'événement particulier.
<listener type="pre-delete"
class="org.hibernate.secure.JACCPreDeleteEventListener"/>
<listener type="pre-update"
class="org.hibernate.secure.JACCPreUpdateEventListener"/>
<listener type="pre-insert"
class="org.hibernate.secure.JACCPreInsertEventListener"/> <listener
Sécurité
type="pre-load"
class="org.hibernate.secure.JACCPreLoadEventListener"/>
Ensuite, toujours dans hibernate.cfg.xml, lier les permissions aux rôles :
<grant role="admin" entity-name="User" actions="insert,update,read"/>
<grant role="su" entity-name="User" actions="*"/>
Les noms de rôle sont les rôles compris par votre fournisseur JAAC.
29
30. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Mapping XML/relationnel
Nouvelles approches de mapping proposées par Hibernate
3 consistant à utiliser des classes dynamiques et des documents
XML ou à spécifier manuellement des ordres SQL.
30
31. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Mapping XML/relationnel
• Approche par document : requêtes pas
exploitables, peu performante!
• Approche par élément :
Principe général
• Elément complexe Table
• Elément simple ou attribut Colonne
31
33. Etat de l’art C’est quoi? Pourquoi? Nouveautés? Fonctions? Conclusion
Optimisation du temps de
développement
Applications facilement migrables
(hibernate.cfg.xml)
Adoption à grande échelle
Technologie prometteuse(Nhibernate)
33