29 mai 2009
Google surfe sur la Wave
28 mai 2009
Continuum vs Bamboo vs Hudson
26 mai 2009
Maven, Eclipse et GWT main dans la main

Avec la sortie du Plugin Google Eclipse, il me restait à intégrer proprement le couple Maven + GWT avec l'IDE le plus connu des développeurs java - je n'ai pas dit le meilleur ;p
- import du projet Maven sous Eclipse par m2eclipse. Les dépendances, répertoires de sources et de génération de code sont identifiées et configurés sous Eclipse, et surtout lesmodules d'un multi-projet et dépendances présentes dans le workspace sont "résolues" en tant que références inter-projet et non via les jars du repository local.
- ajout du support GWT (étape encore manuelle, j'y travaille) via Google Eclipse Plugin. Soucis ici, le plugin ajoute lui même les dépendances GWT qui font donc doublon avec celles gérées par m2eclipse. Ca n'a pas l'air gênant à condition bien sûr que les versions soient cohérentes. Si quelqu'un à une astuce je prend ;)
- génération des lanceurs pour les modules de l'application en lançant mvn gwt:eclipse. Cette tâche gère désormais aussi bien les lanceurs "classiques" et ceux exploitant le plugin Google Eclipse (cas par défaut). Au passage, le plugin prépare le répertoire /war du mode hosté.
- un simple run as > web application sur le lanceur généré et le mode hosté démarre. L'URL de la page web hôte n'étant pas déclarée dans le fichier module, j'ai pris comme convention qu'elle porte le même nom que le module et est présente dans son répertoire public. C'est un peu limitatif mais ça doit être assez courant. Sinon il suffit d'éditer la configuration d'exécution.
18 mai 2009
m2eclipse vs IAM ? Non m2eclipse + IAM
15 mai 2009
m2eclipse vs IAM (q4e)
- le build maven est nettement mieux intégré.
- moins de builds inutiles
14 mai 2009
La fin d'une époque
Nous sommes quelques un à bien devoir admettre que notre projet à nous, développé en mode "temps libre" a bien du mal à tenir la route face à la concurrence. Archiva est bien joli mais est à la ramasse comparé à Nexus, et la liste de tâche pour le "moderniser" est tellement longue, que je vois mal qui pourrait s'y attaquer. Continuum est tout à fait fonctionnel, mais son ergonomie laisse à désirer comparé à Hudson ou Bamboo, sans parler de la richesse du premier en terme de plugins.
D'où un constat simple : depuis que le modèle opensource n'est plus considéré comme opposé au business, de nombreuses boîtes peuvent mettre du monde à plein temps sur un projet ET en tirer du bénéfice (support, consulting, formation, version "pro", etc).
Archiva vs Nexus
07 mai 2009
javax.inject - enfin !
- Apache Avalon et dérivés ont montrés la voie, même s'ils étaient sans doute un peu trop précurseurs et largement sous-documentés ;
- Spring a enfoncé le clou et définitivement imposé l'idée grâce à une documentation rarement égalée dans le monde opensource et aux qualités de pédagogue de son créateur ;
- Google Guice a marqué une étape en proposant une solution légère basée sur les annotations ;
- JBoss ne s'y est pas trompé en renommant "sa" JSR299 de Web beans en Java Context and Dependency Injection
06 mai 2009
Un Leopard dans mon XP
compile, compile pas
[INFO] Compilation failure
/home/hudson/.hudson/jobs/bios/workspace/bios/bios-prise-de-commande/bios-pdc-remoting/target/generated-sources/cxf/com/sfr/pates/PaymentQueryManager.java:[26,18] cannot find symbol
symbol : method partName()
location: @interface javax.jws.WebParam
Je suis tombé sur ce qui semble bien être un bug "rigolo" :
Voici la description de la classe WebParam (définie par la spec JAX-WebServices) sur un poste Windows :
javap -classpath jsr181-1.0.jar javax.jws.WebParamLa même commande, passée sur Hudson (Solaris) :
Compiled from "WebParam.java"
public interface javax.jws.WebParam extends java.lang.annotation.Annotation{
public abstract java.lang.String name();
public abstract java.lang.String partName();
public abstract java.lang.String targetNamespace();
public abstract javax.jws.WebParam$Mode mode();
public abstract boolean header();
}
javap -classpath jsr181-1.0.jar javax.jws.WebParamPas de partName :'(
Compiled from "WebParam.java"public interface javax.jws.WebParam extends java.lang.annotation.Annotation{
public abstract java.lang.String name();
public abstract java.lang.String targetNamespace();
public abstract javax.jws.WebParam$Mode mode();
public abstract boolean header();
}
En gros, la librairie de référence jsr181 que j'ai récupérée est bugguée ... D'ailleurs, elle n'est pas dispo dans le repo maven "central" et le lien dans le POM Maven est cassé - il pointe vers leserveur d'un certain "BEA" :p. Délicat donc de savoir où aller la chercher !
Il existe heureusement une alternative via les jars du serveur Geronimo. J'ai aussi ajouté dans le build Maven un contrôle sur les dépendances qui permet de vérifier qu'on embarque pas cette jsr181 récalcitrante.
01 mai 2009
Retour à la case départ
27 avril 2009
Différentes façons de faire de l'opensource
Pour ceux qui auraient raté mon précédent billet, voici une petite explication de texte : il y a de nombreuses façons de faire de l'open-source.
- Demonstrate an active and diverse development community
- The project is not highly dependent on any single contributor (there are at least 3 legally independent committers and there is no single company or entity that is vital to the success of the project)
- The Codehaus recognizes that some committers, based upon metrics, longevity and appointed management, have greater say on a project than others
- The Codehaus places a high bar on entry for projects
- In case of disagreement, The Despots are right
25 avril 2009
Do you have a Mac ?
22 avril 2009
OPA hostile sur Maven
- On a eu le droit au développement concurrent d'Archiva et Nexus, le premier - plan de longue date de la communauté maven (cf wiki et mailing list), le second - projet perso de Jason & Friends
- On a eu droit à XBR sur maven3 pour remplacer Plexus (vous ne connaissez ni l'un ni l'autre ? comme c'est étrange !)
- On a eu droit à la refonte complète du mécanisme de transport de Maven (wagon) par l'équipe de Jetty (-> mercury) sans avoir eu le temps d'en discuter sur la liste dev avant que ce soit déjà en place. C'était peut être utile, voir nécessaire, mais on pourrait en causer un peu avant, non ?
- J'ai même eu droit à un mail perso de Jason (on est super pôtes) pour me proposer d'intégrer le plugin GWT à la Sonatype forge - quel honneur !
20 avril 2009
Sun racheté par Oracle
J'apprend juste l'achat de SUN par Oracle. IBM s'est donc fait couper l'herbe sous le pied.18 avril 2009
Appengine Java ... réfractaire à Maven !
16 avril 2009
breizhjug channel

12 avril 2009
Maven @ PoitouCharentesJUG
Le PoitouCharentesJUG m’a invité pour son inauguration à venir présenter Maven. J’ai donc rencontré la communauté enthousiaste et accueillante d’une région que je connais bien pour y avoir fait mon service militaire et déniché ma moitié.
14ème JUG français, le « bravitudeJUG » (surnom totalement non-officiel mais qui leur va si bien) est l’exemple d’une réussite : organisation sans faille, équipe motivée, public pointu, participatif et très chaleureux. Pour une première, qui plus est la veille du week-end de pâques, les 25 membres présents sont une preuve de la dynamique locale, surtout pour une session organisée en à peine 10 jours !
J’ai très largement débordé des 90 minutes qui étaient prévues pour la session, sans pour autant perdre qui que se soit en route. De très nombreuses questions ont été posées par un public mixte : le monde de l’entreprise rencontre ici les universitaires et le secteur public local – une diversité qui promet des échanges riches !
La vidéo et les slides de la session sont disponibles, en attendant que je puisse la diffuser sur Parleys.com. N’hésitez pas à contacter l’équipe du tout jeune PoitouCharentesJUG pour les encourager ou pour leur proposer votre collaboration. La prochaine session devrait être organisée sur Niort et portera sur les IHM, web (GWT) et desktop (Eclipse RCP). Encore une soirée riche en perspective ;)
09 avril 2009
Google Developer Day – community feedback
Google organisait jeudi en fin d’après midi une soirée pour présenter son AppEngine en version Java à la communauté et récolter un premier feedback. Didier Girard était de la partie, décidément toujours sur les bons coups :)
L'annonce, c'est bien sur Google App Engine for Java + GWT 1.6 + un plugin Eclipse.
Premier point, la plateforme est un pseudo tomcat tournant sur un Java6 « à la sauce Google ». Comprenez que certaines API Java sont blacklistées, soit parce qu’elles n’ont aucun sens sur le « cloud » (java.io.File par exemple), soit pour des questions de sécurité. Il n’est par exemple pas possible de lancer un Thread, et certaines pratiques de réflexion ne sont pas autorisées.
Ces petites limitations ont un gros impact sur les frameworks que nous pouvons utiliser. Guillaume Laforge a fait un gros travail d’analyse sur Groovy pour le rendre compatible (et accompagner ainsi l’annonce très relayée de Google). De nombreux autres frameworks ne sont apparemment pas compatibles. La liste des outils (in)compatibles reste bien sur à construire (je projette d'ailleurs de faire ma première appli AppEngine sur ce sujet).
Autre restriction, la « base de données » de AppEngine n’est autre que BigTable, l’espace de stockage géantissime de Google – et qui n’a rien à voir avec une base relationnelle. DataNucleus (l’ex JPOX) a été choisi pour fournir aux développeurs une approche JDO ou JPA. Bizarrement, c’est la première qui est mise en avant par les wizards et exemples du SDK. JPox était en effet un outil JDO de premier plan, mais la compatibilité JPA n’en est qu’une surcouche. Autre point, déjà JPA a tendance à nous faire faire des choses « pas très bonne au sens relationnel » car on a tendance à oublier trop facilement la base de données qui se cache derrière. Avec BigTable c’est encore pire, car il ne faut pas envisager de passer par des jointures. Autrement-dit, même API qu’en JEE « traditionnel » mais pas mêmes usages et bonnes pratiques !
Pour ceux qui ne veulent (ou peuvent) pas héberger leurs données en dehors de leur SI, Google propose une API « Secured Data Channel », une sorte de trou de souris dans votre Firewall, sécurisée en SSL, et permettant au « cloud » Google d’accéder à vos données. A priori raisonnable, mais ça sent tout de même le hack ;)
Tout ça fait beaucoup de restrictions me direz-vous. Bien sur, pour déployer sur AppEngine une appli « hello world » cela prend deux clics, et l’infrastructure Google peut alors prendre en charge des pics de charge faramineux sans qu’on ait rien eu à prévoir.
Quel est la cible de AppEngine for Java ? Pas les applications JEE, vu l’inconnue sur le bon fonctionnement des frameworks, et surtout pas en l’état vu la nécessité de repenser la persistance des données. Par contre, tout développeur qui fait du JEE au boulot se retrouve en terrain connu pour déployer son appli perso. Et c’est bien la cible de Google : plus d’applications = plus d’utilisateurs du web = plus de revenus. Vous qui n’arrivez pas à vous mettre à PHP, qui ne pipez rien à python, vous allez pouvoir faire votre petite appli Java avec les outils habituels, avec votre API JPA pour stocker des données, avec GWT 1.6 pour faire de supers applis Ajax sans rien y connaître, et publier tout ça sur le Net pour pas un radis. Et si jamais votre site de vente de schewing-gum usagé explose les scores en raison d’un Buzz incontrôlé, l’infrastructure Google tiendra le choc !
- Vous cherchiez une solution de cloud-computing pour votre entreprise ? Attendez que AppEngine se stabilise - ou plutôt, qu’on apprenne à bien l’utiliser et que les frameworks évoluent en conséquence.
- Vous cherchez à héberger votre idée de super appli délire que personne y avait pensé avant, AppEngine est pour vous ! Au mieux, vous allez lancer le nouveau YouTube, au pire, dans 2 ans, vous vous vendrez comme expert AppEngine à tous les cabinets de recrutement ;)
Merci à Didier de m'avoir transmit une invitaton pour cette soirée, qui a soulevé de nombreuses questions et beaucoup d'intérêt ;)
08 avril 2009
Google App Engine passe à Java 6
03 avril 2009
Maven au Poitou-Charente JUG !
30 mars 2009
Fonzie Coding Fryday
26 mars 2009
spring-test-context, JPA et dbUnit
- N'oubliez pas de préciser le jpaVendorAdapter (HibernateJpaVendorAdapter) dans la définition Spring de votre entityManagerFactory
- Utilisez DataSourceUtils pour récuperer la connexion associée à la transaction JPA en cours
22 mars 2009
IE6 à l'abris grace à nos DSI
18 mars 2009
Big Blue croquera t-il Java ?
13 mars 2009
Grails rocks !
12 mars 2009
A quoi bon ?
08 mars 2009
Des bugs partout !
Ce week-end j'organisais un "apéro Wii". On m'a donc gentillement prêté deux WiiMotes et un Wii Fit, et bien sur les jeux qui vont avec.
06 mars 2009
Contribution à la doc gwt 1.6
24 février 2009
L'informatique du XXIe siècle
09 février 2009
Coup de pub
Rendez-vous au ParisJug
31 janvier 2009
Bienvenue sur Facebook !
30 janvier 2009
gMail offline
Depuis peu, google propose le très attendu gMail offline.
un iPod pour 2009 !
20 janvier 2009
GXT ou pas ?
- la librairie utilise des concepts très riches (data binding) mais la documentation est bien pauvre
- j'ai des soucis avec le positionnement qui m'obligent à passer des largeurs en dur, et pire que ça, en fonction du navigateur (voir le code source de l'exemple AdvancedForm : GXT.isIE ? "100%" : "-20";)
- mes CheckBox ne définissent pas le "labelFor" qui permet de cliquer sur le texte pour les sélectionner.
17 janvier 2009
Etes-vous prêt pour Parleys Publisher ?
Je suis donc en train d'équiper le BreizhJug de tout le nécessaire pour capturer nos sessions dans les meilleures conditions. Après le caméscope à disque dur (que nous avons depuis le début) qui donne une image correcte - sans plus - du speaker, nous avons désormais un dispositif de capture VGA (vga2usb) qui permet de capturer toutes les démos faites par nos conférenciers et d'un micro semi-pro pour avoir un son irréprochable, ce qui changera du style "caméra cachée" que nous obtenions jusqu'ici avec le micro intégré du caméscope.Il ne reste plus qu'à apprendre à maîtriser Parleys Publisher, l'environnement d'édition vidéo associé...
Rendez vous en ligne ... sous peu !
08 janvier 2009
blogger pour les développeurs
Ceci est un test intégrant du code source Java :
public abstract class ConfigurableBean
{
/** Configurer used to inject dependencies in ConfigurableBean instances */
private static BeanConfigurer configurer;
/**
* Constructeur par d�faut
*/
public ConfigurableBean()
{
if ( configurer != null )
{
configurer.configure( this );
}
}
}
03 janvier 2009
bonne année !
- Adobe rachètera SpringSource
- Microsoft rachètera Adobe
- Google rachètera Microsoft
- Un téléphone Androïd sera offert à chaque visiteur de Devoxx 2009
- La fréquentation moyenne du BreizhJug dépassera les 100 membres
17 décembre 2008
beans binding dans gwt
- D'une part, parce que quelque soit l'évolution de cette JSR, elle sera toujours considérée si un nouveau groupe s'attaque à ce problème de data-binding en Java.
- D'autre part, parce qu'elle propose une API simple et focalisée sur cette unique tâche.
- Enfin, parceque le développeur de cette petite librairie a l'air très motivé !
11 décembre 2008
Devoxx - an 1
J'espère que vous avez apprécié mon "en direct", si vous trouvez des blogs/docs équivalents sur le net laissez un commentaire, que tout le monde en profite.
Et pour les membres du BreizhJUG, rendez-vous le 5 Janvier pour une session qui sera au couleur de JavaFX.
07 décembre 2008
en direct de Devoxx
Dans les lignes qui suivent, je vais retranscrire "à chaud" (enfin, avec quelques heures de différé) mes impressions sur Devoxx et les sujets que je suis lors de cette conférence.
05 décembre 2008
GWT dessine le Web de demain
A l'occasion de son passage à Rennes pour donner une formation GWT, Sami Jaber nous fait le plaisir d'accepter l'invitation du BreizhJug.
26 novembre 2008
gwt-maven and gwt-maven-plugin merge !
19 novembre 2008
Témoignage Spring
[VOTE] gwt-maven-plugin
Après plusieurs mois de mise au point et de test sur le terrain, je viens de lancer un vote pour une permière version "officielle" de mon plugin GWT pour maven.
15 novembre 2008
un Windows sous license...
Microsoft a récemment proposé aux développeurs de la fondation Apache un abonnement MSDN gratuit. Celui-ci comporte entre autre un accès à la logithèque Microsoft, dont Visual Studio dont il s'agit de faire la promotion, mais aussi Windows, Office & Cie. Apparemment, l'opération a eu un très grand succès auprès des développeurs Apache, bien qu'ils soient nombreux à travailler sur Mac et/ou Linux.Je vais peut être tester Vistual Studio par acquis de conscience, même s'il risque de ne pas trop faire l'affaire pour mes développements Java / Maven, quelque soient les reproches que l'on puisse faire à Eclipse ;)
A l'heure ou je préparais Mme à passer le PC de la maison sous Ubuntu, après avoir converti tous ceux de l'école dont elle est la directrice, en plus de mon eee-pc et du portable qui me permet d'écrice ce billet, je vais donc peut être ré-installer un Windows XP totalement légal sur notre PC de bureau (bien sur, quand je dis "ré-installer", c'est parce que le système est tout vérollé après des années de mauvais usages, pas pour un quelconque problème de licence).
Tant qu'a mettre un pied dans les deux mondes, j'ai égallement installé Office 2003 ... sur mon Ubuntu (merci PlayOnLinux) - et oui, ça marche.
13 novembre 2008
m2eclipse & checkstyle
Mon extension pour m2eclipse commence à fonctionner. Elle permet de lire la configuration Checkstyle à partir du plugin maven et de l'appliquer au plugin eclipse.
11 novembre 2008
Maven passe à Nantes
Le NantesJug organise une soirée Maven, animée par Arnaud Héritier, membre du "Project Development Commity" Maven. Pour ceux qui connaissent mal les raffinements de la fondation Apache, cela signifie qu'Arnaud a gravi tous les échelons de la méritocratie sur le projet Maven et que son vote pèse dans chaque décision majeure.
un pas de plus pour Groovy
08 novembre 2008
ça bouge autour de m2eclipse
Dans le monde opensource on a coutume de dire que la concurrence est bénéfique. Seulement dans ce cas, chacun développe grosso-modo les mêmes fonctionnalités, et sur la base de la même plateforme à quelques détails techniques près.
m2eclip
Dans mon cas, j'ai voulu ajouter le support de CheckStyle à m2eclipse; autrement dit, une extension m2eclipse qui va lire la conf de maven-checkstyle-plugin et la "traduire" pour configurer eclipse-cs, le plugin Checkstyle pour Eclipse.
Le bon point de départ, c'est que la plateforme Eclipse est conçue pour ce type de greffe de fonctionnalités (les fameux plugins) et m2eclipse ne déroge pas à la règle. Il y a donc une API très simple pour venir participer à la phase de configuration d'un projet Maven sous Eclipse.
La mauvaise surprise, c'est que cete API est un peu trop simple même dès qu'on a besoin de manipuler des concepts maven (classpath, résolution de dependances, ...). Comme il faut en plus découvrir comment se programme le plugin eclipse qu'on désire supporter, ça fait beaucoup de choses. A moins d'être un pro d'Eclipse + un guru de Maven, on en bave !
De rapides échanges avec Eugene Kuleshov m'ont convaincu que :
- je ne suis pas tout seul dans cette galère, et toute l'équipe de dev de maven est prête à apporter aide et conseils
- le seul moyen d'améliorer les choses est de "communiquer" pour que chacun apporte sa petite pierre à l'édifice.
- une page du Wiki qui décrit le principe et les pratiques à connaître.
- un ticket Jira pour permettre à chaque contributeur qui est contraint de réinventer l'eau chaude de "mutualiser" ses efforts.
02 novembre 2008
un processeur Quinte-core
Après le dual-core, puis le quad-core, voici une nouvelle génération de processeur qui va venir motoriser nos PCs de demain : le quintuple coeur.


22 octobre 2008
mon ami Word
L'outil de modélisation UML utilisé n'ayant pas le bon goût de supporter notre format de sortie, nous sommes passé par une solution (si on peut dire) d'une simplicité impressionnante :
- export du modèle UML en XMI (compter 30 minutes)
- lancement d'une transformation XSL:FO pour produire les documents en RTF (compter 15 bonnes minutes)
- utilisation d'une macro word pour la mise en forme (compter 15 bonnes minutes par document)
Comment automatiser tout ça, pour éviter de passer des heures devant son PC à attendre l'étape suivante ?
Pour la transformation XSL, j'ai crée un petit plugin maven basé sur FOP. Ce n'était pas le plus difficile
Pour le reste ... je suis tombé sur le projet JACOB, qui permet de manipuler en Java l'API COM de Windows, et donc de faire de l' "automation" d'applications sous Windows. J'ai donc réussi à :
- lancer word,
- ouvrir le fichier RTF,
- copier/coller son contenu dans le document contenant les macros,
- ... qui sont ensuite exécutées
- et enfin sauvegarder le résultat dans le répertorie cible (ouf!).
Comme quoi, l'automatisation de la chaîne de production n'est pas impossible (parfois juste un peu délicate). Et au final, on pourra avoir une version complète des docs en cohérence avec le modèle UML deux fois par jour.