Blog de Samuel Liard
RSS icon Email icon Home icon
  • Maven, JUnit et la JVM

    Ca fait longtemps que je n’ai pas fait de petit post technique où je decris la solution d’un problème simple. Et bien justement j’ai eu à en résoudre quelques uns ces derniers temps. Je vais donc les partager.

    En ce moment je travaille sur un projet qui charge beaucoup d’objets en mémoire. Il faut donc redéfinir la taille de mémoire max à allouer pour le faire tourner. Une simple option « -Xmx512m » au niveau de la JVM et les tests unitaires fonctionnent sans pb. Mais comment faire lorsqu’on lance les tests avec Maven ?

    La première solution est de redéfinir une variable d’environnement :  
    MAVEN_OPTS=-Xmx512m

    Mais dans ce cas chaque personne reprenant mon projet va devoir redéfinir cette variable. Pour moi ce n’est pas viable. En cherchant encore j’ai trouvé comment définir cela dans le pom :

    
        org.apache.maven.plugins
        maven-surefire-plugin
        
            -Xmx512m
        
    

    Et la ça fonctionne très bien.

    Malheureusement j’avais un second problème. Je fais des tests avec des comparaisons de chaînes de caractères qui contiennent des accents. Et là encore sous Eclipse pas de problème mais en ligne de commande ça ne fonctionnait pas. En plus j’avais un Warning :
    [WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent!

    Pour corriger le Warning j’ai ajouter dans le pom :

    
    ISO-8859-1
    

    Et pour que mes JUnit fonctionnent j’ai encore ajouté deux paramètres :

    
    
    
          org.apache.maven.plugins
          maven-surefire-plugin
          
            -Xmx512m -Dfile.encoding=ISO-8859-1
          
        
    
          org.apache.maven.plugins
          maven-compiler-plugin
          
            1.5
            1.5
            ISO-8859-1
          
        
      
    
  • Conflit de lib Apache CXF et hibernate

    Je viens de perdre pas mal de temps à faire fonctionner mon projet qui utilise hibernate et apache CXF pour exposer des WebServices.

    Au moment de compiler j’avais l’erreur suivante :
    WARN: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor:
    at net.sf.cglib.core.KeyFactory$Generator.generateClass

    Au début ça me paraissait être un simple NoClassDefFound, mais la classe recherchée était bien dans mon CLASSPATH.

    A force de chercher j’ai fini par comprendre que c’etait un problème d’incompatibilité de version de lib cglib. Il faut donc exclure la librairie cglib récupérée avec hibernate pour en prendre une nommée : cglib-nodep.

    Voici comment faire dans votre fichier maven 2 :

    
        org.hibernate
        hibernate
        3.2.1.ga
        
            
                cglib
                cglib
            
        
    
    
        cglib
        cglib-nodep
        2.1_3
    
    
  • Premiers pas en Flex

    J’ai enfin écrit mes premières lignes en Flex :) C’est important de mettre les mains dans le cambouis pour bien comprendre comment ça fonctionne. Et vu l’engouement pour les applications RIA, il est grand temps de m’y mettre.

    Flex SDK

    Dans un premier temps j’ai téléchargé le SDK gratuit. L’exemple « explorer » fourni se construit très simplement grâce au batch. Il offre une belle démonstration des composants graphiques flex.

    Par contre j’ai eu un peu plus de mal à compiler mes fichiers MXML en ligne de commande. Pas de mystère Flex Builder simplifie grandement les choses.

    Flex et maven

    Et oui Flex seul, c’était trop simple :) Avec maven c’est deja un peu plus chaud… Heureusement un de mes collègues a justement un stagiaire qui travaille sur le sujet… Ouf ! :)

    Dans un premier temps j’ai utilisé le plug-in de servebox en suivant le tutorial de ce blog… sans succès. Mais après avoir lu l’étude de notre stagiaire je suis passé sur flex-mojos. Là encore ça a été laborieux mais cette fois j’ai fini par faire fonctionner l’exemple.

    Le plus fatiguant a été de mettre les libs du SDK Flex dans mon repository Maven Local. J’ai du mal à comprendre qu’elles ne soient pas publiées. En tout cas j’espère bientôt les trouver dans notre repository d’entreprise.

    Après pour faire fonctionner l’exemple de flex-mojos, il faut aussi se battre. Les informations sont éparpillées sur le site, le blog, les commentaires du blog et le groupe de discussion. J’ai reconstruit un zip du projet qui fonctionne ici : Dashboard.zip

    S’il ne fonctionne pas chez vous, c’est soit un pb de connexion web (proxy..) soit que les libs du SDK Flex ne sont pas dans votre repository. Attention certaines lib ne sont présentes que dans le SDK fourni avec Flex Builder (datavisualization.swc par exemple).

    Ensuite j’ai suivi cet exemple pour faire dialoguer mon application Flex avec mon serveur et la on voit la souplesse du langage pour traiter du XML, c’est très agréable.

    La prochaine étape : mettre en place Blaze DS ;)

  • Acceleo JEE Module Sprint

    Goulwen de l’équipe Acceleo nous propose de participer à l’enrichissement de leur module J2EE. Pour le moment ce module permet de générer une couche de persistance hibernate, des services spring et une partie IHM Web en struts. Si vous avez des idées, vous pouvez les proposer sur la mailing list acceleo-dev@ow2.org.

    De mon côté, j’ai proposé la réalisation d’un module de génération d’IHM CRUD (Create Read Update Delete). Dans un premier temps elle sera faite avec struts2 mais la prochaine version sera en flex. Même si je suis conscient que ce type d’IHM générique n’est pas utilisable dans le cadre d’un produit, ça reste un bon outil pour naviguer dans son modèle de données et un bon squelette pour la réalisation de l’IHM cible.

    J’ai mis sur SVN un premier exemple de la cible à générer. C’est un module maven, il suffit donc de lancer « mvn jetty:run » pour le tester.

    Si vous avez des idées, des propositions ou mieux du temps pour donner un coup de main, contactez moi ;)