270 likes | 439 Views
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
E N D
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 • Stratégie • HQL et Criteria
Concept • 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
Architecture • Pas de servlet ! • Toujours deux représentations : • Logique (.java) : code métier de la page • Graphique (.tml ou .html) : vue de la page • Exemple :
Stratégie • 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
Gestion des évènements • N’importe quelle méthode peut servir de eventhandler • Annotation @onEvent + id du composant • index.tml • <t:formt:id="loginForm"> • <t:textfield t:value="message"/> • <input type="submit" value="Submit"/> • </t:form> • @OnEvent(value="submit", component="loginForm") • voidonFormSubmit() { • System.out.println("Handling formsubmission!"); • } • index.java
Gestion des évènements • Quand pas de jdk5 : • Règle de nommage • Ecrire le type d’évènement (ex : onSubmit) • Ajouter la provenance de l’évènement: From • Mettre l’id du composant : (ex : LoginForm) voidonSubmitFromLoginForm(){}
Composants avancés • Beanediform : création d’un formulaire via pojo • <t:loop> : List en paramètre qui a le même principe que le for eachde 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 <t:parameter> <!-- Fournir ici l'implementation -- > <t:paramerter>
Beaneditform : exemple <t:beaneditformobject="contact" submitLabel = "Ajouter" reorder="nom,prenom,mobile,mail,commentaire"> <t:parametername="commentaire"> <t:label for="commentaire"/> <t:textarea t:id="commentaire" t:value="contact.commentaire" cols="30" rows="5" /> </t:parameter> </t:beaneditform>
Le Gridatasource • Pareil mais objet de type collection au lieu du pojo • Presque les mêmes propriétés • Pagination automatique : rowsperpage !
Le Gridatasource : exemple <t:grid t:source="allContact" exclude="id,commentaire" row="contact" rowsPerPage="8" reorder="nom,prenom,mobile,mail" add="delete" pagerPosition="bottom" > <t:parametername="nomCell"> <t:pagelink t:page="DetailsPage" t:context="contact.id">${contact.nom} </t:pagelink> </t:parameter> </t:grid>
Validation • t:validate=required • Si pas renseigné Erreur • Spécification dans le fichier app.Property
Utilisation d’annotations • @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)
Conclusion Tapestry • Prise en main rapide • Concept simple • Environnement familier • Génération automatique des tâches redondantes • Faible communauté peu de ressources
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
Architecture Application Persistence Object Hibernate Hibernate.properties XML Mapping Database
Stratégie • ORM (Object RelationalMapping) Contact contact.hbm.xml Table Contact
HQL • 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
Criteria • Semblable à HQL • Requête sur objet • Mais, écriture beaucoup plus orientée objet
Comparaison Exemple HQL Queryquery = sessionCreateQuery("from contact when contact.id=:id"); Query.setInteger("id", id) Exemple Criteria Criteriacrit = session.createCriteria ( Contact.class); Crit.add(Expression.ilike("contactLogin",id));
Mapping • Contrôle : • Hibernate permet l’interdiction de modifier ou insérer une propriété. • <propertyname=« id» column=« contact_id» • Insert = false • Update=false • > • Association : Hibernate prend en charge les associations entre table sous forme de tag • <one to manyname=« ..» class=« » key=« »/> • <manyto many « ….. »>
Mapping (suite) • Component • Une instance d’un table devient un objet Cet objet peut aussi être une composition d’objet. <propertyname=« client_nom» column=« Client_nom» <component name=« adresse» <property ……
Conclusion hibernate • Très puissant • Facile à prendre en main • Grande communauté de développeurs • Mises à jours récurrentes