Tapestry

Tapestry Wouah! 5

Le titre est un peu aguicheur mais les faits sont là.

Je viens à l'instant de dérouler le tutorial Tapestry 5 et j'en suis resté bouche bée. Le projet est encore en plein développement mais est déjà extrêment prometteur. Tapestry dans sa version 4 était déjà un trés bon cru - le retour à Struts étant plutôt douloureux -, mais la version 5 promet réellement d'être exceptionnelle:

  • Les composants sont de simples POJO, le tout fonctionnant grâce au respect des conventions de nommages.
  • Les composants n'ont plus besoin d'être abstraits. Il s'agissait en effet d'un point assez déroutant pour quiconque découvrait Tapestry 4.
  • Suppression de la signalétique XML qui est avantageusement remplacée par un mécanisme d'annotations.
  • Rechargement à chaud des templates et des classes de composants.
  • Blazing fast comme mentionné sur le site de Tapestry qu'on peut traduire grosso modo par rapide comme l'éclair.

Et après test je peux malheuresement vous dire que tout cela est VRAI!

Le déploiement à chaud fonctionne à merveille et cela même en modifiant la signature des méthodes ou en ajoutant carrément d'autres composants à la volée.

Question rapidité j'ai été aussi réellement impressionné. Tapestry 4 avait l'habitude de traîner des pieds lors du 1er chargement de l'application Web - la faute à Hivemind paraît-il -; La comparaison avec Tapestry 5 est flagrante. Voilà par exemple les traces de Jetty que j'obtiens lors que je lance l'application servant de base au tutorial en passant par le plugin Eclipse:

launching Jetty webapp: /hilo on address: 0.0.0.0:8080 using dir: [/home/alain/Documents/Development/Java/hilo/src/main/webapp] 
22:49:04.704 INFO   [main] org.mortbay.log.LogImpl.add(LogImpl.java:109) >16> added org.mortbay.log.OutputStreamLogSink@758fc9
22:49:04.678 INFO   [main] org.mortbay.log.LogImpl.reset(LogImpl.java:228) >11> reset
22:49:04.714 INFO   [main] org.mortbay.log.LogImpl.add(LogImpl.java:109) >11> added org.mortbay.log.OutputStreamLogSink@1113708
22:49:06.709 INFO   [main] org.apache.tapestry.TapestryFilter.init(TapestryFilter.java:91) >10> Startup time: 563 ms to build IoC Registry, 1,465 ms overall.
22:49:39.325 INFO   [SocketListener0-1] org.example.hilo.services.AppModule$1.service(AppModule.java:62) >31> Request time: 932 ms
22:49:43.326 INFO   [SocketListener0-1] org.example.hilo.services.AppModule$1.service(AppModule.java:62) >31> Request time: 547 ms
22:49:43.364 INFO   [SocketListener0-1] org.example.hilo.services.AppModule$1.service(AppModule.java:62) >31> Request time: 34 ms
22:49:45.293 INFO   [SocketListener0-1] org.example.hilo.services.AppModule$1.service(AppModule.java:62) >31> Request time: 3 ms
22:49:45.417 INFO   [SocketListener0-1] org.example.hilo.services.AppModule$1.service(AppModule.java:62) >31> Request time: 22 ms

Pour résumer

  • démarrage de Jetty via le plugin Eclipse + initialisation de la WebApp hilo : ~ 2 secondes
  • appel de la 1er page : < 1 seconde
  • appel de la 2e page : ~ 500 millisecondes
  • on passe ensuite sous la barre des 50 millisecondes et tout cela dans un environnement de développement avec le rechargement des composants à chaud.

Je m'enflamme peut être un peu mais pour l'instant je suis bluffé. On a vraiment l'impression que tout a été fait pour permettre au développeur d'être efficace et de gagner en productivité. Le simple fait de penser à mon environnement de développement au boulot me déprime - en bref Liferay + Appfuse avec ~ 1 minute pour démarrer Tomcat auquel il faudra rajouter bien 2 minutes de compilation -.

Résolution du mois prochain : prendre Tapestry 5 en main et voir s'il en a vraiment dans le ventre

Découvrez Tapestry

Vous souhaitez appliquer les méthodologies de vos développements graphique standard au monde du développement Web? Cet article est fait pour vous.

Taskmanager

Voici la page de l'application TaskManager. Il s'agit simplement d'une application que j'ai crée dans le but de découvrir certains aspects du développement Web comme le framework Tapestry.

L'application peut être construite via Maven2. Elle va usage important des annotations Java5 ainsi que des generics. Au menu du Spring, de l'Hibernate, un peu d'AOP, etc...

Les sources peuvent être téléchargé via le lien suivant : http://anothergeekwebsite.com/files/task(..)