View
63
Download
0
Category
Tags:
Preview:
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 Presentation
Citation preview
Tapestry / HibernateJEE Approfondi
LIMA LOPES Fabrice – MARTINS Sylvie – SOW Demba
I. Tapestrya. Conceptb. Architecturec. Stratégied. Gestion des évènementse. Composants avancésf. L’internationalisation
PLAN
II. Hibernatea. Conceptb. Architecturec. Cycle de vied. Stratégiee. HQL et Criteria
Plan (suite)
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
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
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
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
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
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>
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>
Pareil mais objet de type collection au lieu du pojo
Presque les mêmes propriétés
Pagination automatique : rowsperpage !
Le Gridatasource
<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
Validation t:validate=required
◦ Si pas renseigné Erreur◦ Spécification dans le fichier app.Property
@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
Prise en main rapide
Concept simple
Environnement familier
Génération automatique des tâches redondantes
Faible communauté peu de ressources
Conclusion Tapestry
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
Database
Hibernate
Application
Persistence Object
Hibernate.properties XML Mapping
Cycle de vie
ORM (Object Relational Mapping)
Stratégie
Domaine Objet Domaine RelationnelContact contact.hbm.xml Table Contact
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
Semblable à HQL
Requête sur objet
Mais, écriture beaucoup plus orientée objet
Criteria
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));
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
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)
Très puissant
Facile à prendre en main
Grande communauté de développeurs
Mises à jours récurrentes
Conclusion hibernate
Recommended