2011-02-07 6 views
1

Mon application contient un fichier jar tiers (com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar) qui est compilé dans Java6. J'ai réussi à l'utiliser sur Tomcat 5.5 qui fonctionne Java5 mais quand j'ai essayé de déployer la même application sur JBoss 5.1 - Je reçois l'erreur:
UnsupportedClassVersionError qui se produit uniquement dans JBoss 5.1

[org.jboss.detailed.classloader.ClassLoaderManager] (main) Unexpected error during load of:testdata.SomeAnnotation java.lang.UnsupportedClassVersionError: Bad version number in .class file

que j'ai réalisé que cela arrive non seulement à moi. as described here.

mes questions:
1) pourquoi est-il possible d'utiliser ce pot dans les serveurs web tels que tomcat mais il dérange encore Jboss 5.1?
2) Pourquoi le chargeur de classe Jboss charge-t-il l'implémentation Jweaver de l'application à utiliser pour charger le framework et n'utilise pas l'implémentation de Jboss aspectJ? Peut-être que je devrais configurer son chargement de classe à parent-premier et cela va résoudre ce problème?

Répondre

2

Java est rétrocompatible, (un pot Java 5.0 peut fonctionner sur Java 6) mais pas avant compatible (Un pot Java 6 ne peut pas être utilisé sur Java 5.0)

Vous devez obtenir une copie de la 3ème partie Jar qui est compilé pour Java 5.0 ou mettre à jour la version de Java à la version 6 ou plus tard.

+0

Alors, comment ai-je pu exécuter les mêmes classes Java6 lors de l'exécution de mon application sur Tomcat? ils utilisent le même Java JDK (1.5) - je pense qu'il est en quelque sorte lié au mécanisme de chargement de classe JBoss – Spiderman

+1

Lorsque vous compilez un jar dans Java 6 vous pouvez spécifier une cible de Java 5, cependant une JVM Java 5.0 ne chargera pas Java 6 classe indépendamment du fonctionnement du classloader. c'est-à-dire qu'il n'y a rien que le classloader puisse faire sans transcoder les classes au fur et à mesure qu'elles les chargent (je ne connais aucun classloader qui le fait) et il serait très dangereux de le faire. –

0

À l'occasion, nous avons vu que les élèves HSG modifient le jdk qu'ils utilisent, reconfigurent leur environnement à cette fin et que cette exception continue de se produire. Cela peut causer beaucoup de confusion, surtout s'ils passent de jdk1.6 à jdk1.5. Presque toujours, le coupable est qu'une ou plusieurs autres versions de jboss sont en cours d'exécution et toutes les demandes entrantes appellent l'une d'entre elles (avec les plus récents jars). Nous vérifions toujours quelles applications sont en cours d'exécution et arrêtons/arrêtons toutes les autres versions de jboss.

Questions connexes