Tapestry / Hibernate

Post on 24-Feb-2016

58 views 0 download

Tags:

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

transcript

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