samedi 23 janvier 2010

5ème réunion du Normandy JUG : JEE 6 et Glassfish

La 5ème réunion du Normandy Jug a mis à l'honneur le tout neuf JEE 6 avec Antonio Goncalvez un expert JCP qui a participé aux spécifications de JEE6 EJB 3.1 et JPA 2.0 et avec Alexis Moussine Pouchkine l'évangéliste de Glassfish sur Paris.

Ils s'agissaient aussi de 2 membres du Paris Jug (1er jug de de France) qui ont l'habitude des présentations et cela s'est remarqué. Cela a même permis d'attirer près de 16 personnes au restaurant d'après Jug qui a du se finir vers 2h du matin.

La présentation était donc de très bonne facture, un poil longue à la fin (mais c'est la marque de fabrique du Normandy Jug). Comme j'avais lu le livre de Antonio sur JEE 6, la présentation restait assez digeste sauf sur quelques thèmes un peu plus dense (JPA, CDI). Sur ce dernier thème (CDI), c'est resté obscure jusqu'au "Ha mais oui, en fait le truc qu'il explique sur les qualifier c'est comme dans Spring!".

En parlant de Spring, il y a avait quelques utilisateurs et fan de Spring dans ma rangé et celle de derrière. J'en fais d'ailleurs partie. Le principal commentaire était "ah JEE a enfin rattrapé son retard sur Spring". Pour être plus politiquement correcte, on peut dire que JEE devient aussi séduisant que Spring.

D'une manière plus objectif, JEE 6 est devenu aussi productif et est même parfois meilleur (exemple: le @webservice qui permet d'exposer des méthodes en services web SOAP).

Cependant j'ai le sentiment qu'ils ont un peu loupé le coche avec le profile web en n'intégrant pas le REST. En effet, le profile web 1.0 correspond au besoin web d'il y a 2/3 ans. Du coup, cela va gêner le positionnement commerciale du JEE web profile. En effet, il risque d'être moins compétitif face à Ruby On Rails, PHP et même Spring qui intègre le REST et même des choses qui viennent du web comme l'OpenID (sans spring-security).

En même temps, j'ai de plus en plus l'impression que le monde du web et celui de Java sont bien 2 communautés différentes. En témoigne, les exemples de page web avec de la mise en page à la base de tableaux d'éléments non tabulaires. Du coup, j'ai promis que j'enverrai les corrections à @agoncal.

Pour finir, le récapitulatif de mes twits sur le twitter de normandyjug :

vendredi 8 janvier 2010

GWT avancé : Event Bus, MVP et Code Splitting

Pour ce début d'année 2010, voici un nouvel article sur l'utilisation de GWT avancé. Cela concerne des techniques de programmation permettant de construire des applications GWT ambitieuse maitrisable ("Large Scale Application".

Les enjeux

Derrière ces articles techniques, il y a aussi des enjeux commerciaux.

L'impression de vitesse est très importante pour les tous les utilisateurs. Pour Driveo, c'est un critère discriminant dans le choix de la solution par rapports aux concurrents offline. Cela passe donc par la maitrise du premier chargement et donc la taille du fichier javascript généré par GWT.

L'agilité à corriger, maintenir et à faire évoluer l'application est aussi un facteur très différenciateur pour Driveo par rapport à la concurrence offline qui évolue plus lentement. Pour cela, la maintenabilité et la maitrise de la croissance d'une application doit passer des pratiques de conception le permettant.

Event Bus et MVP

Cette partie est la plus compliquée. Cependant, le paragraphe va être court. En effet, il y a la présentation donnée au normandy jug et surtout Google a surtout un article complet dessus.

Vous trouverez donc ma présentation au normandyjug qui évoque l'objectif de découplage des composants d'une application.

Enfin, l'équipe GWT a sortie un tutoriel nommé Large scale application development and MVP. Le code source de l'exemple est même disponible. L'exemple comprend même une utilisation de la gestion de l'historique avec GWT.

Le code de Driveo est cours de migration vers ces pratiques (20% sur Bus Events, 10% sur MVP). Les premiers avantage sont une diminution du code et meilleur maitrise de la maintenance.

Cependant, la migration en mode événementiel est à prendre avec des précautions car cela influence la conception complète de l'application. Il faudra veiller à éviter la prise en compte d'événement en double (par le bus events (nouveau code) et par listener/handler (ancien code)) car la localisation de prise en compte de l'évènement n'est pas la même.

Enfin, la partie la plus importante est le découplage des modules constituant l'application. Cela va permettre un code splitting plus efficace.

Code Splitting

Par le simple ajout de GWT.runAsync, dans l'embranchement principale de l'application (le menu, l'accueil, le tableau de bord), il est possible de reporter le chargement de certains modules en fonction du profil de l'utilisateur ou du module (si c'est un module peu fréquemment utilisé).

Le problème c'est que c'est efficace uniquement si les modules sont correctement découplés. On en revient donc aux pratiques de Bus Events et MVP.

Heureusement, pour pouvoir analyser ce découplage, l'équipe de GWT a ajouté l'analyse SOYC de votre code (SOYC = Story Of Your Compile). Cela vous permet, entre autre, d'avoir des rapports HTML qui permettent de savoir dans quel bloc de javascript compilés vos classes GWT se trouvent.

Pour cela, il faut ajouter les arguments " -compileReport -XsoycDetailed extra /path/path/report/application " à votre ligne de compilation. Attention, pour moi, avec ses options la compilation est passé de 9mn à 33mn! Il ne faut donc pas les laisser par défaut.

Pour conclure voici un graphique d'évolution de la taille de Driveo (Javascript compilé par GWT + CSS + noyau d'images) :
Cliquez sur l'image pour voir les détails

mardi 5 janvier 2010

Cinquième réunion du NormandyJUG : Java EE 6 et Glassfish V3

La cinquième réunion de l’association NormandyJUG aura lieu le Mardi 19 Janvier 2010 à partir de 19h00, dans les locaux de l’eXia / CESI (à Mont Saint Aignan).

Les thèmes de la soirée sont les suivants :


Et encore une fois, grâce à nos amis de chez JetBrains, Des T-Shirts et des Licences TeamCity et/ou IntelliJ IDea à Gagner !!!

Merci aussi à eXo Platform (via Dimitri Baeli) pour les goodies surprise!

Et enfin, merci aux Editions Pearson pour l’exemplaire de Apache Maven qu’ils m’ont autorisé à vous faire gagner!

Le buffet de cette soirée est de nouveau sponsorisé par enovea. Merci à eux pour leur soutien!

Vous pouvez (et devez) vous inscrire via notre page sur le site jugevent.com.

Un petit plan histoire de ne pas vous perdre :



(Le texte à été rapidement copié depuis l'article de NooCodeCommit)