Dear Gaurav and everyone,

Thanks so much for your help. The explanations were good and helped me better understand how the tomcat classloader works. However, I still have a problem running my web application. In short, the exception is "java.lang.NoClassDefFoundError: org/apache/log4j/Category"; see below. I tried removing files, moving jar files, and sometimes got "Logger" not found, or "inconsistent hierarchy --you have more than one logger". By the way, it all works perfectly on my windows desktop with MyEclipse 5.1 and the same classpath, or at least I think it's the same.

I know it's because commons-logging.jar, commons-logging-api.jar and log4-1.2.11.jar ahve some API conflicts. I didn't understand the explanations on why, and didn't find anywhere the steps to follow to get it to work (which is all I care about!). Can someone please help outline the steps I need to do to get my app to work?

Thanks so much in advance.
Oren
---------
Here's my system info and the stack trace I get when I access my app after tomcat is started:
- Tomcat 6.0.7-beta
- My web app uses Struts 1.3.5 and Hibernate 3.2.1 GA
- $tomcat_home/lib contains: (I copied the Struts and Hibernate libs over here) annotations-api.jar commons-validator-1.3.0.jar mysql-connector-java-3.1.10-bin.jar
ant-1.6.5.jar                  concurrent-1.3.2.jar         oro-2.0.8.jar
ant-antlr-1.6.5.jar            connector.jar                oscache-2.1.jar
ant-junit-1.6.5.jar dom4j-1.6.1.jar proxool-0.8.3.jar
ant-launcher-1.6.5.jar         ehcache-1.2.3.jar            servlet-api.jar
antlr-2.7.6.jar                ejb3-persistence.jar         standard.jar
ant-swing-1.6.5.jar el-api.jar struts-core-1.3.5.jar asm-attrs.jar hibernate3.jar struts-el-1.3.5.jar asm.jar hibernate-annotations.jar struts-extras-1.3.5.jar bsf-2.3.0.jar jaas.jar struts-faces-1.3.5.jar c3p0-0.9.0.jar jacc-1_0-fr.jar struts-mailreader-dao-1.3.5.jar catalina-ant.jar jasper-el.jar struts-scripting-1.3.5.jar catalina-ha.jar jasper.jar struts-taglib-1.3.5.jar catalina.jar jasper-jdt.jar struts-tiles-1.3.5.jar catalina-tribes.jar javassist.jar swarmcache-1.0rc2.jar
cglib-2.1.3.jar                jaxen-1.1-beta-7.jar         syndiag2.jar
checkstyle-all.jar jboss-cache.jar tomcat-coyote.jar
cleanimports.jar               jboss-common.jar             tomcat-dbcp.jar
commons-beanutils-1.7.0.jar jboss-jmx.jar tomcat-i18n-es.jar commons-chain-1.1.jar jboss-system.jar tomcat-i18n-fr.jar commons-collections-2.1.1.jar jdbc2_0-stdext.jar tomcat-i18n-ja.jar
commons-digester-1.6.jar       jgroups-2.2.8.jar            versioncheck.jar
commons-fileupload-1.1.1.jar jsp-api.jar version.properties
commons-io-1.1.jar             jstl.jar                     xerces-2.6.2.jar
commons-lang-2.2.jar           jta.jar                      xml-apis.jar
commons-logging-1.0.4.jar      junit-3.8.1.jar

- my webapp WEB-INF/lib contains:
log4j-1.2.11.jar

- Exception stack trace:

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.ExceptionInInitializerError
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:414)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
*root cause*
javax.servlet.ServletException: java.lang.ExceptionInInitializerError
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
org.apache.jsp.default_jsp._jspService(default_jsp.java:76)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
*root cause*
java.lang.ExceptionInInitializerError
org.apache.struts.taglib.logic.RedirectTag.<clinit>(RedirectTag.java:43)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:126)
org.apache.jsp.default_jsp._jspx_meth_logic_005fredirect_005f0(default_jsp.java:88)
org.apache.jsp.default_jsp._jspService(default_jsp.java:67)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
*root cause*
org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@193722c for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@193722c for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
org.apache.struts.util.MessageResources.<clinit>(MessageResources.java:54)
org.apache.struts.taglib.logic.RedirectTag.<clinit>(RedirectTag.java:43)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:126)
org.apache.jsp.default_jsp._jspx_meth_logic_005fredirect_005f0(default_jsp.java:88)
org.apache.jsp.default_jsp._jspService(default_jsp.java:67)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
*root cause*
org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@193722c for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category)
org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:413)
org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
org.apache.struts.util.MessageResources.<clinit>(MessageResources.java:54)
org.apache.struts.taglib.logic.RedirectTag.<clinit>(RedirectTag.java:43)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:126)
org.apache.jsp.default_jsp._jspx_meth_logic_005fredirect_005f0(default_jsp.java:88)
org.apache.jsp.default_jsp._jspService(default_jsp.java:67)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
*root cause*
java.lang.NoClassDefFoundError: org/apache/log4j/Category
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
java.lang.Class.getConstructor0(Class.java:2699)
java.lang.Class.getConstructor(Class.java:1657)
org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:410)
org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
org.apache.struts.util.MessageResources.<clinit>(MessageResources.java:54)
org.apache.struts.taglib.logic.RedirectTag.<clinit>(RedirectTag.java:43)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
java.lang.Class.newInstance0(Class.java:355)
java.lang.Class.newInstance(Class.java:308)
org.apache.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:126)
org.apache.jsp.default_jsp._jspx_meth_logic_005fredirect_005f0(default_jsp.java:88)
org.apache.jsp.default_jsp._jspService(default_jsp.java:67)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:390)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
*note* _The full stack trace of the root cause is available in the Apache Tomcat/6.0.7 logs._
------------------------------------------------------------------------
Apache Tomcat/6.0.7



Gaurav Kushwaha wrote:
Log4j loads "log4j.properties" from the classpath of the classloader that
loaded itself(log4j classes). In your case, log4j is loaded by tomcat
classloader, since it is present in $TOMCAT_HOME/lib. Classes and files
under WEB-INF/classes are not visible to that classloader, hence the
problem.

Regards,
Gaurav Singh Kushwaha
http://www.chakpak.com


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to