2011-03-31 12 views
5

Mi problema es que tengo una aplicación web creada e implementada como un archivo WAR en JBoss 6. Mi servlet no puede cargar una clase en mi aplicación y arroja un No Error Clase Def Encontrado.NoClassDefFoundError cuando la clase está en JBoss 6 WAR WEB-INF/carpeta de clases

Confirmé que esta clase existe en la ubicación correcta del archivo WAR. Todas mis clases de aplicación existen en la carpeta WEB-INF/classes, junto con mi clase de servlet que se ejecuta sin problemas. De hecho, parece que esta es una sola clase que no está en el classpath porque otros aspectos de la aplicación se ejecutan geniales.

JBoss funciona en JDK 1.6_21, la aplicación fue construida con JDK 1.6_24, esto no debería ser un problema, ¿verdad?

Además, esta aplicación funciona perfectamente localmente en Eclipse, y cuando despliego el archivo WAR a un servidor independiente Tomcat 7 y Glassfish 3, ambos encuentran esta clase sin problemas. No espero que nadie sepa al instante qué está mal, si alguien ha visto algo así antes, por favor comparta sus experiencias, o si tiene buenos consejos o sabe de buenas herramientas para REALMENTE profundizar en los problemas de Classpath, entonces por favor comparte.

+0

¿De qué clase es la que se queja? Lo más probable es que JBoss ya proporcione esta clase en su sistema/tarros compartidos y está chocando con la clase en su guerra. No tengo una solución, solo mis simpatías, ya que resolver problemas de carga y aislamiento de clase con JBoss no es divertido ni fácil. –

+0

Es mi clase. JBoss ya no lo habría empacado a menos que se hayan colado en mi oficina y se lo hayan robado mientras tomaba café :) –

Respuesta

7

NoClassDefFoundError significa que la clase estaba "cargada" pero no se pudo construir la definición de clase. Suele suceder cuando hay una excepción en la inicialización estática de la clase. He visto más de una vez en AppServers que las excepciones durante la inicialización estática no se informan en el archivo de registro.

Compruebe los bloques estáticos y la inicialización de los atributos estáticos de la clase que está fallando para posibles causas de excepciones.

Otra causa que he visto en JBoss y WebSphere es que la aplicación web está distribuyendo una biblioteca que entra en conflicto con una biblioteca en el servidor de la aplicación (como servlet.jar o algo así). Por lo general, el problema se resuelve eliminando la biblioteca ofensiva o modificando el mecanismo de carga de clases para "ser el primero en progenitores".

Espero que esto ayude

+0

Sin duda me dio algunas cosas en qué pensar. ¡Buenos consejos! Investigaré y te dejaré saber si esto resuelve mi problema. –

+0

¡Impresionante! Tuviste razón al verificar los inicializadores estáticos, había un archivo de propiedad al que se hacía referencia de forma incorrecta y se estaba lanzando un NPE. Nunca pensé que JBoss engañosamente no registraría las excepciones que ocurren durante la inicialización estática de las clases. –

+0

¡Gracias! Pensé que NoClassDefFoundError significaba que la clase no estaba cargada. Esto es una revelación. – anton1980

Cuestiones relacionadas