public class HelloAction extends Action { public ActionForward execute(ActionMapping mapping, …)
throws Exception { … return mapping.findForward("Hello EveryBody !!"); }}

dimanche 23 janvier 2011

GWT, le web 2.0 à portée de main

GWT, le web 2.0 à portée de main – Nicolas de Loof (présentation)
GWT, qu’est-ce que c’est ?

Commençons d’abord par un petit rappel sur ce qu’est le web 2.0 : des usages qui modifient l’interaction avec l’utilisateur au niveau du net. Pour obtenir une RIA (Rich Internet Application) de qualité, il vous faut des experts dans plusieurs domaines : CSS, HTML, DOM au minimum et surtout Javascript. Or pour ce dernier bien peu de développeurs peuvent se prétendre expert en la matière. Le web 2.0, c’est donc quelque chose de puissant mais de délicat : il faut être cross browser, faire attention à sa vitesse de chargement, être vigilant au XSS, penser aux fuites de mémoire, savoir débugger en javascript, etc …

Devant cette demande croissante pour des applications 2.0, de nombreux frameworks sont apparus, nous donnant comme le dit Nicolas “l’embarras du choix … et surtout l’embarras”. En effet, dans la vie de tous les jours, le développeur lambda est amené à faire du Javascript, de l’HTML, du Java, du CSS et du design sans pour autant être expert dans tous ces domaines. De plus l’émergence du web mobile vient encore compliquer cette problématique du cross browser que tout développeur d’application web connait bien : être compatible I.E. 7, 8, 9, Firefox, Chrome, Safari mais aussi I.E. 6 qui malgré tout représente encore une forte part de marché dans les entreprises.

De ce besoin de développer des applications plus riches naissent 3 rêves :

  • L’architecte rêve de ne pas devoir traiter les problématiques de bas niveau de javascript sur un navigateur : fuite mémoire, gestion événementielle, support cross browser, etc …
  • Le chef de projet de son côté rêve de pouvoir réutiliser les compétences existantes, c’est-à-dire java.
  • Le développeur quant à lui, rêve de pouvoir conserver son IDE préféré qui lui propose un outillage de test complet, l’auto complétion, l’aide au refactoring et milles autres petites pratiques de développement aussi utiles qu’indispensables une fois que l’on y a gouté.

Et c’est ici qu’apparaît la solution miracle face à ces trois problèmes totalement divergents et pourtant liés : GWT (Google Web Toolkit). Le framework de Google orienté composant a en effet pour but de vous permettre de développer vos applications web 2.0 en java grâce à l’utilisation du JRE standard couplé à une API spécifique. A sa charge de compiler votre code en Javascript, inutile pour vous de devenir un pro de ce langage pour réaliser une RIA digne de ce nom. Ce framework est sorti en 2006 suite à l'effervescence provoquée par l'éclosion de la technologie AJAX et de la mouvance Web 2.0. GWT est un projet Open Source géré en partie par Google associé à d'autres membres de la communauté Java.

Autre notion essentielle de GWT, sa devise “Only pay for what you see”. En d’autres termes, GWT va produire une application par navigateur cible et ainsi éliminer le code mort, les bibliothèques inutiles et autres if et else qui traînent invariablement dans une application web cross browser. D’autre part, le code java n’est pas transmis initialement : il est d’abord repris, optimisé et compilé en javascript pour effectuer la manipulation du DOM en fonction de ce qui sera le moins coûteux en performance selon le navigateur.

Bâtie sur des principes totalement révolutionnaires, GWT a puisé son inspiration dans les échecs des projets Web dits "applicatifs". Le constat est le suivant :

  • Le développement d'application Web d'entreprise est devenu complexe et coûteux
  • Un développeur Web est une sorte de mouton à cinq pattes devant maîtriser un nombre incalculable de technologies (JavaScript, Html, Css, Flash, JSP, ASP...)
  • Le nombre de développeurs Java ne cesse de croître
  • Les sites souhaitant proposer une ergonomie Web 2.0 AJAX évoluée deviennent très vite in-maintenables lorsqu'il s'agit d'utiliser JavaScript, notamment du fait du manque de compétence

Pour pallier tous ces défauts et contrer cet inexorable précepte qui veut que tout ce qui est Web est cher, GWT a cherché à fournir un niveau de productivité optimal. Le Framework redonne ses lettres de noblesse à Java. Le développeur code en Java puis laisse la main au compilateur GWT qui génère tous les artéfacts de l'application Web (en JavaScript, CSS et HTML). L'avantage est non seulement de pérenniser les compétences Java mais aussi de s'abstraire des contraintes techniques inhérentes à HTML. Avec GWT :

  • L'application est assurée d'être compatible avec les principaux navigateurs du marché
  • Le développeur s'appuie sur des ateliers génie logiciel Java avec tous les avantages que ceux-ci procurent (tests unitaires, refactoring, debug, etc ...)
  • Les fuites mémoires JavaScript sont gérées avec des traitements curatifs spécifiques
  • Les performances sont largement supérieures à n'importe quel développement basé sur JavaScript du fait de l'utilisation de procédés empruntés aux compilateurs modernes (GCC, ...)

Pour résumer, GWT est un framework :

  • simple et peu coûteux en temps d’apprentissage,
  • avec un coût incomparable par rapport au MVC,
  • extensible grâce à des librairies telles que GWT-Fx, Ext-GWT et des wrappers comme Smart-GWT,
  • multi-navigateur y compris mobiles et navigateurs à venir

GWT supporte nativement le back des navigateurs et l’internationalisation (i18n) et est également HTML 5 ready et nativement Ajax. Votre code quant à lui, écrit en java reste entièrement testable.

Très appréciable la fonction Out Of Process Hosted Mode (OOPHM) vous permet de tester le rendu de votre application, de le modifier, de recompiler à la volée et de le re-tester, le tout dans votre navigateur habituel. En effet avec GWT 2.x, plus besoin d’utiliser le navigateur système, le débugger java se branche au moteur javascript de votre navigateur, pour lequel vous aurez au préalable téléchargé le plugin.

Plusieurs fonctionnalités sont apparues avec GWT 2.0 :

  • le découpage du code js via runAsync qui permet de charger du code à la demande en fonction des droits de l’utilisateur ou du module dans le cas d’un module peu utilisé,
  • la possibilité d’utiliser des bundlers pour les images, le CSS, le JS Natif (navigateur cible). Tout le contenu du bundler est chargé au démarrage de l’appli, ce qui le rend disponible de suite lors de la navigation,
  • le binding entre code java et code html grâce à UiBinder,

Côté serveur, GWT utilise un mécanisme RPC spécifique basé sur Rest, JSON et XML; et est devenu complètement stateless : toutes les données sont chez le client, ce qui en fait un framework tout à fait indiqué pour le cloud computing.

Côté concurrence, GWT fait face à Flex, qui est déjà bien installé mais qui nécessite une phase d’apprentissage non négligeable ainsi qu’un environnement récent; et à SilverLight qui a l’avantage d’un très fort taux de pénétration grâce à windows update mais dont la plateforme est limitée.

Conclusion : vous n’avez pas d’experts javascript, html, css, java etc … faîtes du gwt !

Quoi de neuf avec GWT 2.1 ?

L’apparition du design pattern MVP (Model View Presenter) pour la présentation devient la référence. Il se traduit comme suit :

  • une partie visuelle totalement dénuée d’intelligence,
  • un Presenter qui récupère les événements,
  • un modèle de données caché : la vue n’en a pas connaissance.

Ce design pattern permet d’obtenir une application entièrement testable (la vue peut être mockée), modulaire et facilement repackageable.

En attendant une implémentation officielle, les implémentations open source sont nombreuses :

  • gwt-presenter
  • gwt-dispatch
  • gwt-platform
  • mvp4gwt

Attention néanmoins, l’apparition du MVP dans GWT 2.1 se traduit par des librairies “temporaires” dont la javadoc mentionne qu’elles sont encore en cours de développement et peuvent être supprimées. Les librairies suivantes en font partie et sont donc à utiliser à vos propres risques Description: :-D :

  • gwt.text : parser/renderer pour le data binding “donnée -widget”
  • gwt.app : place/activity pour la gestion de la navigation et les contrôleurs
  • gwt.event : event bus qui permet de gérer les événements applicatifs et d’éviter le plat de spaghetti que peut rapidement créer une application ambitieuse composée de nombreux composants qui écoutent tous les événements qui passent;

Autres sujets à surveiller dans l’avenir de GWT :

  • le rapprochement avec Spring Source et notamment la collaboration avec Spring Roo,
  • le support de Maven, longtemps laissé de côté (publication des artefacts laissant à désirer, mauvais packaging, chemins en dur etc …), Maven fait enfin l’objet d’un réel effort de collaboration (option -maven -noAnt sur webAppCreator, évolution du plugin google eclipse …)

Convaincre son boss en 10 points

En temps de crise, les décideurs sont tournés vers les solutions susceptibles d'apporter des gains de marges tout en pérennisant l'existant avec la possibilité de disposer d'un avantage concurrentiel. Dans ce contexte, une technologie telle que GWT ne peut que convaincre. De nombreuses applications de gestion, d'ancienne génération peuvent prétendre à être reliftées à la mode AJAX à moindre coût. D'autres applications, plus sensibles, peuvent bénéficier des apports de GWT en termes de performance. D'une manière générale, voici les dix points qui vous permettront de convaincre un décideur :

  • Coût

De part ses qualités intrinsèques, GWT est une technologie permettant de faire plus avec moins ou autant de charge. Les délais de développement sont raccourcis du fait de la disponibilité d'un Framework de composants riche et de l'atelier de développement Java.

Les coûts d'infrastructure sont également amortis par le fait qu'une part importante des traitements sont déportés côté client, notamment tout ce qui attrait à l'affichage.

  • Ajax

GWT s'appuie nativement sur les notions qui sous-tendent AJAX. Les pages sont construites dynamiquement côté client sur la base du moteur de rendu du navigateur. Le serveur n'est peu voire jamais sollicité pour des traitements graphiques contrairement à d'autres technologies telles que JSF ou ASP.NET.

  • Communauté

Financé en partie par Google qui a construit son modèle économique sur le Web, GWT n'en est pas moins un projet communautaire. Cette dernière s'est étoffée de manière fulgurante ces trois dernières années. Des centaines de projets gravitant autour de GWT viennent enrichir le Framework de base tous les jours. De nombreux éditeurs s'appuient sur GWT pour fournir des bibliothèques de composants, des outils métiers ou des ERP. Des livres, des formations et d'innombrables documents en libre accès sont disponibles sur la toile.

  • Pérennité

Le fait que Google soit un acteur majeur de GWT constitue un argument de poids. Outre cette participation, GWT est le fruit d'un travail communautaire impliquant une trentaine de personnes. La marge de progression de GWT est considérable du fait des progrès réalisés à chaque version (Accessibilité, CSS, Gestion de nouveaux navigateurs, ...). D'autres acteurs majeurs (Redhat, ...) du marché commencent à emboîter le pas à Google avec des soutiens financier ou des accords de partenariat technique.

  • Réutilisation de l'existant

Excepté le modèle de développement très structurant qu'il propose, GWT ne remet pas en cause les standards existants. Il s'appuie sur HTML, JavaScript, CSS et s'interface côté serveur avec tous types de technologies ou Framework (Php, Perl, CGI, Java Spring, EJB, Servlets, JSP, ...).

  • Performances

GWT a été conçu avec le souci constant des performances. Le compilateur Java vers JavaScript ne possède pas moins d'une dizaine d'optimisation en tous genres permettant de réduire parfois par 10 la taille des scripts générés côté client. En déportant les rendus graphiques côté client, il est possible de disposer d'une architecture sans-état dotée d'une infrastructure plus légère côté serveur (Cluster sans affinité de session, etc ...)

  • Abstraction vis-à-vis de la technologie

GWT est une technologie relativement agnostique des couches basses. L'avantage procurée par cette abstraction est de permettre à une application GWT de supporter les futures navigateurs (Google Chrome, Firefox 4 ou 5, IE 8) sans modification de code source. Une simple recompilation du site suffit.

  • Respect des standards et Open Source

GWT ne réinvente aucun standard, il les utilise tous. De HTML à CSS en passant par JavaScript, DOM ou JSON. Ce respect contribue à la pérennité et au large support des technologies utilisées.

  • Déploiement simple

Déployer une application GWT consiste simplement à copier un ensemble de fichiers statiques appelés « fichiers de permutations » dans un répertoire visible du serveur Web Apache ou IIS. La partie serveur dépend du niveau d'intégration avec les technologies en place.

  • Avantage concurrentiel

Utiliser GWT dans un contexte concurrentiel est clairement un avantage. Non seulement le périmètre fonctionnel des applications métier peut être élargi, mais les coûts de développement restent largement inférieurs aux autres Framework du marché.