| « ActiveRecord et EJB 2, même combat | Eclipse RCP vs Swing » |
La star GWT
J’en profite pour souhaiter à tous les lecteurs de mon blog une excellente année 2007, pleine de joie et de bonheur. Désolé de ne pouvoir blogguer plus régulièrement mais le travail a tendance en ce moment à prendre le pas dans mon planning sur toute autre activité technologique d’ordre extra-professionnelle.
Malgré tout, je voulais en profiter pour évoquer rapidement un sujet qui a passionné les galeries pendant toute l’année 2006 et qui fait encore parler en ce début d’année 2007 : le Web 2.0 avec plus particulièrement AJAX.
Depuis quelques mois, je me suis penché assidûment (avec d’autres collègues de Valtech d’ailleurs) sur la plupart des Toolkit du marché. J’en profite donc pour faire un bref retour d’expérience. N’hésitez pas à y apporter votre grain de sel.
Le Toolkit AJAX qui m’a le plus séduit est GWT (Google Web Toolkit). Je n’ai jamais été un gourou de Javascript et l’avènement d’AJAX a élevé le niveau requis pour produire ne serait-ce qu’un contrôle simple de type Suggest ou UpdatePanel.
Or, avec GWT, toute la problématique Javascript est reléguée au second plan. Le modèle de développement GWT s’appuie sur la notion de post compilation serveur. En pratique, un générateur de code se charge de parser une sorte d’arbre de contrôles Java pour en faire un arbre DOM dynamique en Html et Javascript. Avec ce modèle, le développeur garde toutes ses habitudes Java sans ce soucier des problématiques de CSS et de DOM. Les fichiers JavaScript sont générés à la volée et optimisés par rapport aux besoins de l’utilisateur.
Dans ce contexte, tout devient plus simple, les pauvres événements clients javascript deviennent de réels listeners typés côté serveur. Développer des fenêtres modales ou des évènement asynchrones relève vite du jeu d'enfant.
GWT excelle dans ce modèle qui fait la part belle à la maintenabilité du code produit. On ne compte plus les nombreux composants graphiques fournis par cette communauté Open Source en pleine essor. Des DataGrid Ajaxé (sorting, filtre, paging) au Suggest en passant par la géolocalisation avec Google Earth ou le glisser/déplacer.
Sur le serveur, GWT tire parti des fonctionnalités offertes par la plupart des serveurs d’applications J2EE : Web Services, RPC, Servlet. En terme d’architecture, on touche l’excellence dès lors qu’on commence à concevoir du n-tiers avec côté client des DTO alimentés via des services faisant appel à JPA ou Hibernate (veiller à régler les pbs de sérialisation et de binding des types java->javacript).
Seul bémol, l’environnement de développement, encore un peu léger même si l’offre du marché commence à s’étoffer avec des Designer commerciaux.
L’autre modèle de développement, plutôt opposé à GWT est basé sur des bibliothèques de composants JavaScript. Les plus réputés sont BackBase, Bindows ou Dojo. J’avoue ne pas être un grand fan de cette approche pour plusieurs raisons. Tout d’abord à cause des problèmes de maintenabilité. Il suffit de comparer le code source d’un DataGrid en Dojo et en GWT pour se rendre compte qu’un langage fortement typé basé sur un modèle de composants hiérarchiques et évènementiels est toujours plus simple à comprendre et à maintenir qu’une liste de blocs « div » associés à une feuille de style CSS, même en passant par une fonction JavaScript sensé masquer toute la tuyauterie.
Autre point, il est toujours plus intéressant pour l'homogénéité d'un projet de disposer du même IDE côté client et côté serveur. Or Eclipse n’est pas forcément le meilleur éditeur JavaScript, et encore moins le meilleur déboggeur JavaScript.
Enfin, un générateur de code a l'avantage de pouvoir optimiser le code Javascript produit côté client pour alléger les pages et améliorer les performances. Une souplesse que n'a pas forcément un require("JavascriptFile") statique.
Nul doute que GWT fera partie des grandes stars de l’année 2007. Si vous n'aimez pas JavaScript, vous aimerez GWT...
15 commentaires
Merci
Damien
Très bonne remarque. Avant la rédaction du billet, je voulais aborder Echo mais aussi d'autres Framework plus orientés "Smart Clients" tels que Flex, Xaml ou OpenLaszlo. Finalement je traiterai ces sujets dans un autre billet.
Damien:
Rialto rentre dans le même cadre que les applications DOJO avec des Widget JavaScript. Je n'aime pas trop cette approche, trop orientée JavaScript.
Il faudrait là aussi un article entier consacré à ZK. ZK est un mélange de DOJO-like, GWT, Echo2 et XAML. J'ai rarement vu un outil avec une architecture aussi bien pensée, on sent que ce Framework a été fait par des gens du sérail. Le seul reproche que j'aurais à faire est peut-être la complexité de l'ensemble. Demander à un utilisateur de faire du XUL (ou plutôt ZUML) pour générer finalement du HTML dynamiquement avec la possibilité de "zscripter" les évènements peut relever du parcours du combattant.
Mais ZK est vraiment un Framework à suivre de près.
Je trouve GWT très innovant et leur approche "génération de code" permet à mon avis une plus grande productivité.
Néanmoins, je vois 3 défauts importants à GWT:
Maîtrise du look and feel (peut être qu'un jour nous verrons l'équivalent du plaf de Swing)
Le code java qui sera généré sous forme de javascript doit respecter la syntax java 1.4 (pas de generics) de plus seules quelques classes java ont leur équivalent en javascript.
Enfin, le plus gros problème; le dialogue entre le javascript GWT et le serveur se fait au travers d'une Servlet GWT, impossible de dialoguer avec un web service standard.
Concernant tes questions :
1) Le Look&Feel peut être complètement paramétré via les CSS, on reste dans des technologies Web finalement "standards"
2) Très juste, je crois qu'ils sont en train d'adapter leur compilateur aux nouveautés de Jdk 1.5. Ceci dit, 90% des applications Java sont encore aujourd'hui en Jdk 1.4.
3) Si tu parles du controleur GWT principal, oui effectivement c'est une servlet. Mais vu qu'zllz n'a pas vocation à être modifiée (c'est de la tuyauterie GWT), je ne suis pas sûr qu'un Web Service apporterait une quelconque plus value.
En revanche, pour des appels externes, GWT n'interdit pas d'utiliser des WebServices, du RPC ou n'importe qu'elle autre techno serveur.
Sami
Pour les servlets GWT, ma critique était peut être un peu trop sévère. Toutefois, l'avantage d'utiliser des technos standards pour la comm client serveur aurait été d'offrir une API public, au aggregateurs et autres mashups, en même temps que l'on construirait son application.