Tapestry 5 pour optimiser ses développements J2EE

#framework#java#tapestry

Tapestry est un framework libre destiné au développement des applications web J2EE. La version finale de Tapestry 5 est depuis décembre 2008 disponible en téléchargement.

Avant de devenir un projet Apache, Tapestry fut intégré comme sous projet Jakarta. Le projet initié par Howard Lewis Ship s’appuie sur une architecture MVC (Modèle, Vue, Contrôleur), des fichiers XML et un ensemble de composants pour la couche de présentation. Tapestry a pour objectif une grande simplicité d’utilisation afin de procurer une productivité optimale pour le développeur.

Tapestry 5 fait le lien entre les pages web et le code associé grâce à des conventions de nommage, rendant inutile tout code de liaison. Il gère de plus l’aiguillage des requêtes HTTP, la validation des formulaires et les données en session à l’aide d’annotations dans le code Java. Les composants Tapestry étant de simples classes Java, il est donc possible de développer ses propres composants. Il faut ajouter que ce framework s’intègre facilement avec Spring et Hibernate offrant ainsi un environnement complet et performant. 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. Par exemple, pour une page de d’authentification, il faut créer deux fichiers « login.tml » et « login.java ».

Login.tml :

Login.java :

La méthode onActivate est exécutée dès que la page est appelée. Elle est en général utilisée pour initialiser les objets Java. Ici, la variable login est initialisée, et sera affichée dans la page grâce au terme t:value= »login » du fichier « .tml ». L’annotation @ApplicationState indique à Tapestry que login est une variable de session. L’annotation @Property indique à Tapestry qu’il doit ajouter les « Getter » et « Setter » pour les variables concernées. En effet, par convention pour le terme t:value= »login », Tapestry utilise les méthodes getLogin() et setLogin() pour l’affichage et la mise à jour de la variable Java login. Dans le « .tml », les termes t:validate= »required » indiquent à Tapestry la méthode de validation qu’il doit utiliser pour valider les champs du formulaire. Ici, il s’agit de vérifier que les champs ne sont pas vides. Tapestry utilise des méthodes « Event-Handler » pour une gestion événementielle des actions de l’utilisateur sur l’interface. Dans l’exemple, l’annotation @OnEvent(component= »submitForm », value= »success ») indique que la méthode onSuccess() doit être appelée lors du clic sur le bouton de « submit » suivi du succès de la validation du formulaire. La méthode renvoie ici le nom de la nouvelle page à afficher.

Tapestry inclut par défaut les librairies AJAX Prototype et Scriptaculous. 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.

Points forts, points faibles

Avantages

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

Inconvénients

1. Absence de mapping relationnel spécifique : il faut utiliser JDBC ou Hibernate.
2. Masquage de nombreux mécanismes web : Tapestry n’est donc pas pédagogique pour apprendre le développement web.
3. 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.
4. Pas de rétro-compatibilité avec la version 4.

Conclusion

Tapestry est un framework J2EE moderne qui marie élégamment simplicité et productivité. Tout comme Struts2 et Spring 2.5, il s’inscrit dans l’évolution des frameworks J2EE vers la rapidité de développement et les conventions de nommage, en reprenant les principes introduits par Ruby On Rail. 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 et notamment de JSF 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. Tapestry 5 disposant de nombreux atouts pour une diffusion large, ceci peut constituer un plus en terme de pérennité. Toutefois, cette dernière version est très récente et la version 2 de JSF promise pour cet été pourrait changer la donne, d’autant plus qu’il s’agit du standard de la plateforme J2EE.

Jean-Baptiste Maillard