Presentation : Tapestry



Tapestry est un framework libre facilitant la construction d'applications web Java basées sur J2EE.
Il s'agit d'un framework MVC proposant un modèle de programmation orienté composant.

Initialement créé par Howard Lewis Ship, le projet Tapestry a été intégré par la fondation Apache comme sous-projet Jakarta. Il est souvent utilisé pour faire de la Programmation Web évènementielle.
Tapestry utilise XML pour implémenter des applications Web en suivant le motif de conception MVC. Il dispose d'une architecture à base de composants avec des idées que l'on retrouve notamment dans WebObjects. Il met l'accent sur la simplicité d'utilisation. Par une forte connectivité entre les éléments de la page Web et le code sous-jacent, il évite au développeur d'écrire d'énormes blocs de code de liaison.

Voici les différentes fonctionnalités que l'on retrouve dans Tapestry :

  • Aiguillage des requêtes HTTP (ou dispatching)
  • Les patrons de pages (ou templates), essentiellement en XHTML.
  • Validation des saisies (formulaires)
  • Persistence des données (sessions)

Ce n’est pas un framework complet : il ne s’occupe pas de la partie gestion de données.

Ce framework se veut très simple d’utilisation. La plupart des classes écrites sont de simples classes Java ajoutées de quelques annotations Java 1.5. Il se base sur un grand nombre de principes simples, entre autre “convention plutôt que configuration”. Ainsi, les contrôleurs se trouvent dans un package Java très précis, ce qui permet de bénéficier de la recompilation à la volée des classes, et ainsi ne pas avoir à redéployer l’application entre chaque changement.

Il possède son propre système de vues (TML), qui est du XML classique. Ses vues sont donc une composition de balises XML et de texte libre, donc par exemple l’HTML. La partie contrôleur est gérée par des classes Java classiques POJO (Plain Old Java Object). Les contrôleurs dans Tapestry sont sans état (stateless), ainsi les variables d’objets sont réinitialisées à chaque connexion HTTP. En rajoutant une simple annotation (@Persist) on peut rendre une variable persistante entre plusieurs connexion HTTP.

Intallation de Tapestry :

Tapestry n'est un simple plugin d'Eclipse, mais une librairie qu'il faut configurer. Il suffit pour cela de mettre les .jar dans le dossier WEB-INF/lib

Fonctionnalité de Tapestry :

Voici une liste des différentes annotations et de leurs fonctionnalitées :

  • @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)



Pour la couche de présentation, le code Java est totalement séparé du code HTML. Il se trouve dans une classe Java ayant le même nom que le fichier « .tml » contenant le code HTML de la page.

Les fichiers du type NomFichier.java correspondront donc au code métier de la page tandis que les fichiers du type NomFichier.tml correspondront à la vue de la page. Ces deux fichiers seront toujours liés.

Voici un exemple : On souhaite qu'un utilisateur connecté grâce à un login puisse écrire un message et le valider. Le login est défini comme suit :



Le champ login est déclaré. Associons lui maintenant un champ texte ainsi qu'un bouton valider (On utilisera ici l'Annotation @onEvent ainsi que l'id du composant dans le fichier java) :



La propriété t:validate="required" rend la saisie du login et du mot de passe obligatoire. L'application renvoie une erreur sur la page si ce n'est pas le cas (ceci est fait automatiquement!).



Il propose en plus des méthodes pour injecter du code javascript à partir de vos classes Java. Pour améliorer la productivité, Tapestry utilise un « classLoader » spécifique, ce qui permet de recharger les pages et composants à chaud sans devoir recompiler. En cas d’erreur, le framework fournit un message d’erreur pertinent et très complet avec la localisation de l’erreur dans le template, les paramètres de la requête, les headers ainsi que les variables d’environnement.
Au final, le développement d’une application Tapestry se fait essentiellement avec des classes Java métier et les contrôleurs, le fonctionnement du contexte web (servlet, requêtes HTTP, session, cookie) étant occulté. Le projet dispose d’un répertoire maven, ce qui permet de suivre facilement les évolutions successives et d’adapter son propre code si besoin.

Avantages et inconvénients de Tapestry (version 5):

Avantages

  • Rapidité de développement, configuration minimale et URLs claires.
  • Prise en charge de manière transparente de nombreuses problématiques permettant au développeur de se concentrer sur la partie métier.
  • Séparation complète de la présentation HTML du code Java (possibilité de mettre à part les intégrateurs HTML et les développeurs).
  • Souplesse d’utilisation grâce à la possibilité de développer ses propres composants.
  • Facilité d’intégration avec Hibernate et Spring.

Inconvénients

  • Absence de mapping relationnel spécifique : il faut utiliser JDBC ou Hibernate.
  • Masquage de nombreux mécanismes web : Tapestry n’est donc pas pédagogique pour apprendre le développement web.
  • Manque de maturité (sortie en Décembre 2008). En effet, certains composants ne sont pas très complets. La communauté étant limitée pour le moment, les documentations et tutoriaux ne sont pas nombreux quoique suffisants.
  • Pas de rétro-compatibilité avec la version 4.

Comparaison avec d'autres frameworks :

Il faut ajouter que ce framework s’intègre facilement avec Spring et Hibernate offrant ainsi un environnement complet et performant.

Conclusion

Tapestry est un framework J2EE moderne qui marie élégamment simplicité et productivité. Il s’inscrit dans l’évolution des frameworks J2EE vers la rapidité de développement et les conventions de nommage. La version 5 de Tapestry offre une véritable avancée avec entre autre l’utilisation des annotations Java remplaçant les fichiers de configuration XML et le chargement à chaud des composants. De plus, il se distingue de ses concurrents par l’absence de fichier de configuration ainsi que par sa légèreté. En effet, Tapestry 5 est plus évolué et s’avère être sensiblement plus simple à l’usage que le standard J2EE dans ses versions 1.x.

Cas d'Etude

Vous pouvez récupérer l'Application (.war) que nous avons réalisés pour le cas d'étude.

Bibliographie :



© Bigozzi Christopher & Mcharek Raouda & Sadroudine Samir - JEE AP - EISTI 2009