tapestry / hibernate
DESCRIPTION
Tapestry / Hibernate. JEE Approfondi. LIMA LOPES Fabrice – MARTINS Sylvie – SOW Demba. PLAN. Tapestry Concept Architecture Stratégie Gestion des évènements Composants avancés L’internationalisation. Plan (suite). II. Hibernate Concept Architecture Cycle de vie - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/1.jpg)
Tapestry / HibernateJEE Approfondi
LIMA LOPES Fabrice – MARTINS Sylvie – SOW Demba
![Page 2: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/2.jpg)
I. Tapestrya. Conceptb. Architecturec. Stratégied. Gestion des évènementse. Composants avancésf. L’internationalisation
PLAN
![Page 3: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/3.jpg)
II. Hibernatea. Conceptb. Architecturec. Cycle de vied. Stratégiee. HQL et Criteria
Plan (suite)
![Page 4: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/4.jpg)
![Page 5: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/5.jpg)
Programmation WEB évènementielle
Notion de composant
Semblable aux applications bureautiques
Prise en charge de manière transparente de nombreuses problématiques le développeur de se concentrer sur la partie métier
Concept
![Page 6: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/6.jpg)
Pas de servlet ! Toujours deux représentations :
Logique (.java) : code métier de la page Graphique (.tml ou .html) : vue de la page
Exemple :
Architecture
• index.java • index.tml ou index.html
![Page 7: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/7.jpg)
Une page .tml (ou .html) est composée de composants
A chaque composant est associé un évènement (eventhandler)
Toute action sur un des composants déclenche la logique associée
Injection de dépendance pour les messages de validation et l’internationalisation
Stratégie
![Page 8: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/8.jpg)
N’importe quelle méthode peut servir de eventhandler
Annotation @onEvent + id du composant
Gestion des évènements
<t:form t:id="loginForm"><t:textfield t:value="message"/><input type="submit" value="Submit"/>
</t:form>
@OnEvent(value="submit", component="loginForm") void onFormSubmit() {
System.out.println("Handling form submission!");}
• index.tml
• index.java
![Page 9: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/9.jpg)
Quand pas de jdk5 :◦ Règle de nommage
1. Ecrire le type d’évènement (ex : onSubmit)2. Ajouter la provenance de l’évènement: From3. Mettre l’id du composant : (ex : LoginForm)
void onSubmitFromLoginForm(){}
Gestion des évènements
![Page 10: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/10.jpg)
Beanediform : création d’un formulaire via pojo ◦ <t:loop> : List en paramètre qui a le même
principe que le for each de la jstl◦ <t:if> " "◦ Devine le type de champs qu'il doit utiliser◦ Customisable :
exclude : éliminer des colonnes add : ajouter des colonnes reorder : imposer un ordre
◦ Forcer le rendu
Composants avancés
<t:parameter><!-- Fournir ici l'implementation -- >
<t:paramerter>
![Page 11: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/11.jpg)
Beaneditform : exemple<t:beaneditform object="contact" submitLabel =
"Ajouter" reorder="nom,prenom,mobile,mail,commentaire">
<t:parameter name="commentaire"><t:label for="commentaire"/><t:textarea t:id="commentaire" t:value="contact.commentaire"
cols="30" rows="5"/>
</t:parameter></t:beaneditform>
![Page 12: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/12.jpg)
Pareil mais objet de type collection au lieu du pojo
Presque les mêmes propriétés
Pagination automatique : rowsperpage !
Le Gridatasource
![Page 13: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/13.jpg)
<t:grid t:source="allContact" exclude="id,commentaire" row="contact" rowsPerPage="8" reorder="nom,prenom,mobile,mail" add="delete" pagerPosition="bottom"
> <t:parameter name="nomCell"> <t:pagelink t:page="DetailsPage"
t:context="contact.id">${contact.nom}</t:pagelink></t:parameter>
</t:grid>
Le Gridatasource : exemple
![Page 14: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/14.jpg)
Validation t:validate=required
◦ Si pas renseigné Erreur◦ Spécification dans le fichier app.Property
![Page 15: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/15.jpg)
@ApplicationState : met en session
@Persist : garde objet pour la prochaine page(POST)
@Inject : injection des dépendances
@Component : référence sur un objet composant
onActivate & onPassivate : garde objet pour la prochaine page(GET)
Utilisation d’annotations
![Page 16: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/16.jpg)
Prise en main rapide
Concept simple
Environnement familier
Génération automatique des tâches redondantes
Faible communauté peu de ressources
Conclusion Tapestry
![Page 17: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/17.jpg)
![Page 18: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/18.jpg)
Concept Transformation :
modèle relationnel modèle objet
Création couche abstraction (appelé couche de persistance) : couche entre application et la base de données
Séparation des tâches
![Page 19: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/19.jpg)
Architecture
Database
Hibernate
Application
Persistence Object
Hibernate.properties XML Mapping
![Page 20: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/20.jpg)
Cycle de vie
![Page 21: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/21.jpg)
ORM (Object Relational Mapping)
Stratégie
Domaine Objet Domaine RelationnelContact contact.hbm.xml Table Contact
![Page 22: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/22.jpg)
Langage de requêtage d’Hibernate
Ressemble fortement au SQL
Requête sur champ d’une table de la BDD
Totalement orienté objet Héritage Polymorphisme Association
HQL
![Page 23: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/23.jpg)
Semblable à HQL
Requête sur objet
Mais, écriture beaucoup plus orientée objet
Criteria
![Page 24: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/24.jpg)
Comparaison Exemple HQLQuery query = sessionCreateQuery("from
contact when contact.id=:id");Query.setInteger("id", id)
Exemple CriteriaCriteria crit = session.createCriteria
( Contact.class);Crit.add(Expression.ilike("contactLogin",id));
![Page 25: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/25.jpg)
Contrôle : Hibernate permet l’interdiction de modifier ou
insérer une propriété. <property name=« id» column=« contact_id»
◦ Insert = false◦ Update=false◦ >
Association : Hibernate prend en charge les associations entre table sous forme de tag ◦ <one to many name=« ..» class=« » key=« »/>◦ <many to many « ….. »>
Mapping
![Page 26: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/26.jpg)
Component Une instance d’un table devient un objetCet objet peut aussi être une composition
d’objet.
<property name=« client_nom» column=« Client_nom»<component name=« adresse»<property ……
Mapping (suite)
![Page 27: Tapestry / Hibernate](https://reader035.vdocuments.net/reader035/viewer/2022081505/56816575550346895dd80b6e/html5/thumbnails/27.jpg)
Très puissant
Facile à prendre en main
Grande communauté de développeurs
Mises à jours récurrentes
Conclusion hibernate