lundi 10 août 2009
gwt-user.jar issue with javax.servlet java files
In gwt-user.jar of GWT there are some java files of javax.servlet and since we need to add this jar in the classpath during compilation, maven compile these files into class file and package these class files into the war of the GWT application.
Every web server and application server provide those files too and if we deploy a war with javax.servlet class file on a server we get a linkagerror because the class are provided twice.
There are different solutions:
1/ Google remove java files from gwt-user (and optionnaly provide a gwt-user-sources)
2/ You remove javax.servlet class from you war after compilation (with a antrun remove script)
3/ You use a special gwt-user without the java files and you upload it to your company repository (gwt-user-mycompany)
4/ what else ?
So there are 2 issues in the gwt bug tracker dealing with this problem.
remove javax.servlet java files from gwt-user: NeedsInfo/Enhancement
Remove or change timestamp of javax.servlet source files in gwt-user.jar: Fixed/Defect
The official google answers are below.
1-scottb from Google says : "This is a maven compiler issue. The java files from javax.servlet should not be compiled and packaged." Here
2-scottb from Google says : "The solution is to ask to the Maven central repository maintainer (ndeloof) to changed each gwt-user release to remove the javax.servlet java files." Here
3-scottb from Google says : "The source is provided as a convenience for debugging." Here
I don't know which of those 3 answers is the best. Please vote for you favorite one.
In this topic we have gwt guest like or diaz.salvador. I hope this issue would be solved before the GWT 2.0 in a way or another.
This topic was discussed in the gwt maven plugin too: http://jira.codehaus.org/browse/MGWT-48
dimanche 2 août 2009
Université du SI - Résumé du Jour 1 : USI-J1 (partie 2)
Azure: L'informatique dans les nuages par Microsoft
La comparaison va plus loin puisque maintenant quand on branche son laptop sur une prise murale car la batterie ne tient plus la route on ne pose pas la question de savoir d'où vient le courant, il est là et puis c'est tout. Et bien il en sera de même avec le cloud, actuellement on se demande ou va se retrouver physiquement ce qu'on l'on pose sur le nuage mais bientôt toutes ces questions ne se poseront plus... le nuage sera la est puis c'est tout.
La solution de cloud Microsoft est Azure et elle se découpe en compute, storage et management. Coté storage on retrouve blob, table, queue respectivement une solution de stockage de fichiers, la solution de base de données non relationnelle sur le nuage et un gestionnaire de message à la JMS. Et il existe SQL Service qui correspond à une solution de base de données relationnelle sur le cloud... et qui fonctionne très bien avec de un térabit de données !!! la seule solution de ce genre existante actuellement ?!
La plateforme Azure est compatible JAVA, Ruby et PHP ! Quoi ? Mais qu'est ce qu'il raconte ? Et oui, Microsoft propose les outils nécessaires pour déployer des applications dans d'autres technologies que les leurs. Déroutant ? Pas tant que ca quand on sait que si Microsoft veut rester dans la course, il leur faut s'ouvrir au reste du monde.
Azure vient avec d'autres services appelés .Net Services: un service BUS (ESB/SOA) et l'access contrôle ou la gestion des comptes, du paramétrages et des habilitations). Et pour finir, on passe en revue les services additionnels appelés live services, qui sont une gestion de l'authentification, des utilisateurs, la synchronisation de fichiers, la recherche etc...
Une comparaison de la solution d'Amazon EC2 à Azure permet de voir que les solutions équivalentes sur le stockage et sur l'infrastructure. Une des différence est qu'avec Azure les services sont à la mode REST (accessible par une requête HTTP). La différence majeure vient du contrôle de l'OS car côté Azure on n'a pas accès à l'OS contrairement à EC2 mais côté Azure on assure que l'OS est mieux optimisé et un tableau de bord permet de gérer l'OS. En gros, avec Azure on n'a pas d'accès root mais une interface web pour modifier la configuration et un OS pré-optimizé et avec EC2 on a l'accès root mais pas encore d'interface équivalente...
Les bénéfices du Cloud sont pour les startup un moyen de diminuer les couts car créer une plateforme de cloud permettant de gérer autant de données est très onéreux. Pour les entreprises c'est un moyens d'externaliser la prod autrement.
Après une pause et quelques petits fours, je me dirige vers la session de Sami Jaber sur les portails et GWT.
Gestion de portails avec GWT par Sami Jaber.
Il nous explique qu'il n'a pas l'intention de nous faire une Nième présentation des portails avec les portlets etc... et c'est tant mieux.
Pour des besoins web simple, il préconise du PHP avec des outils CMS type joomla and co.
Dans les exemples on voit une application GWT intégré dans un portail type liferay avec une iframe.
Le NACL (native client) arrive sur la table avec la possibilité d'exécuter du code x86 natif depuis le web ! Un peu déroutant...
A la fin de la session je demande s'il est possible d'intégrer du GWT dans du portail sans passer par une iframe (un peu crado non ? et la communication avec les autres widget/portlet dans tout ca ?). Apparemment, il existe des linker GWT pour ce faire.
Démontez vos cloisons avec Leroy Merlin.
La journée se termine par la présentation d'ADEO (mon client) sur la manière d'ouvrir son SI, de le décloisonner pour optimiser sa puissance de feu. Je n'ai pas vraiment pris de note lors de cette présentation car j'y travaille depuis plus de 2 ans. La mise en place des différents outils et méthodes utilisés chez ADEO sont détaillés: les ateliers développeurs en sont un bon exemple. Mensuellement des réunions inter équipes sont organisées et des présentations sur des sujets techniques ont lieu pour bâtir une communauté au sein de la DSI.
Keynote : Daniel Cohen
On y a parlé de la crise qui touche 85% de la planète et qui ressemble à la crise de 29 mais sans les erreurs du passé. Les banques ont été sauvées et on hésite pas a avoir un budget en fort déficit pour lancer de gros projets qui maintiennent l'économie à flot. L'Allemagne en 29 avait tout fait pour avoir un budget à l'équilibre ce qui avait rendu très difficile la sortie de crise.
On y remarque que d'une innovation majeure ressort un cluster d'innovation. Les innovations majeures du passé sont la machine à vapeur, l'électricité puis l'informatique.
La crise des subprimes est détaillée : les organismes de crédit prêtent de l'argent, puis on convertit le tout en titre que l'on remet en bourse... bref la crise quoi.
Il est difficile de transmettre le savoir communiqué lors des keynotes, le mieux étant de les regarder directement, et ca tombe bien, ils sont en webcast.
La journée se clôture par un cocktail et des amuses bouche de très bon goût. Puis un petit groupe s'organise et direction un restaurant italien du quartier des Champs Élysée histoire de débriefer sur cette première journée extrêmement riche en information. Chacun raconte ses sessions favorites et on s'accorde pour dire qu'on a vraiment hâte de revenir le lendemain !
A bientôt pour la suite et la seconde journée de l'usi.
dimanche 5 juillet 2009
Université du SI - Résumé du Jour 1 : USI-J1
Je pars donc à la recherche de solutions pour que je puisse participer à cette nouvelle édition et c'est grâce à un article du blog du touileur-express, Nicolas Martignole, que j'obtiens la silver bullet : Il est possible d'utiliser son DIF pour l'USI et il donne quelques réductions de 50% aux premiers arrivés. Ma réduction en poche je contacte Octo pour savoir comment utiliser mon DIF et faire en sorte que le Fafiec prenne en charge ces 2 jours de formations puis je contacte ma direction (Empeiria) qui est favorable à ma demande. Un grand merci au touilleur pour le coup de pouce !
L'USI c'est 2 jours de conférences variées autours des thèmes Méthodologie, Gouvernance, Usabilité et Technologie. L'organisation est impressionnantes, prise de contact régulière avec les participants pour les maintenir attentifs, mise en ligne des programmes et du détail de chaque session, publication de teasers pour certaines sessions et possibilité de choisir sa feuille de route à l'avance sur le site. Le challenge commence donc avant même de se rendre à l'USI, comment choisir sa feuille de route quand on a 4 sessions de front et qu'elles nous intéressent toutes... et ce 6 fois pour chacun des 2 jours... avec 30 sessions/keynotes par jours, on ne va pas chômer !
Le premier keynote est celui de Joël De Rosnay qui fait une revue du web et dresse son historique avant de mettre en avant l'émergence de la numérisation: Nous vivons dans un environnement cliquable. Par exemple Sekai Camera est une application permettant de laisser des commentaires visuels appelés "Air tags" dans les vidéos enregistrées avec son Iphone.
Puis c'est un tour d'horizon du web du futur qui nous montre la démocratisation des imprimantes 3D permettant de matérialiser des objets plastiques à partir de fichiers récupérés sur la toile... déroutant ! Ensuite il met en avant le conflit d'intérêt entre les anciens et les nouveaux acteurs du web avec une courbe très parlante où on voit clairement qu'on diffuse moins largement une information avec une pub en prime time qu'avec un encart publicitaire ciblé sur internet. Le temps de la communication unidirectionnelle est révolue et laisse place à la communication de "tous vers tous"...
Il prédit l'arrivée du P2P dans des secteurs comme l'assurance, la banque, l'éducation, le consulting ou l'énergie. C'est ensuite les risques et la fin de la vie privée qui sont montrés du doigt cela fait émerger des problèmes éthiques. Impressionnant de voir un homme maitriser un sujet aussi pointu que les scénarios futurs du domaine IT alors qu'il a plu de 72 ans !!
Je me suis laissé guider par mon instinct de geek pour assister à la présentation de Didier Girard sur le monde Google en entreprise ou il nous a présenter le fonctionnement de Google avec une hiérarchie des plus plate ainsi que sa vision du web 3.0 et des conditions à remplir pour que le web prenne le pouvoir sur le desktop. Il préconise d'éviter Flex/Flash et Silverlight.
J'apprends que si le web a mis si longtemps à évoluer c'est à cause de ie qui bloquait toute évolution car il n'y avait pas de concurrence et donc aucun intérêt pour Krosoft de faire évoluer le web. Puis il enchaine sur l'archi ROA (Rest) où toute ressource et fonctionnalité sont accessibles via une url web.
On voit que l'arrivée d'HTML5 va améliorer l'usabilité du HTML et donc du web.
Après on parcours les services Google dont le Cloud avec GAE, le développement avec GWT, les mobiles avec Android et on parle de SDC une sorte de reverse tunnel permettant au cloud d'accèder au SI interne de manière sécurisée. Et on termine avec le buzz du moment: Google wave ! Qui fera l'objet d'une session improvisée le lendemain.
J'enchaine avec la présentation en anglais d'Amazon de sa vision du cloud par @simon qui est un très bon orateur. Ca commence fort avec un débat sur la définition du cloud, quand quelqu'un interpelle @simon pour lui dire qu'il a tord de présenter le cloud comme du scalable d'infrastructure sans le découper en 3 couches (infra, plateforme, service/soft). @simon répond très simplement que quand son infra est scalable avec les couches du dessus le sont forcément aussi car elles profitent de la couche basse.
On enchaine avec les 7 points de la scalabilité : 1/ Concevoir pour l'échec. Tout système est faillible, il faut prévoir l'échec et le gérer à priori. 2/ Couplage faible. On enfonce des portes ouvertes. 3/ Concevoir dynamique. Pensez à l'évolution du système. 4/La sécurité est partout. 5/Ne pas avoir peur des contraintes. Affrontez les. 6/Les différentes solutions de stockage : S3, EC2, EBS 7/ L'écosystème AWS et sa communauté.
En passant, on a le droit à une chanson de mikael jakson : "You're not alone" Sous-entendu, Amazon et sa communauté est la pour nous accompagner sur le sujet du Cloud. Concernant la migration d'application du SI vers le cloud, il ose répondre que c'est simple et que seul la problématique de refonte de la persistance est un peu touchy... la blague...
La présentation est accessible ici.
Il est midi, c'est leur du buffet et comme j'ai raté le petit déjeuner et que le keynot est retransmis sur les écrans alors je prend une pause networking pour rencontrer des personnages publics présents : Guillaume Laforge de Groovy/Springsource, Nicolas Martignole du touilleur-express, Arnaud Héritier de Maven/eXo, Julien Dubois de Springsource, Vincent Massol de XWiki et j'en passe.
Le buffet est fantastique mais je m'aperçois un peu tard que c'est également un keynote de qualité que je suis en train de rater ! Luc de Bradandere est un grand orateur qui avec des exemples simples vous fait comprendre que la créativité n'est pas à l'horizon mais à vos pieds bien souvent ! J'ai hâte de voir ce keynote en vidéo !
Puis vient l'heure du keynote de 13h qui est celui que je ne voulait pas rater ! C'est Neal Ford de Thoughworks qui fait son show avec un concept qui me fait rire avant même d'y assister: Les philosophes d'antan et la Foire aux embrouilles. Il ose montrer que Aristote et Platon parlaient déjà agilité et il anime dans l'assistance une euphorie étrange... Mais que ce passe t-il ? On ne parle pas d'un sujet très poilant pourtant ! On y parle de la différence entre ce qu'on nous vend et ce qu'on achète avec une image du BigMac sur le menu et une autre sur le même BigMac une fois acheté...
Il annonce que si on supprimait 30% des effectifs dans les DSI, les projets avanceraient plus vite. Ils parle de ceux la même qui ralentissent les projets et font en sorte de tirer la couverture... on en a tous ! On parle de KISS : Keep it stupid simple. Il explique pourquoi SOA/ESB c'est trop complexe et que cela n'est pas la silver bullet mais simplement la nouvelle façon de vendre du consulting et du service aux clients: La complexitax ! Puis on s'étend sur le Chindia, la fusion de la Chine et l'inde, nos concurrents de demain qui nous imposent de nous reprendre sur notre façon de travailler pour contrer cette émergence.
Il y a plus de diplomés d'honneur en Chindia qu'il n'y a d'étudiant au états unis. Et je terminerai par "If you want to build a ship, don't herd people together to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea." Antoine de Saint-Exupery
La présentation est disponible ici.
J'ai ensuite profité de la présence de Tristan Nitot de Mozilla Europe pour comprendre comment ils fonctionnent. Il était très fatigué car Firefox 3.5 est sorti la veille de l'USI... forcément ca prend du temps quand on est responsable de tout ce joyeux bordel. Il explique assez simplement quels sont les rouages de l'association Mozilla. A la base, ils avaient un gros logiciel qui faisait tout, un bureau web avec les mails, le navigateur etc...
Puis il ont tout découpé pour ne garder que le meilleur dans chaque module. Puis ils ont laissé la possibilité aux utilisateurs de contribuer sans vraiment faire exprès en créant le système d'extension actuel qui à l'orgine a été implémenté pour des raisons obscures, pour faire plaisir à quelques utilisateurs. Et c'est en fait cette fonctions qui a fait le succès du navigateur.
Il a expliqué les différents niveaux de contributions existant et le découpage de la communauté: 1 responsable des développements, 80 développeurs, 100 débogueurs, 1000 testeurs quotidiens, 10000 testeurs de beta, 100000 testeurs de RC, 200000000 d'utilisateur... bref 20% des parts de marché.
La suite ASAP... et la mise en forme encore après.
jeudi 18 juin 2009
Ch'ti JUG session 2 sur Maven 2 par Arnaud Héritier
Voyons comment s'est préparée et déroulée cette session.
C'est avec Sopra, le sponsor, que nous avons travaillé les préparatifs. Et c'est officiellement que nous intégrons un nouveau membre de l'équipe: Nicolas Héron qui nous avait déjà aidé pour le premier événement.
Les invitations sont lancées 2 semaines tout pile avant la soirée et en 4 heures c'est 40 personnes qui affluent pour s'inscrire sur le site. On hallucine un peu, on vérifie si ce n'est pas un SPAM ou autres problèmes technique... et non, la communauté est là et on s'en réjouit !
Assez rapidement, on plafonne au nombre maximum de personnes pouvant accueillir la salle. Puis on reçoit des mails de désistement et des demandes d'inscription de dernière minute et au bout du compte on est forcé de clôturer les inscriptions pour des raisons d'organisation et de sécurité.
Nous passons la veille prendre la température et visiter les locaux. La salle choisie est grande, belle et se prête bien aux événements de type conférence. Dans la salle se mêlent des œuvres d'art contemporain et des cheminées d'époque ce qui donne un style de très bon gout, du néo-classique ou classico-moderne, c'est selon. Une zone derrière la salle principale étaient prévue pour le buffet et un accès sur l'arrière cour permettait aux participants de s'évader. L'espace Inkermman est a conseiller.
Le jour J, on se rend compte qu'on a moins la pression que pour la première soirée. Pour preuve, on ne s'appelle que 2 fois dans la journée... la première soirée m'avait valu un hors forfait des plus couteux. Les Ch'ti JUG Leaders arrivent au compte goutte et on installe la salle, les goodies : magazines Programmez! et clés USB Sopra. Les participants se retrouvent devant la salle et discutent avant de prendre place dans la salle qui se remplie rapidement. La caméra arrive et s'est avec une grande émotions qu'elle nous quitte et part rejoindre le paradis des semi-conducteurs: paix à son circuit imprimé. Cette session n'a pas pu être filmée mais ce n'est que partie remise !
On débute les retrouvailles par un résumé des activités du JUG et on donne rapidement la parole à Sopra puis à Arnaud Héritier qui vient nous présenter sa vision de l'utilisation de maven 2 en entreprise.
L'historique du projet permet d'introduire le but de maven : standardiser les projets. On se rend compte très vite que maven n'est pas adapté à tous les coups et que pour l'utiliser il faut y aller par étape. Ensuite Arnaud propose des ressources pour appréhender maven avant de regarder de plus prés du côté des différentes branches du produit puis c'est l'heure des questions ou je me charge de titiller Arnaud. En bref, une présentation très riche puisque c'est un retour d'expérience d'un utilisateur et contributeur de maven depuis plus de 5 ans. Elle confortera certains dans l'utilisation qu'ils font du produit en apportant les précisions et bonnes pratiques qui leur manquait et elle démystifiera maven pour les non initiés. Nous avons d'ailleurs reçus de nombreux retours positifs même si quelque uns restent sur leur fin en demandant une mise en pratique... Pas simple avec un auditoire aussi hétérogène.
On enchaine sur le Quizz pour gagner des goodies de choix : 2 livres (SOA cookbook et Hacking sur le web 2.0) + 2 licences Jetbrains pour Intellij IDEA ou un autre de leurs produits.
La fin des hostilités annonce le début du buffet qui était de qualité et avec de la bière bien de chez nous comme on aime ! Les derniers survivants ont improvisé une suite à la soirée comme la première fois, dans un restaurant du centre de Lille cette fois, n'hésitez pas à vous joindre à nous lors des prochaines éditions.
Vous pouvez retrouver différentes reviews de la soirée chez Arnaud Heritier notre speaker, tartachuc ou Jérémy Sevellec.
Voici la présentation de la seconde session du Ch'ti JUG.
dimanche 7 juin 2009
Session le 15 juin sur Maven 2 en entreprise
Nous avons le plaisir de vous annoncer que la prochaine session du Ch’ti JUG est prévue le 15 juin 2009. Elle aura lieu à 18h30 à Lille à l’ Espace Inkermann, 31 Rue d’Inkermann à Lille - (cliquer ici pour un plan d’accès précis)
Attention : ce n’est pas la même salle que lors du premier évènement.
La salle a une capacité limitée, et lors du dernier évènement la salle était pleine. Nous vous conseillons donc de vous inscrire rapidement - cf. lien d’inscription plus bas.
Le thème de cette session sera : “Maven 2 en entreprise… ou comment tuer son projet avec Maven, et surtout comment le réussir.” Pour cela, nous avons l’honneur d’accueillir Arnaud Héritier, qui fait partie du comité de direction du projet Maven 2 chez Apache.
Cette session est rendue possible grâce à la société Sopra Group.
Les technologies JAVA sont au cœur de la stratégie d’innovation des systèmes d’information.
Convaincu depuis des années, de l’importance d’un tel mouvement, Sopra Group encourage la création de communautés actives au sein de ses équipes.
En permanence, les communautés de Sopra Group développent l’échange, les tests de nouvelles solutions, l’innovation dans leur application et la capitalisation au sein de l’ensemble du groupe.
C’est pourquoi Sopra Group s’engage au côté du Ch’ti JUG dans l’organisation de cette seconde session.
Inscrivez-vous dès aujourd’hui car les places sont limitées :
A très bientôt !jeudi 14 mai 2009
Soirée d'inauguration du Ch'ti JUG vue de l'intérieur
Une review de la soirée a été publiée par Antonio Goncalves, speaker de l'évènement: http://agoncal.wordpress.com/2009/05/13/bienvenu-chez-le-chti-jug/
Et vous retrouverez un retour de la soirée sur le blog d'Arnaud Buisine, Directeur technique de ProxiAD, le sponsor de l'évènement: http://blog.proxiad.com/author/abuisine/
A mon tour donc...
Tout a commencé par les préparatifs 1 heure avant le RDV. Nous testons le système audio et nous disposons la salle de façon à être face aux Ch'tis Juggers. On discute avec Antonio et comme il est très stressé par l'évènement on l'allonge sur une chaise longue au soleil afin qu'il bronze un peu... le pauvre, il est parisien, avec la pollution il ne voit le soleil que très rarement... enfin, toujours est-il qu'on a des preuves et en image.
Une fois que tout le monde était la, Antonio s'est chargé de prendre les photos. C'est un speaker triple emploi en fait, il est photographe à ses heures perdues aussi.
On a ensuite commencé les festivités en souhaitant la bienvenue aux Ch'tis Juggers et en exposant succinctement nos souhaits et nos envies concernant l'évolution du Ch'ti JUG: "Euh salut les biloutes... euh on parle Javô et pis après bahhhh... on boit ! cha vous va ?" => "Ouééééééé !!" (collégial). C'est un extrait-résumé bien entendu.
Puis notre sponsor Proxiad a pris la parole et pour l'occasion c'est Raymond Vens, Directeur général et co-fondateur du groupe Proxiad, qui a fait le déplacement pour nous présenter l'état d'esprit de Proxiad concernant le JUG et nous expliquer pourquoi être le premier sponsor du Ch'ti JUG avait de l'importance pour Proxiad. Et on note tous qu'une présentation Cobol aura peut être lieu dans les prochaines sessions. J'en profite pour remercier ProxiAD pour nous avoir fait confiance et avoir supporté la première session du Ch'ti JUG.
Et ce fut le moment que tout le monde attendait: le show Java EE 6 qui présente tout d'abord le profil d'Antonio ( = demi-dieux de l'écosystème Java) puis détaille les JSR suivantes Servlet 3.0, JSF 2.0, EJB 3.1, JPA 2.0, JAX-RS 1.1 et Java EE 6 en général. Le tout est saupoudré d'anecdotes et de blagounettes sur l'écosystème Java, on ne les détaillera pas ici, il faut le vivre pour apprécier ;-)
Ce qu'on retient c'est que Java EE 6 c'est richer, lighter but easier tout de même ! Des nouveautés, de la souplesse, et de la simplicité pour nous les Javaistes ! Et en plus, un livre sort en juin pour détailler l'ensemble et il est écrit par notre videur-photographe-speaker: Antonio Goncalves.
Après les applaudissements soutenus des Ch'ti Juggers, on a pu dessiner les grandes lignes des prochains évènements et terminer la session par une interro pour faire gagner le livre sur Java EE 5 dont l'auteur est également Antonio.
Merci à tous pour vos encouragements ! Longue vie au Ch'ti JUG ! Et à très bientôt !
Et merci à Julien Jakubowski, le second Ch'ti JUG leader !
mercredi 29 avril 2009
Première session le 13 mai sur Java EE 6
Nous avons le plaisir de vous annoncer que la première session du Ch’ti JUG est prévue le 13 mai. Elle aura lieu à 18h30 aux Salons du Pont Neuf à Lille (cliquer ici pour un plan d’accès)
Cette session est rendue possible grâce à la société ProxiAD Nord.
Le thème de cette session sera : “Java EE 6, qu’est-ce qui nous attend ?”
J2EE 1.4, Java EE 5 et bientôt Java EE 6. L’année 2009 coïncide avec la sortie de la nouvelle version de l’Enterprise Edition et de son 10e anniversaire. Mais le J2EE de l’époque ressemble-t-il encore au Java EE d’aujourd’hui? Dans cette session, Antonio Goncalves vous présentera les nouveautés Java EE 6 : un modèle de programmation centré sur les EJBs, un packaging simplifié, une couche de persistance enrichie, une nouvelle API pour les ressources REST, une simplification radicale de la couche web, et bien d’autres améliorations qui feront de Java EE 6 la plateforme idéale pour vos applications. Basé sur des standards, s’inspirant de framemeworks open source, utilisant les conteneurs léger, Java EE 6 allie standards, robustesse et solutions éprouvées.
Architecte senior, Antonio Goncalves intervient chez ses clients comme consultant et formateur. Ancien consultant Weblogic chez BEA Systems, il s’est spécialisé depuis 1998 dans l’architecture logicielle et les technologies Java. Antonio est l’auteur du livre Java EE 5 aux éditions Eyrolles ainsi que le livre Beginning Java EE 6 Platform with GlassFish 3 édité chez APress. Il est membre du JCP et intervient sur les JSR 316 (Java EE 6), JSR 317 (JPA 2.0) et JSR 318 (EJB 3.1). Il enseigne également la plate-forme Java EE au Conservatoire National des Arts et Métiers. Il est rédacteur technique pour les sites DevX et developpez.com. Antonio est co-fondateur et co-responsable du Paris Java User Group.
Pour assister à cette session, merci de vous inscrire rapidement car les places sont limitées !
A très bientôt !
Cyril et Julien
mardi 14 avril 2009
GWT feedback from an Eclipse RCP developer // Retour d'expérience GWT d'un développeur Eclipse RCP
GWT a été utilisé sur le projet XYZ pendant plus de 6 mois et c'est une première pour le pôle édition de logiciel de mon client: un retour d'expérience s'impose.
GWT : La réponse à l'expression des besoins
Le besoin
- Faire une application Web ergonomique
- Être isofonctionnel avec l'application à refondre (= client riche Eclipse RCP + Serveur)
- Réutiliser les services existants
- Puis, ajouter des fonctionnalités majeures (notion magasin, refonte éditions, etc...)
Les atouts de GWT
GWT c'est la possibilité d'écrire des applications "AJAX Web 2.0 new age technologies" mais sans écrire de Javascript ! On réalise uniquement du code JAVA qui ensuite est compilé et optimisé en Javascript.
- Développement
- On écrit du code Java, puis on peut voir les changements immédiatement sans recompiler (hosted mode + refresh)
- On peut mettre des points d'arrêt sur du code AJAX dans le debugger Java
- On compile et déploie du "Compiled and deploy optimized, cross-browser JavaScript"
- Fonctionnalités
- Communication avec le server via un système RPC simple ou via JSON, XML ou requête HTTP simple (soumission de formulaire)
- Optimisation du javascript téléchargé par les utilisateurs en fonction de leur profil (langue + navigateur)
- Réutilisation des composants graphique sur différentes application en découpant par module les différentes briques
- Possibilité d'utiliser d'autres librairies Javascript ou de coder du javascript directement
- Support simple de l'historique du navigateur avec les boutons précédant, suivant
- Gestion efficace de la localisation et de l'internationalisation
- Un choix productif d'outils de developpements (Eclipse, Netbeans, Intelli )
- Teste du code avec JUnit
- Possibilité d'étendre et contribuer à Google Web Toolkit qui est open source
Le choix de la librairie graphique
GWT seul permet de mettre en œuvre des application de type client riche mais pas de manière productive.
En effet, la gallery de widgets parle d'elle même. Il manque cruellement de composants graphiques de haut niveau pour réaliser des applications d'entreprise. Ce manque est en passe d'être comblé (prévu pour fin 2009 avec GWT 2.0) mais en attendant il faut faire sans.
Il faut donc se tourner vers des librairies tierces qui sont assimilées à une "surcouche" graphique. Il en existe 3 majeures:
- GWT-EXT (celle qui a été retenue)
- EXT-GWT ou GXT (payante pour des projets non libres, gratuite pour les projets open-source)
- smartGWT (pas assez mature au moment du choix, et maintenant ?)
Après 6 mois d'utilisation, même si il existe certains points de blocage avec la librairie GWT-EXT, on peut affirmer qu'elle a rempli pleinement son rôle:
- Apporter des composants graphiques de hauts niveaux
- Tableaux avec colonnes, tri, regroupement etc.
- Arbres avec drag & drop
- Validation de formulaire
- Classes de facilitant graphiques
- Apporter un style graphique (CSS) d'entreprise pour l'application
- etc...
De plus, GWT-EXT met à disposition d'une bibliothèque d'exemple très pratique :
- Pour choisir les composants graphiques lors de la conception
- Pour trouver des exemples de codes lors du développement
Par contre, après 6 mois d'utilisation, le projet GWT-EXT a été figé par l'équipe des développements et seul des corrections seront prises en charge. Le responsable du projet a changé d'équipe ainsi que de projet pour créer smartGWT qui est à présent assez mature pour réaliser ce type d'application. Ce qui n'était pas le cas en octobre 2008, date de début du projet. La release 1.0 de smartGWT n'est pas encore d'actualité en mars 2009 puisque le produit est encore en beta. Il faudra peut être prévoir une tache de refonte de la couche graphique avec un nouveau framework (smartGWT ou GXT ?).
La montée en compétence rapide
Après seulement quelques jours de lecture et de suivi d'articles et tutoriels en tout genre sur GWT, on est à même de mettre en place une application à condition d'avoir déjà une expérience significative en développement Java EE.
Les principaux atouts qui facilitent la vie avec GWT :
- Code 100% JAVA
- Très peu de CSS
- Presque pas de javascript
- Une configuration simple
- A comprendre
- A maintenir
- Une ouverture de la solution à l'existant en entreprise (intégration de ACEGI, des services existants, etc...)
Comme rien n'est parfait, voici quelques points bloquants lors du développement :
- Impossibilité de debugger directement dans un navigateur (obligation d'utiliser le hosted mode)
- Cette fonctionnalité sera implémentée dans GWT 2.0
- Limitation du composant graphique des arborescences multi colonnes (GWT-EXT ColumnTree)
- Aucun cadre de développement ou presque... Vous avez la parole ! Pas si simple...
- To be continued...
La mise en place de pattern techniques
GWT n'impose rien d'autre qu'une classe servant de point de départ pour la construction de l'application. On peut choisir de composer son application dans le plus grand n'importe quoi ou d'agencer le code pour faciliter la maintenabilité et la pérennité... au choix !
Les actions et commandes
GWT apporte la possibilité de gérer l'événementiel de l'application mais rien n'est prévu pour déléguer et mutualiser le code au sein de classe spécifiques en charge de réaliser des taches. On retrouve ce type de pattern dans les applications Eclipse RCP: les actions et les commandes.
Pour combler ce vide, des classes et interfaces ont été implémentées. Elles sont simples et permettent de cadrer les développements afin de mettre en place une façon de faire qui est réutilisée dans toute l'application.
Les actions étendent une interface et implémentent une méthode execute().
Les commandes sont associées à un gestionnaire de commandes qui permet de déclencher une tache à partir de son identifiant et d'un tableau de paramètre si besoin. Elles nécessitent d'être enregistrée dans le gestionnaire de commande au démarrage de l'application.
Cette façon de faire à été récupérée de la façon de faire Eclipse. Après coup, la notion de commandes devrait être supprimée pour ne laisser que des actions et ainsi simplifier le travail du développeur.
Un exemple d'action:
public class TestAction implements IAction {
public Object execute() {
MessageBox.alert("This is a test message");
return null;
}
}
Les vues et éditeurs
Les notions de vues et d'éditeurs présentes dans Eclipse n'existent pas dans GWT. Même si cela donne beaucoup de liberté, encore une fois cela ne donne pas de cadre au développement ce qui peut être gênant quand on créé des applications d'entreprises que l'on souhaitent faire reposer sur un socle de développement stable.
Il faut donc s'improviser créateur de framework graphique pour cette partie, ce qui n'est pas bien difficile si on ne fait que ce dont on a besoin. Pas besoin de coder l'équivalent de JFace pour GWT.
Il faut un peu de bon sens et unifier la façon de faire afin de ne pas s'y perdre par la suite.
Le modèle MVC
Il n'existe pas de pattern pour implémenter une application selon les bonnes pratiques du MVC, il faut encore une fois cadrer soit même ce développement. Pour faciliter la maintenance et la compréhension de l'application, il est préconisé de dissocier le modèle, de la vue et du contrôleur. Le modèle représente l'entité correspondant à l'écran, la vue correspond à la couche uniquement graphique de l'écran et le contrôleur est le gestionnaire qui fait office d'interface de contrôle des données.
A chaque module graphique a été associé un contrôleur, le but est de dissocier totalement la couche purement graphique de position des composants (label, text, liste, combo...) de la couche de contrôle en charge des interactions, du chargement des données, de la partie événementielle, de la synchronisation etc...
Les contrôleurs doivent étendre une classe paramétrée qui les forcent à implémenter une méthode d'initialisation de la couche graphique ainsi qu'une méthode de récupération de la couche graphique associée:
public class TestControler extends MyControler{
private TestUI testUI;
private TestBean testBean;
public void init() {
testUI = new TestUI();
testUI.getTestComponent().setValue(testBean.getTestProperty());
...
}
public TestUI getUI() {
return testUI;
}
}
Le modèle n'a pas d'implémentation particulière, nous utilisons directement les entités métiers (les beans) au sein du contrôleur.
La gestion du dirty
De la même façon que pour le reste, il n'existe pas de gestion du dirty des différentes entités au cours de leur édition. Le dirty permet de connaitre l'état de synchronisation d'un objet par rapport à un référentiel. Soit on gère le dirty par rapport au modèle soit par rapport à la base de données, et nous avons choisi cette dernière possibilité.
Le but est simplement d'indiquer graphiquement les modifications réalisées par l'utilisateur qui ne sont pas synchrones avec la base de données; quand la sauvegarde n'a pas encore été effectuée.
Pour gérer le dirty, nous n'avons pas non plus créé de framework. Mais un développement spécifique à du être mis en œuvre pour gérer cette problématique. Il n'est donc pas réutilisable.
Le databinding
Le databinding n'existe pas nativement dans GWT. En comparaison avec Eclipse RCP, c'est un manque.
Nous avons du gérer manuellement/programatiquement la synchronisation entre la couche graphique et le modèle métier.
Les limitations rencontrées
- Problèmes de fuites mémoires avec Internet Explorer
- To be continued
Un bilan positif
GWT est simple a prendre en main mais il faut être PRAGMATIQUE ! Les développeurs sont totalement libres de faire ce qu'ils souhaitent. Comme rien n'est proposé et que tout est à faire, on peut se laisser tenter par l'implémentation de frameworks techniques sur les différents points de manque. Mais nous ne sommes pas des frameworkers. Notre métier c'est faire des applications répondant à un besoin métier pour un contexte donné.
Un autre bilan se dessine de lui même: Le résultat ! L'application fonctionne et les utilisateurs sont satisfaits !
mardi 7 avril 2009
Retour d'expérience sur Scrum
XYZ et SCRUM : Duo de choc
Le projet XYZ est un des projets pionnier dans l'application des méthodologies agiles au sein du pôle édition de logiciel de la DSI de mon client actuel et pour cette raison un retour d'expérience était nécessaire, d'où la création de cet article issu d'une page similaire présente sur le wiki.
Notre vision de SCRUM
Mais qu'est ce que SCRUM ?
Scrum propose une façon d'appréhender la gestion de projet qui change radicalement par rapport à certaines formes de gestion de projet dites classiques (ex: cycle de développement en cascade sans itérations).
- Ce qu'il faut retenir:
- On favorisera les personnes et la communication plutôt que les outils et les processus.
- On mettra en avant un produit opérationnel plutôt qu'avoir une documentation "trop" complète.
- On préférera la négociation avec le client que de graver dans le marbre une expression du besoin qui évolue avec le temps.
- On choisira d'être flexible plutôt que rigide et se tenir uniquement au plan initial.
Ce que l'on garde, ce que l'on ne garde pas
Ce que l'on garde :
- Les principaux généraux (vu ci-dessus : Itérations, Livraisons, Agilité)
- Un Scrum Master
- Une équipe auto-gérée
- Des intervenants ponctuels (audit de code, audit fonctionnelle, consultation, etc.)
- Le Product Backlog (liste des fonctionnalités du produit et Sprint Backlog (liste des fonctionnalités d'un sprint)
- Le Sprint Review (rétrospective du sprint)
- Le Sprint Planning (plannification du prochain sprint)
Ce que l'on ne garde pas :
- Scrum meeting ou Daily Scrum : L'équipe projet se composant de 3 personnes et étant dans le même bureau, il n'y a pas de réunion spécifique organisée. Nous travaillons au quotidien ensemble et nous connaissons donc parfaitement les taches de chacun.
- Sprint Review => présentation du produit : La présentation du produit à l'équipe et aux utilisateurs n'est pas réalisée à chaque sprint. Nous avons préféré la mise à disposition du logiciel sur une plateforme via l'envoi d'un mail pour les informer. L'équipe maitrisant l'ensemble des fonctionnalités de l'application.
- Burndown Chart
Notre application de SCRUM
Le produit est découpé en fonctionnalités (Backlog Produit).
On regroupe ces fonctionnalités au sein de Release prédéfinie.
Afin de réaliser les release, on effectue des sprints de 15 jours (modulable si besoin).
Chaque sprint contient des fonctionnalités à réaliser puisés au sein du Backlog Produit de la Release courante.
Entre chaque sprint a lieu le Sprint Review ainsi que le Sprint Planning
Le Sprint Review :
- le bon fonctionnement des fonctionnalités du sprint est vérifié.
- l'équipe liste les évènements marquants du sprint précédent et décide de mener des actions si besoin (le but étant de s'améliorer à chaque sprint)
Le Sprint Planning :
- l'équipe décide de la communication à effectuer pour ce sprint (envoi de mail aux équipes utilisatrices avec les fonctionnalités et faits marquants retenus)
- l'équipe découpe les fonctionnalités sélectionnés dans le backlog en taches à réaliser de 0 à 1,5 jours pour le prochain sprint. Il existe une notion de priorisation sur les taches :
- hautes : à faire en priorité
- normales
- faibles.
Remarques : Le Sprint Planning est à préparer : une analyse générale des fonctionnalités du prochain sprint doit être effectuée au préalable.
Les outils de gestion de projet utilisé
L'outil principal est un fichier Excel :
- une feuille pour la Backlog Produit
- une feuille pour le suivi des taches à réaliser
- une feuille pour les faits marquants de chaque sprint.
SCRUM, le bilan
Le bilan est très positif : on a une vision des fonctionnalités très rapidement (a chaque fin de sprint).
L'effet tunnel est incompatible avec cette méthodologie.
Cela nous permet de toujours vérifier l'utilisabilité de chaque fonctionnalité.
SCRUM ne diminue pas la charge du projet mais améliore la qualité du produit développé.
Des charges de recette et de correction du bugs sont à prendre en compte lors de chaque sprint.
Le client final a plus de chance d'être satisfait du produit développé par rapport à une méthode classique ou on lui livre une version au bout de X mois.
Ce qui nous a manqué
- Le calcul de la vélocité de chaque sprint
cela permet de voir l'amélioration de l'efficacité de l'équipe.
Il s'agit d'un graphique qui représente l'état d'avancement du projet ainsi que le reste à faire. Il donne une bonne idée sur le respect de la date prévue de livraison.
- Un tableau afin de pouvoir échanger autour de celui ci.
Ce qui ne nous a pas manqué
- L'utilisation de post it pour gérer l'état des taches à réaliser. Avec seulement 3 membres au sein de l'équipe, le manque de cet outil ne s'est pas fait ressentir, peut être à tort.
Les perspectives
Maintenant que SCRUM a été éprouvé sur un petit projet avec une petite équipe et que les résultats sont très positifs, il serait opportun de profiter de cet élan pour appliquer cette méthodologie sur d'autres projets avec d'autres équipes et ainsi répandre la culture agile au plus grand nombre.
Par exemple, un projet pilote de taille moyen avec une équipe de 4 ou 5 personnes serait un candidat idéal pour continuer dans ce sens.
En parallèle, gérer des projets SCRUM d'envergure (>10 personnes et >1 équipe) n'étant pas chose aisée, il serait bon de s'armer comme il se doit avant de se lancer dans une telle entreprise. Des formations ou des interventions réalisées par des experts de la méthodologies (Scrum Master) favoriseraient la réussite de projets plus conséquents.
Nos points de vues de SCRUM
Le point du vue du "chef de projet":
SCRUM associe l'ensemble de l'équipe autour du projet, chaque sprint est compris par l'équipe et l'ensemble du baklog produit est connu de tout le monde.
Ce qui n'est pas le cas dans des méthodes classiques ou le développeur ne connait pas toujours ce que ces petits copains réalisent.
SCRUM permet d'avoir une meilleure vision du reste à faire, on connait ce qui a été développé et on connait le backlog produit non réalisé.
SCRUM permet une souplesse dans le sens ou la modification de fonctionnalités (en dehors du sprint courant) est possible avec très peu d'impact.
Le point de vue du "développeur":
Cette méthodologie est déroutante car elle remet en cause nombre de pratiques généralement constatées avec des méthodologies classiques, elle place l'équipe plus au centre du projet ce qui valorise le travail de chacun.
Les membres de l'équipe ont leur mot à dire et on attend d'eux qu'ils soient critiques et constructifs. Les choix qu'ils font engage leur responsabilité et le bon déroulant du sprint en cours, ceci entraine un engagement de chacun et améliore donc l'investissement de l'équipe.
SCRUM ne permet pas de réduire les charges mais améliore la qualité du produit livré au plus tôt grâce à la souplesse de la mise en œuvre et aux retours rapides des utilisateurs.
samedi 28 mars 2009
I am an Eclipse committer !
Le but premier de ce projet est d'abstraire la couche graphique des applications et donc de permettre de passer d'une interface graphique de type client riche SWING à GWT ou d'Eclipse RCP à Q4 etc...
Le background de ce projet entre dans le cadre des projets actuels qui visent à radicalement revoir l'approche de la réalisation des projets.
Alors il est vrai que rien ne prouve que cette façon d'appréhender la refonte de la conception des projets IT est la bonne façon de faire qui va percer dans les prochaines années.
Mais plusieurs points m'ont poussés à prendre en charge certains besoins du projet:
- Le leader du projet n'est autre que le fabuleux Tom Schindl de bestsolution.at et j'ai la conviction qu'en travaillant aux côtés des meilleurs on apprend énormément
- Un des besoins de l'équipe projet est un coup de main sur la partie GWT, réalisation de l'équivalent des viewers JFace et des layout pour GWT natif et smartGWT
- Le projet est un projet Eclipse et il entre dans le cadre du projet Eclipse e4, le futur de la plateforme Eclipse qui est géré par les plus grands de l'écosystème, tout simplement.
Ma première tache et non des moindre a été de créer un environnement de travail pour développer sur ce projet.
Pas si simple de comprendre le fonctionnement d'un projet qui existe déjà depuis plusieurs mois.
Puis il a fallu commencer à travailler et coder l'équivalent des viewers JFace pour GWT natif puis pour smartGWT (=librairie GWT de composant graphiques et de facilitant pour le développement)
Dans le même temps, les exemples permettant de tester ces développements ont été mis à disposition.
N'ayant pas les accès pour committer le travail sur SVN, j'envoyais le tout par pièces jointes sur bugzilla et par mail.
Je bataillais donc pour commencer au plus tôt le process d'élection afin de devenir committer et ainsi pouvoir plus simplement mettre à disposition le travail réalisé.
Mais pour devenir committer il ne suffit pas de demander, il faut évidemment faire ses preuves et être crédible quand aux compétences que l'on prétend mettre à disposition.
Le contrat était simple, une fois les exemples mis à disposition et validés, le process d'élection commencerait.
J'ai donc ajouté à mes projets des vidéos interactive réalisées avec wink afin d'aider les membres de l'équipe à tester ces exemples.
Le process d'élection a démarré au démarrage d'EclipseCon2009. Je ne sais pas si cela est lié au fait que j'en avais touché 2 mots à un ami, Olivier Moises, qui se rendait à l'événement et qui connaissait Tom, mais dans tous les cas, maintenant j'ai le statut d'Eclipse Committer sur le projet UFaceKit qui est au stade d'incubation.
Une fois élu, ce n'est pas du tout cuit ! En effet, c'est un engagement sur la réalisation de diverses taches liées au projet.
Pour valider le process il faut remplir un accord individuel ainsi qu'un accord avec son employeur si vous êtes dans le même cas que moi. Le but de cet accord est de protéger la communauté Eclipse en prévenant tout conflit juridique.
J'en suis à ce stade ci, j'ai en ma possession l'accord signé de mon employeur ainsi que l'accord individuel, reste à envoyer le tout à la fondation Eclipse.
La suite au prochain épisode...
dimanche 8 mars 2009
La création du Ch'ti JUG
La création du Ch'ti JUG
Il y a quelques temps, je me posais encore des questions afin de comprendre pourquoi il y avait tant d'effervescence autour des JUG en France.
Notamment avec le Paris JUG qui était devenu avec le temps "the place to be" pour tous les pro actifs du monde Java EE qui souhaitent à la fois parfaire leurs connaissances et échanger avec d'autres leurs avis et retours d'expérience.
Lors du premier anniversaire du Paris JUG, de nombreux blogs ont relayé des informations sur l'événement et un point avait particulièrement fait jaser à cette occasion.
En France, il existe de nombreux JUG un peu partout sauf dans une région: Le Nord Pas-de-Calais ! Outre les diverses brimades et plaisanteries que ce constat d'échec a entrainé sur les Ch'tis, ce sont tous les Ch'tis intéressés et passionnés de Java qui sont pointés du doigt, à juste titre.
Je me suis aperçu que je me posais les mauvaises questions ! Peu importe le pourquoi du comment fonctionnent les JUG ailleurs ! Ces questions sont "secondaires".
LA question à se poser étant : Comment combler ce manque de JUG entre le Paris JUG et le BeJUG, le JUG belge ? En créant tout simplement un JUG à l'image de région: Le Ch'ti JUG.
A cette occasion, j'ai lancé un pavé dans la marre avec un billet sur ce sujet brulant. Peut être ne suis-je pas le seul à me poser ces questions ?
Et bien non ! Les commentaires d'encouragement fleurissent et des contacts sont pris pour donner l'impulsion dont le Ch'ti JUG a besoin.
Un grand merci au touilleur pour avoir relayé ce billet sur son blog, ca a été je pense un élément déterminant de la création du JUG.
Après quoi s'enchaine une suite d'événements:
- Premiers échanges avec Julien Jakubowski, architecte chez OCTO technologies à Paris mais qui réside dans le nord. Présent lors de l'anniversaire du Paris JUG, il s'est fait montré du doigt lors de la soirée au moment où l'absence du JUG dans le nord à été évoquée. Il a donc décidé lui aussi de se lancer dans l'aventure et en prenant connaissance de mon billet sur le blog, il m'a contacté.
- Multiples échanges avec la direction de ma société Empeiria au sujet du Ch'ti JUG: avoir l'appui de mon employeur est un atout primordial.
- Premières bières (réunions) Ch'ti JUG afin de définir un plan d'action.
- Mise en place de documents de travail collaboratifs avec Google document; Suivi des taches à la mode agile de chez nous et partage de documents de travail, mails, lettre, sondage etc.
- Communication sur la création du Ch'ti JUG par mail
- Recherche de speakers sur les sujets qui vous tiennent à cœur (de bonnes pistes en perspectives)
- Diffusion d'un sondage pour connaitre les Ch'ti juggers
- Création d'une première version du logo
- Mise en place du site web chtijug.org
- Création de l'association
- Rencontres et diverses prises de contact avec d'autres JUGs, speakers, partenaires et sponsors
- Animation d'une mailing list sur Google group
- Recherche de salles permettant d'accueillir les événements
- Et j'en passe...
- Créer des plaquettes commerciales de présentation du Ch'ti JUG à diffuser aux entreprises de la région pour créer un pool de sponsors
- Concrétiser un partenariat avec les premiers sponsors
- Booker une salle, un buffet, des speakers
- Assurer les événements
- Communiquer publiquement sur l'ouverture du Ch'ti JUG: L'union fait la force, nous avons besoin de vous !
Alors quand j'imagine ce que ca sera une fois concrétisé, ça me donne envie d'aller au bout des choses.
J'ai bon espoir que la première rencontre se fasse rapidement et connaisse un succès relatif mais un succès avant tout.
Ceci permettra je l'espère par la suite d'impliquer les différents acteurs du Nord Pas-de-Calais dans un système d'échange du savoir et de capitalisation du travail qui va au delà des entreprises.
Et pour finir, je souhaiterai vivement impliquer les employeurs à investir dans cette voie, ce qui peut se traduire tout simplement en devenant partenaire/sponsor en mettant à disposition des speakers, des locaux ou des deniers mais cela peut aussi être du temps dégagé pour certains collaborateurs pour participer activement au Ch'ti JUG.
A vos patrons, j'envoie un message clair ! Investir sur la travail des collaborateurs et un bon moyen d'établir une relation gagnant-gagnant.
jeudi 19 février 2009
How to speed up the GWT compilation without modifying the UserAgent.xml etc...
Some articles explain that you can use the permutation configuration to compile a french application for IE6 for instance and not a french-english-deutsch-and-so application for firefoxilla-ie6-opera-andso !
They explain also that you can easily modify the UserAgent.xml and the I18N.gwt.xml files from the GWT distribution to set the locale and user agent you want to use to compile...
Unfortunatly, if I ask to my BOSS if I can modify those files and create a "GWT-1.5.3-with-my-funny-modification-to-reduce-compilation" distribution, I think he would kill and fired me for non quality suggestion and silly way so solve problem ! (Sorry guys, just kidding)
Here is some results sample :
http://vinaytech.wordpress.com/2008/11/10/gwt-compiler-compiling-for-...
http://blog.bazoud.com/post/2008/07/31/Can-I-speed-up-the-GWT-compiler
http://blog.bazoud.com/post/2008/07/31/Can-I-speed-up-the-GWT-compile...
http://blog.bazoud.com/post/2008/07/31/Can-I-speed-up-the-GWT-compile...
http://www.youenchene.fr/2008/08/petite-astuce-pour-gwt.html
http://www.ongwt.com/post/2008/08/11/How-do-speed-up-the-GWT-compiler
If you read these articles, they explain how to reduce the compilation but you have to modify your module xml file also and if you use continuous integration you would have a only frenchy-firefoxed application for instance after the continuum/hudson build !!!
But if you RTFM you would find this page "Defining a Module: the Module XML File" and in this paragraph "Renaming modules" :
The <module> element supports an optional attribute rename-to that causes
the compiler to behave as though the module had the name specified. Renaming a
module has two primary use cases:
* to have a shorter module name that doesn't reflect the actual package structure
* to create a "working module" to speed up development time by restricting the
number of permutations
com.foo.WorkingModule.gwt.xml:
<module rename-to="com.foo.MyModule">
<inherits name="com.foo.MyModule" />
<set-property name="user.agent" value="ie6" />
<set-property name="locale" value="default" />
</module>
When WorkingModule.gwt.xml is compiled, the compiler will produce only an ie6
variant using the default locale; this will speed up development compilations.
The output from the WorkingModule.gwt.xml will be a drop-in replacement for MyModule.gwt.xml
because the compiler will generate the output using the alternate name.
To use a renamed module in hosted mode, it is necessary to use the "physical" name
(i.e. com.foo.WorkingModule) in the URL path, while otherwise referring to
com.foo.MyModule in the host HTML page.
So do you still need to modify google GWT distribution file to provide your own distribution ? Maybe if you use the -noserver option and GWT 1.5.3
Just create a new file called myDevModule.xml :
<module rename-to="com.foo.MyModule">
<inherits name="com.foo.MyModule" />
<set-property name="user.agent" value="ie6" />
<set-property name="locale" value="default" />
</module>
On my project, this solution is a very good news ! I can now compile in less than 2 minutes !!! A few days ago, I needed to wait for 10 minutes to compile on my computer...
But in the next GWT 1.6 release we will have a new way too avoid wasting time with compilation because the Draft Compile flag will become a real option and not only a patch (I Hope)
Hope that help !
PS: This trick does not work with the -noserver option... see this post on google group : http://groups.google.fr/group/Google-Web-Toolkit/browse_thread/thread/38ff8bedd038ec68?q=Manage+developement+and+production+environnement#beff4307165969c7
Here is the issue : http://code.google.com/p/google-web-toolkit/issues/detail?id=2976
dimanche 8 février 2009
"Nord-pas-de-Calais Lille Java User Group" ou Ch'ti JUG ?!
Il existe de nombreux JUG (Java User Group) en France et ils sont très actifs ! voir de plus en plus actif si j'en crois mes flux RSS !
A en croire les billets de certains blogger assidus du monde de Java J2EE comme le touilleur ou Eric Lefevre, les JUG sont de plus en plus répandus en France SAUF DANS LE NORD !!!
Si c'est pas une honte ça ! Avec tout le beau monde qu'on a, on est même pas capable de maintenir un JUG digne de ce nom... Et nos amis les belges, juste à côté de nous, ont un JUG extrement bien développé puisqu'ils organise la "petite" conférence Devoxx... (> 3000 participants !!! voir parleys.com)
Alors je ne sais pas ce que vous en pensez VOUS qui êtes du Nord de la France, mais organiser un JUG peut se révêler une expérience professionnelle très riche et valorisante pour les organisateur et les participants !
Si vous, votre entreprise ou même votre voisin êtes motivés pour monter ce type de projet, alors n'hésitez pas à me contacter ! Je suis sur la métropole Lilloise et je pense qu'on se doit d'avoir un JUG sur Lille, 4eme agglomération française... et même pas un JUG...
Pour ce qui est du nom du JUG, étant dans le nord, je pense que seul le Ch'ti JUG ou le Ch'tio JUG peut etre retenu... Ca fait partie des choses qui s'imposent dans le Nord.
Pour le logo, une idée ?
samedi 7 février 2009
GWT 1.6 M1 Release
Just a post to relay the GWT 1.6 M1 release yesterday !
Here is the original announce on the GWT group:
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/3e7e6cc3b35ad98a
You can download it on the GWT download page:
http://code.google.com/p/google-web-toolkit/downloads/list?can=1&q=1.6.0
Or here directly if you can wait to get it :
http://google-web-toolkit.googlecode.com/files/gwt-windows-1.6.0.zip
To remember you, here is the GWT 1.6 roadmap from the google web site here:
http://code.google.com/intl/fr/webtoolkit/makinggwtbetter.html#roadmap
Release 1.6
Anticipated Time Frame - Q1 2009
- New compiled file deployment structure
- Easily compile into a WAR file, making it easy to deploy your compiled GWT application into standard servlet containers
- Migration from Tomcat to Jetty hosted mode server
- A more pluggable architecture for the hosted mode server will enable developers to use servlet containers other than Tomcat with the Hosted Mode browser
- Uniform event handlers
- Event handlers will be implemented in a uniform fashion across all widgets, with listeners deprecated
- DatePicker, LazyPanel migrated in from incubator
- New widgets from the incubator
- String performance improvements
- StringBuilder uses deferred binding to optimize string appends per-browser
- Compiler performance improvements
- 1.6 will introduce parallel permutation compilations and other performance tweaks for faster compiles
lundi 5 janvier 2009
GWT L10N : Accept-language auto-detection completed ! (Server side locale selection)
I searched on google and found different solution, here is the one we choose for GWT 1.5.3 (in 1.6 we will change our mind).
http://code.google.com/p/gwt-incubator-1-5-wiki/wiki/ServerSideLocaleSelection
If you want to set the locale, you can add this line to yout HTML page:
<meta name="gwt:property" content="locale=en"/>So if you want to find the user locale, juste change yout HTML file to JSP and replace the previous line with this block:
<meta name="gwt:property" content="locale=<%List<String> list = new ArrayList<String>();We just use a GWT 1.6 incubation class LocaleMatcher and we authorized two locale "fr" and "en" only. This code will use the favorite locale of the user that has been set in the browser configuration.
list.add("fr");
list.add("en");
LocaleMatcher localeMatcher = new LocaleMatcher(list);
String locale = localeMatcher.findBestMatch(request.getHeader("Accept-language"));
out.print(locale);%>"/>
We don't need to implement a special UI to manage the user locale, we use the browser feature.
Of course you must enable the locale in the module XML file too !!!
<extend-property name="locale" values="en"/>Here we choose to activate the possible locale by code with an Arraylist of the locale we accept to manage, but you can also use another GWT incubation class that scroll you module XML file to find the locale used by your module. That will probably a native feature of GWT 1.6 so wait and see in a few weeks (or months).