Je suis déjà dans le train en direction de Paris, mais franchement je serai bien resté. Merci au Poitou-Charentes JUG pour l’organisation et au support financier de Serli.
Bravo à Orianne Tisseuil pour l’organisation, ainsi que Jérome Petit.
L’espace d’exposition était très bien. Je rappelle que l’ensemble de la conférence était gratuite grâce au sponsor de Serli. A midi, nous avons eu un superbe buffet puis des tables pour déjeuner et discuter à 10. Hasard ou coincidence, j’étais à une table plutôt parisienne avec quelques visages connus du Paris JUG (Nicolas de SFEIR, Pierre-Yves dit @piwai, Eric Siber @esiber de Novedia Group, les JDuchess, Cédric de Vidal, et j’en oublie…). Mais les moments de pause pendant la journée nous ont tous donné le temps de discuter et de se rencontrer. Les speakers étaient content, avec une bonne organisation. Pas de micro en panne, des salles bien fichues, des bonnes questions de la salle, il y avait une ambiance détendue et cool. Avec 130 personnes environ, c’est déjà une très belle réussite.
Glassfish update
Sur les conférences à proprement parler, après la KeyNote d’Emmanuel Bernard, j’ai mis à jour mes connaissances sur Glassfish. Alexis Moussine-Pouchkine explique tout d’abord une différence entre l’approche Sun et l’approche Oracle quant aux communautés. Oracle est maintenant le responsable de nombreuses communautés. Par exemple MySQL, NetBeans, Open Solaris ou Java. Et nous avons donc parlé de Glassfish. Pour ceux qui découvrent Glassfish, c’est un serveur d’application Java open-source qui propose une pile d’exécution Java EE 6. La version 3.0 a été livrée en décembre 2009, la version 3.0.1 en juin dernier, et la version 3.1 sera disponible dans quelques semaines. La roadmap de Glassfish est détaillée sur le site de Glassfish.
Avec un moteur d’injection de dépendance intégré dans GlassFish, plus besoin de le packager dans un WAR. C’est une fonction qui est standardisée et intégrée dans le serveur d’application. J’imagine que sans les JARs de Spring, votre WAR en effet doit être plus petit.
Sur la partie OSGi, la philosophie de Glassfish est de s’en servir non pas comme d’une fonctionnalité externe, mais comme d’une garantie de modularité. C’est en partie le travail de Jérome Dochez sur le noyau HK2, qui est une abstraction au dessus d’OSGi, qui permet d’avoir un système simple et puissant.
Dans Glassfish V3.1 prévu pour la fin de cette année, nous aurons le support du Clustering objet. Sur le noyau actuel, les développeurs apprécient la puissance et les possibilités de redémarrage casi instantanées de Glassfish. Enfin avec une API Embedded, il sera même possible de construire son application Java, de la packager, et que celle-ci embarque un noyau Glassfish pour son exécution. Ce serait un serveur d’application complètement configuré à votre application. Je pense que cela pourrait être en effet intéressant. Plus de sysadmin qui demande vos WARs, vous livrez une application complète.
Alexis revient aussi sur les folles rumeurs de l’an passée autour de Glassfish. Tant que l’acquisition n’était pas effective, il était impossible de communiquer. Aujourd’hui Oracle s’est positionné rapidement, Oracle Weblogic Server et Oracle Glassfish Server sont 2 produits qui quoique différent, font partie du coeur de l’offre Oracle. La version 3.1 sera aussi intégrable avec Oracle Cohérence, le cache de données. Bref plutôt des bonnes nouvelles pour Glassfish.
Enfin le point le plus important et le plus sympa de la présentation, ce fut lorsqu’Alexis présenta le travail des équipes de SERLI. Quelques développeurs (Matthieu que je connais un petit peu) ont codé une nouvelle fonctionnalité dans Glassfish qui permet de gérer le versionning de votre application. C’est en effet un cas d’usage. Grâce à ce système, il est possible de passer d’une version 1.2 à une version 1.1 de votre applicaiton, sans relancer le serveur. Imaginez les gains en production. Alexis a rendu un hommage sympa au boulot des équipes de Serli. Matthieu va d’ailleurs à JavaOne à San Francisco pour présenter ce sujet. Sympa non ? Tu contribues au produit, tu donnes de ton temps, et hop un tour à JavaOne. Etre geek et impliqué cela n’a pas de prix. Bravo à Serli aussi d’envoyer des gars là-bas. Y’a des boites qui ne veulent même pas que des gens prennent une RTT pour venir à leur frais sur la Rochelle…
JSF 2.0
Pour ma part j’ai ensuite suivi la présentation de Damien Gouyette sur JSF 2.0. Expert sur cette technologie, il a couvert l’ensemble des nouvelles fonctionnalités en nous présentant une application de blog. Damien a codé et migré par ailleurs son blog de WordPress vers Google App Engine en utilisant… Play! Framework avec Siena. C’est donc une personne qui connait les 2 technologies, et ce fut intéressant d’écouter son avis avisé sur JSF 2.0.
Avec le recul, JSF 1.0 et JSF 1.1 n’étaient pas utilisables. JSF 1.2 propose depuis 2006 un noyau stable. Et JSF 2.0 permet depuis octobre 2009 de travailler plus efficacement. Il utilise Balsamiq pour nous montrer l’architecture de son projet. Je ne peux pas vous restituer ici toutes les parties de JSF, mais ce fut intéressant.
Sur le support d’ajax, le tag <f:ajax> permet d’intégrer facilement des fonctionnalités Ajax comme pour la validation ou le rendu partiel. Il est aussi possible de créer des URLs bookmarkables. Cependant comme discuté avec Damien après la conférence, ce n’est pas un système simple, mais qui fonctionne bien. Dans JSF 2.0 un nouveau scope a été ajouté. Le @ViewScope permet de tenir la session tant que l’utilisateur est sur la page. Pratique pour tout ce qui est Ajax. Je ne serai pas en mesure de vous dire comment cela se recoupe avec Spring Webflow par exemple.
La navigation de page en page est plus simple. Plus besoin par exemple de déclarer des règles d’enchainement de page dans votre fichier faces-config.xml par exemple. Le moteur est capable de charger la vue suivante avec un outcome, ce qui simplifie je pense la création de flow. Et par ailleurs, cela marche très bien avec Spring Web Flow.
Le problème du double-submit est réglé avec une redirection comme font les autres frameworks MVC. Le traitement des ressources a été revu. Le code de sa présentation est librement accessible sur son espace GitHub : github.com/dgouyette.
Connaissant bien JSF et GWT, je pense que ce sont de bonnes technologies dès lors que les problèmes à résoudre demande une présentation orientée application riche. Pour ce qui est pur web, regardez Play!, Apache Tapestry, Ruby on Rails ou Grails.
Google App Engine
Christophe Jollivet (@jollivetc) est le JUG Leader du Tours JUG. Google App Engine est maintenant bien connu de tout le monde. Comment cela fonctionne-t-il ? Qu’est-ce qui marche bien ? Quels sont les points un peu délicat ? Et quels sont les casseroles que vous devez connaître ?
Imaginez une plage déserte, vide, sans personne. Vous décidez de poser votre serviette. Une fois allongé, un petit caillou dans le dos que vous n’aviez pas vu, se met à vous casser l’ambiance. Puis c’est une famille qui s’installe à côté de vous. Et puis un freesbee qui termine sa course dans votre tête… Le rêve se transforme en cauchemar. Christophe nous fait un peu peur et rassure ensuite tout le monde : GAE c’est super, mais voici quelques contre-indications ou mélanges à ne pas faire.
Je ne listerai que les points qui fâchent et les points qui font plaisir. Premier point sombre, le cold start avec Google App Engine. En fait, dès lors que personne n’utilise votre site internet, votre application est éteinte et parquée. Si vous revisitez à nouveau le site, il faut entre 10 et 30 secondes pour que votre application se relance. C’est ce que l’on appelle le Cold Start. Et cela peut tuer un site qui n’a pas beaucoup de traffic. Prenez mon projet de y’a un an (http://touilleur.appspot.com) que j’ai abandonné par exemple.
Dans un autre ordre, l’envoi de Mail est un peu particulier. Impossible de l’effectuer de votre propre domaine. Les emails envoyés le seront de « monapp@touilleur.appspot.com » par exemple. Il est possible de créer des utilisateurs dans l’application mais le nom de domaine n’est pas modifiable. Vous pouvez le masquer via une redirection mais je pense que les filtres anti-spam bloqueront votre email. Enfin l’envoi est limité à 2000 emails par jour pour la version gratuite, ce qui est ridicule sur certains gros sites. Le serveur SMTP est bien entendu bridé, et il n’y a pas de POP/IMAP. La réception s’effectua via une Servlet.
Une autre limite à connaître, c’est le temps maximal de vos requêtes. Il ne doit pas excéder 30 secondes, ou Google coupe le traitement en levant une exception. C’est un bon principe mais pas forcément facile à gérer dans votre code. Vous ne pouvez pas vous y préparer avec la version locale de GAE. Lors de la mise à jour de GAE par Google, certains développeurs qui avaient une application OK se sont retrouvés avec des requêtes tuées… alors que cela marchait avant. Attention donc à ne pas coder n’importe comment. Pensez votre architecture pour découper les traitements
Dans la partie Persistence, Christophe prévient que c’est un nouvel univers qui nous attend. Pas de relationnel, de jointure, de relation many-to-many par exemple. Pas de fonction d’aggrégation (group by/having, min ou max). Il n’est pas possible de filtrer une requête sur deux critères. Vous ne pouvez pas créer une requête avec 2 critères de restriction si vous voulez. Tout ceci s’explique par l’architecture Big Table. Dans la mouvance NoSQL, le stockage clé-valeur permet d’excellentes performances et une montée en charge importante. Cependant, attention aux déconvenues avec GAE. Si votre application a besoin d’un modèle relationnel compliqué, cela risque d’être un peu dur à coder ou migrer. Dans ce cas, tournez-vous vers une solution type Amazon EC2 par exemple.
Vous êtes aussi limité à 1000 fichiers dans votre WAR. Attention aux frameworks javascript qui peuvent faire gonfler le nombre de fichier très rapidement. Dans les autres limitations à connaitre : votre application ne doit pas dépasser les 150 Mo. Une requête HTTP ne doit pas retourner plus de 10Mo. Attention si vous voulez stocker des PDF ou autre : ce n’est pas possible (au moins simplement) car il n’y a pas de système de fichier. Ce système permet de basculer votre application d’une machine virtuelle à une autre, et donc de monter en charge facilement
Il y a beaucoup de points positifs cependant. Si vous ne me lisez qu’en diagonal (c’est pas bien) relisez du début. J’ai dis que je n’ai repris ici que les points négatifs/positifs sans parler de GAE. La présentation durait une heure.
Concernant les avantages d’une solution type PaaS comme GAE, c’est la capacité à monter en charge très facilement qui doit retenir votre attention. C’est aussi la capacité à absorber automatiquement des pics de visiteurs.
Et là, ça tombe bien, j’ai une histoire à vous raconter.
J’ai rencontré Stéphane qui a travaillé un temps chez Jaxio avec Florent et Nicolas. Il bosse en indépendant avec un ami. Depuis 3 mois, ils codent des applications pour Android. Et cela marche plutôt super bien. Plusieurs de leurs applications ont été téléchargée entre 500 000 et 1 millions de fois. Bref pas un truc de mickey. Là où Google App Engine est intéressant, c’est pour un système intégré dans chaque page d’accueil de leurs jeux et de leurs applications. C’est une petite application web qui permet d’afficher une page de publicité vantant leurs produits. Et cette page est hébergée sur GAE. C’est le moyen le plus économique pour absorber un énorme trafic web et gérer une partie applicative. Je disais à Stéphane et Max que sans ce système, ils n’auraient pas tenu la montée en charge et le succès de leurs jeux. Ils sont maintenant dans le top 100 des fournisseurs d’application d’Android. Beau succès, bravo les gars. Et ils pourront bientôt en vivre. Si vous cherchez des gars pour coder avec Android, contactez-moi et je vous mettrai en relation.
Dans les autres avantages de GAE, il y a aussi le grand nombre de services proposé par Google. Que ce soit pour l’envoi d’email, la gestion de XMPP, la transformation d’image ou la gestion des utilisateurs Google, il est clair que GAE est un système purement web qui vous fait gagner du temps. C’est un hub de services Webs, qui permet d’assembler différentes applications simplement. Regardez le framework Gaelyk de Guillaume Laforge à ce propos. Simple et sympa. Play! Framework fonctionne aussi sur GAE avec Siena pour la persistence.
Maven 3
Cette présentation de Maven 3 par Nicolas de Loof, le JUG Leader du Breizh JUG, était sympa… mais pas trop sur Maven 3. Nicolas a en fait passé en revue l’ensemble des bonnes pratiques de développement. Sympa, très bien présenté et fun. Mais bon, pour moi c’était la sieste. Voici un mini compte-rendu pour le coup.
Nicolas a parlé un peu d’Agilité, de gestion de code source avec Git et Mercurial. SVN c’est has been et comme disait David Gageot, s’il y a un truc à apprendre en 2010 c’est le fonctionnement d’un DVCS. Développer c’est bien, mais outiller un projet c’est mieux. Présentation d’une usine logicielle, tests unitaires, tests d’intégration. Développement piloté par les tests (TDD) et ensuite BDD avec jBehave, nous avons fait le tour de l’ensemble des bonnes pratiques.
Présentation de l’intégration continue. Hudson, Sonar vous connaissez. Nicolas pour faciliter le déploiement cite Arquillian de RedHat JBoss. Pour les tests, Selenium, JMeter… hop j’avance.
Nicolas parle aussi de la mise en place du poste de développement. Il y a des équipes qui travaillent sur des machines virtuelles. La bonne idée est de préconfigurer des VMs avec les outils du projet, et de distribuer cette VM aux développeurs. Ainsi chacun partage le même socle. Si votre environnement est cassé, un clic et vous repartez d’une VM neuve. Sonatype travaille sur ce sujet avec un produit appelé OnBoard je crois.
Enfin Nicolas comme Alexis parle de Serli, et d’un projet sympa. A propos de l’idée d’images virtuelles pour coder, Serli a lancé un projet open-source appelé Blacksmith project. Allez voir sur http://code.google.com/p/blacksmith-project. C’est un projet sympa à suivre je pense.
Pour terminer, nous avons parlé de Maven3 dans les questions/réponses. Beaucoup d’informations intéressantes, sur les changements de l’été dernier. Sonatype, la boite de Jason Van Zyl qui a lancé Maven, a remplacé le coeur du projet par un moteur codé par les équipes de Sonatype. Il y a eu pas mal de vagues, allez lire le blog de Nicolas pour en savoir plus.
Conclusion
Je pense que l’ensemble des personnes présentes est unanime : très bonne première conférence. Ce que j’ai apprécié c’est de ne PAS être à Paris. Le fait de sortir de l’Ile-de-France, de venir passer une soirée ici, de rencontrer pas mal de monde du Paris JUG aussi, mais d’avoir le temps de discuter et de se voir, c’était sympa.
Je pense que sur Paris nous n’organiserons pas de conférence pour l’instant. A titre personnel, j’en rêve. Mais bon, on a un métier et peut-être pas encore trouvé une formule novatrice. Je vous assure que je rêve que l’on se retrouve un jour ou deux sur Paris au printemps prochain, histoire de faire le pingouin et d’avoir toute la communauté réunie.
Il y a Devoxx, il y a les JUG et maintenant il y aura le JUG Summer camp.
Chapeau les gars.
0 no like
Merci Nicolas pour ce résumé bien ficelé. Ce qui est bien pour moi c’est que tu as fait les conf que j’aurais suivie ;-).
« Y’a des boites qui ne veulent même pas que des gens prennent une RTT pour venir à leur frais sur la Rochelle… »
J’adore, merci de penser à ces gens là, ça fait chaud au coeur 🙂
Je le dis, par pitié, faites ces rencontres les samedis ou les dimanches… Surtout quand elles sont gratuites, le but c’est de réunir les « geeks » entre eux pour le plaisir, pas de se faire un DIF avec un rapport à rendre au patron.
L’article est vraiment très plaisant à lire, merci pour ce retour !
Tous les détails sur le travail des ingénieurs de Serli pour le versioning dans GlassFish sur leur blog java.net:
Petit rappel d’ordres de grandeur : 1 million de clients, qui téléchargent chacun une page toutes les 10 minutes, ca fait 1600 pages par seconde. Un seul serveur suffit (pas un 386DX2-66 avec 256Mo de RAM quand même, faut pas exagérer).
Je parle de pages statiques bien sûr; je te laisse le soin de nous montrer que c’est pareil avec un framework moderne comme Play! ;o)
Beaucoup de monde s’attendait à une prez tres technique sur Maven, alors que le sujet était clairement « maven au coeur de la forge logicielle ». Hey les gars, faut lire tous les mots 😛
Ceci dit j’ai eu de bon retours même de ceux qui se sont fait piéger par le titre, donc ça devait pas être si mal 😉
Il ne faut pas pour autant oublier les employeurs qui ont joué le jeu : 3 Novédiens avec journée / transport / hébergement pris en charge 🙂 Pour reprendre un message fort de la keynote sur les communautés : ce que tu sèmes tu le récoltes.
Je suis complètement d’accord avec Nicolas, une conférence loin de Paris, une veille de Week End, c’est le pied. En dehors de parisiens, ca m’a donné l’occasion de revoir Christophe (Jollivet), Xavier (Hanin) et de mettre un vrai visage sur d’autres membres actifs de la communauté (Oriane, Jérôme, Mickael Baron, etc.)
Et que dire des différents repas / verre avant, pendant et après 😉
Je veux bien les coordonnées de ce stéphane. Je cherche des Devs Android qui réussissent à gagner leur vie grâce à leurs apps.