Java.lang.NoClassDefFoundError: happens sporadically on Resin sever start up

javaresin

java.lang.NoClassDefFoundError: happens sporadically on Resin sever start up

This is on Resin 3.0.21
Using Java 1.5 on Linux machine…

I have a servlet defined on the web.xml to load the log4j.properties.
This is thrown when the servlet is trying to load on start up..

log4j-init: init log4j:ERROR Could not instantiate class [org.apache.log4j.DailyRollingFileAppender].
java.lang.ClassNotFoundException: org.apache.log4j.DailyRollingFileAppender [java.lang.NoClassDefFoundError: org/apache/log4j/FileAppender]
at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1264)
at com.caucho.loader.DynamicClassLoader.findClass(DynamicClassLoader.java:1149)
at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1072)
at com.caucho.loader.DynamicClassLoader.loadClass(DynamicClassLoader.java:1021)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:160)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:309)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:112)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:620)

Best Answer

Most likely, the file log4j.jar is found on the classpath twice, causing Classpath problems. If log4J gets loaded twice, once in the Web Application and once in Resin, then you can get this kind of confusion. Assuming log4j is already present in Resin, if it is also present in your web application's classpath (lib directory), then try removing it from your application's lib directory.