Hibernate: Framework DAO (database access object), interface avec la BD, permet une indépendance vis à vis du type de BD.
Spring: Framework Service, interface avec DAO, permet une indépendance vis à vis de l’implémentation du DAO.
JSF: Framework MVC: Validation de formulaire, routing des pages
Les servlets ne sont pas thread safe.
Communication entre servlet:
La session est le cache de premier niveau de Hibernate car tout objet est mis en mémoire dans la session.
Un objet dans l’état Transient n’a pas de représentation dans la BD.
Un object dans l’état Detached a une représentation dans la BD mais les modifs ne sont pas propagées.
session.save(obj): retourne l’id de l’objet sauvegardé
session.persist(obj): retourne void
session.update(obj): erreur si l’objet n’est plus dans la BD.
session.saveOrUpdate(obj): lorsqu’on ne sait pas si l’objet est toujours dans la BD.
session.merge: ne met à jour que les champs de l’objet qui ont changés (peut être coûteux car il faut charger en mémoire l’objet de la BD pour faire les comparaisons)
session.get(Class, id): cherche dans la session puis la BD et renvoie null si non trouvé
session.load(Class, id): cherche dans la sessions, renvoie un proxy qui ne contient que l’id s’il n’est pas dans la session (Exception si un attribut est accédé).
Dans hibernate.cfg.xml: plusieurs noeuds
Possibilité de modifier le fichier hibernate.cfg.xml de manière programmatique.
Attribut xml lazy=”true”: les associations des entités ne sont récupérées que lorsqu’elles sont accédées. L’attribut xml lazy est aussi applicable aux attributs d’une classe qui ne sont pas des associations.
Types d’héritage en BD:
Méthodes pour forcer le lazy-loading:
FLushMode.NEVER: utile dans le cas de conversations longues (formulaire sur plusieurs pages)
Représenter des clés composées avec Hibernate:
Automatic versioning: lorsqu’on veut modifier une version périmée -> Exception et mise à jour vers la dernière version.
Implémentations possibles du versioning:
Pour une association: optimistic-lock=”false” permet de ne pas créer de nouvelle version lorsqu’un attribut de l’association est modifié.
Cache de 2ème niveau: n’y mettre que les objets qui ont un ratio de read beaucoup plus élevé que d’écriture.
Avantage Spring: rendre l’application maintenable et évolutive.
Spring = conteneur léger car Spring ne nécessite pas de serveur d’application (Tomcat) pour fonctionner, une JVM suffit.
Il est possible de modifier programmatiquement le fichier applicationContext.xml
ProceedingJoinPoint (argument pour les méthodes type around): objet représentatnt la méthode qui aurait du être exécutée (référence sur le contexte avant le joinpoint).
Avantages de coupler Spring à Hibernate:
Inconvénients:
Faclet <-> MBean <-> Servlet <-> Services
Utilités d’une page JSF:
Dans JSF la FacesServlet joue le rôle de controller en vérifiant la navigabilité définie dans faces-config.xml