mardi 5 février 2008

Groovy et Jonas

J'ai enfin réussi à faire comprendre l'intérêt de l'intégration continue et d'un outil comme Hudson auprès de mes voisins. Mais tout n'était pas si simple :o(( car alors on m'a gentiment expliqué qu'ici on utilise JOnAS.
Et là surprise JOnAS utilise ASM 1.5.3 qui est fortement incompatible avec ASM 2.2 utilisé par Groovy et donc Hudson.
Pour que tout fonctionne bien il faut ajouter un fichier jonas-web.xml dans le répertoire WEB-INF d'Hudson avec le contenu magique suivant :

<?xml version="1.0" encoding="ISO-8859-1"?>
<jonas-web-app xmlns="http://www.objectweb.org/jonas/ns"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.objectweb.org/jonas/ns
          http://www.objectweb.org/jonas/ns/jonas-web-app_4_0.xsd">
  <java2-delegation-model>false</java2-delegation-model>
</jonas-web-app>

J'imagine que cela s'applique aussi pour Grails.

PS: voici la jolie exception que l'on récupérait

2008-02-05 09:47:36,929 : StandardContext.filterStart : Exception starting filter authentication-filter
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
        at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:213)
        at org.codehaus.groovy.control.CompilationUnit$10.call(CompilationUnit.java:691)
        at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:885)
        at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:436)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:289)
        at groovy.lang.GroovyShell.parseClass(GroovyShell.java:488)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:500)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:480)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:539)
        at hudson.util.spring.BeanBuilder.parse(BeanBuilder.java:133)
        at hudson.security.HudsonFilter.init(HudsonFilter.java:62)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:223)

4 commentaires:

Miguel a dit…

De toute façon, Jonas c'est has been ...
Vu tous les serveurs JEE libre à notre dispo, Jonas n'a aucun intérêt, ni technique, ni en terme de management/production. Jonas a été créé pour rigoler, ce n'est pas possible autrement.

Guillaume Laforge a dit…

Groovy propose un jar spécial: "groovy-all", qui intègre ASM et Antlr dans son propre package. Du coup, en utilisant groovy-all.jar plutôt que groovy.jar, il n'y a plus aucun problème de version qui diffèrent.

Grails utilise par défaut la version de Groovy qui utilise groovy-all, donc pas de soucis avec Grails.

ehsavoie a dit…

Merci Guillaume, n'utilisant pas Grails (pas encore ?) je n'avais pas vérifié la différence en termes de librairies. Nous n'étions pas en mode j2ee pur pour les classloaders ce qui explique pourquoi on se retrouvait avec les jars ASM de JonAS dans notre classpath.

Rémy a dit…

Pour information, les deux issues que nous avons remonté pour faire fonctionner Hudson sous JOnAS : 1276 et 1261.