You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "A. Rothman" <am...@amichais.net> on 2009/06/24 21:47:28 UTC

Re: Bizarre NoClassDefFoundError

You can assume it's "placed in a jar file under WEB-INF/lib" :-)


The thing is, I have a feeling it has nothing to do with the actual 
class not being found. Because it finds it when another page loads 
first, or when the jsp's generated class file is deleted and recreated, 
and nothing in the class/jar/jsp locations changes in the meanwhile. If 
it really couldn't find it, it wouldn't find it in any of the scenarios 
where it does work, no?


Further, if tomcat follows the javadocs for NoClassDefFoundError, it 
means "The searched-for class definition existed when the currently 
executing class was compiled, but the definition can no longer be 
found." So I think it finds it with no problem, compiles the jsp class 
(the index_jsp.class file is indeed created), but then, and only 
sometimes, it goes missing again moments later during runtime.


Unfortunately I don't know enough about the tomcat compiling and 
classloading mechanisms to understand what's really going on here...


Amichai



Martin Gainty wrote:

> where is the code web.SessionBean.java compiled to?
>
> can we assume you compiled it to
>   
> /WEB-INF/classes/web/SessionBean.class
>
> ?
> Martin Gainty
> ______________________________________________
> Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
>  
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene 
> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede 
> unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. 
> Diese Nachricht dient lediglich dem Austausch von Informationen und 
> entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten 
> Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den 
> Inhalt uebernehmen.
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>
> > Date: Wed, 24 Jun 2009 22:03:13 +0300
> > From: amichai2@amichais.net
> > To: users@tomcat.apache.org
> > Subject: Bizarre NoClassDefFoundError
> >
> > Hi everyone!
> >
> >
> > I'm running a stock tomcat 6 (6.0.18-0ubuntu6.1) on kubuntu Jaunty 
> amd64
> > and Sun JDK (1.6.0_13-b03) , with a website consisting of several jsps,
> > some of which make use of a POJO session bean, placed in a jar file
> > under WEB-INF/lib.
> >
> >
> > I'm encountering a very strange error, in the form of a
> > NoClassDefFoundError (pasted fully below). Related scenario:
> >
> >
> > 1. It happens only on one of the pages, which happens to be the main
> > index.jsp.
> > 2. It happens only when this page is the first to be accessed after a
> > restart. If any other page is accessed before it, everything is ok.
> > 3. After the first error shows up, hitting refresh causes the error to
> > repeat, however the stack trace is slightly different: the "Caused by"
> > section disappears (and the top part remains the same).
> > 4. After the error shows up, if the index_jsp.class file under tomcat's
> > work directory is deleted and the page refreshed - everything is ok.
> > 5. It happens consistently after every restart (either reboot, or
> > /etc/init.d/tomcat6 restart).
> > 6. It happens consistently also after deleting the entire tomcat work
> > folder for this hostname.
> > 7. Nothing else changes between the tests afaik - jsps, configuration
> > etc. remain untouched.
> >
> > Any ideas?
> >
> >
> >
> > The full stacktrace:
> >
> >
> > java.lang.NoClassDefFoundError: web/SessionBean
> >
> > at org.apache.jsp.index_jsp._jspService(index_jsp.java:69)
> > at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> > at
> > 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
> > at
> > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
> > at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> > 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> > at
> > 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > at java.lang.reflect.Method.invoke(Method.java:597)
> > at
> > org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
> > at java.security.AccessController.doPrivileged(Native Method)
> > at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
> > at
> > org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
> > at
> > 
> org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
> > at
> > 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:283)
> > at
> > 
> org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:56)
> > at
> > 
> org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
> > at java.security.AccessController.doPrivileged(Native Method)
> > at
> > 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185)
> > at
> > 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> > at
> > 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> > at
> > 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> > at
> > 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> > at
> > 
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
> > at
> > 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> > at
> > 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> > at
> > 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
> > at
> > 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> > at
> > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> > at java.lang.Thread.run(Thread.java:619)
> > Caused by: java.lang.ClassNotFoundException: web.SessionBean
> > at
> > 
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
> > at
> > 
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
> > at
> > org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
> > at
> > org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
> > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
> > ... 32 more
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> > For additional commands, e-mail: users-help@tomcat.apache.org
> >
>
> ------------------------------------------------------------------------
> Lauren found her dream laptop. Find the PC that’s right for you. 
> <http://www.microsoft.com/windows/choosepc/?ocid=ftp_val_wl_290>

Re: Bizarre NoClassDefFoundError

Posted by "A. Rothman" <am...@amichais.net>.
(Martin - I hope it's ok with u that I'm replying back to the list - u 
seem to be sending me personal replies)


The bean class is in a jar under WEB-INF/lib. At no point is anything 
being changed there, and it has no external dependencies.


When I was talking about compiling, deleting, etc. I was referring only 
to the jsp's - index.jsp being generated into index_jsp.java and 
compiled to index_jsp.class under work/Catalina/Host. The latter is the 
one that gets compiled ok (i.e. it finds the bean), sometimes works and 
sometimes not at runtime (as described in the original post), and when 
it doesn't work, if index_jsp.class is deleted and the browser refreshed 
(without tomcat restart!) - it recompiles into a new index_jsp.class and 
this time it does work during runtime and the page displays properly.


I'm not sure if I understand u correctly - r u implying that a session 
bean must be a separate class under WEB-INF/classes and not in a jar 
under WEB-INF/lib?


Amichai



Martin Gainty wrote:

> the class needs to be compiled into one of 2 places:
>
> webapp specific
> WEB-INF/lib/*.jar or WEB-INF/classes
>
> system
> $CATALINA_HOME/common/lib
>
> jsp's are compiled to $CATALINA_HOME/work/Container/Host
>
> the jsp is jasper-compiled when first referenced e.g.
> http://localhost:8080/webapp/index.jsp
>
> beans should be compiled to /WEB-INF/classes.. here is an example
> <-- in jsp form -->
> <%@ taglib prefix="s" uri="/struts-tags" %>
> <s:bean name="org.apache.struts2.example.counter.SimpleCounter" var="counter">
>   <s:param name="foo" value="BAR" />
>   The value of foot is : <s:property value="foo"/>, when inside the bean tag <br />
> </s:bean>
> HTH
> Martin Gainty
> ______________________________________________
> Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
>  
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene 
> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede 
> unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. 
> Diese Nachricht dient lediglich dem Austausch von Informationen und 
> entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten 
> Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den 
> Inhalt uebernehmen.
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.
>
>
>
>
>
> > Date: Wed, 24 Jun 2009 22:47:28 +0300
> > From: amichai2@amichais.net
> > To: users@tomcat.apache.org
> > Subject: Re: Bizarre NoClassDefFoundError
> >
> > You can assume it's "placed in a jar file under WEB-INF/lib" :-)
> >
> >
> > The thing is, I have a feeling it has nothing to do with the actual
> > class not being found. Because it finds it when another page loads
> > first, or when the jsp's generated class file is deleted and recreated,
> > and nothing in the class/jar/jsp locations changes in the meanwhile. If
> > it really couldn't find it, it wouldn't find it in any of the scenarios
> > where it does work, no?
> >
> >
> > Further, if tomcat follows the javadocs for NoClassDefFoundError, it
> > means "The searched-for class definition existed when the currently
> > executing class was compiled, but the definition can no longer be
> > found." So I think it finds it with no problem, compiles the jsp class
> > (the index_jsp.class file is indeed created), but then, and only
> > sometimes, it goes missing again moments later during runtime.
> >
> >
> > Unfortunately I don't know enough about the tomcat compiling and
> > classloading mechanisms to understand what's really going on here...
> >
> >
> > Amichai
> >
> >
> >
> > Martin Gainty wrote:
> >
> > > where is the code web.SessionBean.java compiled to?
> > >
> > > can we assume you compiled it to
> > >
> > > /WEB-INF/classes/web/SessionBean.class
> > >
> > > ?
> > > Martin Gainty
> > > ______________________________________________
> > > Verzicht und Vertraulichkeitanmerkung/Note de déni et de 
> confidentialité
> > >
> > > Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene
> > > Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede
> > > unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig.
> > > Diese Nachricht dient lediglich dem Austausch von Informationen und
> > > entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten
> > > Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den
> > > Inhalt uebernehmen.
> > > Ce message est confidentiel et peut être privilégié. Si vous 
> n'êtes pas le destinataire prévu, nous te demandons avec bonté que 
> pour satisfaire informez l'expéditeur. N'importe quelle diffusion non 
> autorisée ou la copie de ceci est interdite. Ce message sert à 
> l'information seulement et n'aura pas n'importe quel effet légalement 
> obligatoire. Étant donné que les email peuvent facilement être sujets 
> à la manipulation, nous ne pouvons accepter aucune responsabilité pour 
> le contenu fourni.
> > >
> > >
> > >
> > >
> > >
> > > > Date: Wed, 24 Jun 2009 22:03:13 +0300
> > > > From: amichai2@amichais.net
> > > > To: users@tomcat.apache.org
> > > > Subject: Bizarre NoClassDefFoundError
> > > >
> > > > Hi everyone!
> > > >
> > > >
> > > > I'm running a stock tomcat 6 (6.0.18-0ubuntu6.1) on kubuntu Jaunty
> > > amd64
> > > > and Sun JDK (1.6.0_13-b03) , with a website consisting of 
> several jsps,
> > > > some of which make use of a POJO session bean, placed in a jar file
> > > > under WEB-INF/lib.
> > > >
> > > >
> > > > I'm encountering a very strange error, in the form of a
> > > > NoClassDefFoundError (pasted fully below). Related scenario:
> > > >
> > > >
> > > > 1. It happens only on one of the pages, which happens to be the main
> > > > index.jsp.
> > > > 2. It happens only when this page is the first to be accessed 
> after a
> > > > restart. If any other page is accessed before it, everything is ok.
> > > > 3. After the first error shows up, hitting refresh causes the 
> error to
> > > > repeat, however the stack trace is slightly different: the 
> "Caused by"
> > > > section disappears (and the top part remains the same).
> > > > 4. After the error shows up, if the index_jsp.class file under 
> tomcat's
> > > > work directory is deleted and the page refreshed - everything is ok.
> > > > 5. It happens consistently after every restart (either reboot, or
> > > > /etc/init.d/tomcat6 restart).
> > > > 6. It happens consistently also after deleting the entire tomcat 
> work
> > > > folder for this hostname.
> > > > 7. Nothing else changes between the tests afaik - jsps, 
> configuration
> > > > etc. remain untouched.
> > > >
> > > > Any ideas?
> > > >
> > > >
> > > >
> > > > The full stacktrace:
> > > >
> > > >
> > > > java.lang.NoClassDefFoundError: web/SessionBean
> > > >
> > > > at org.apache.jsp.index_jsp._jspService(index_jsp.java:69)
> > > > at 
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> > > > at
> > > >
> > > 
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
> > > > at
> > > > 
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
> > > > at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
> > > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > > > at
> > > >
> > > 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> > > > at
> > > >
> > > 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > > > at java.lang.reflect.Method.invoke(Method.java:597)
> > > > at
> > > > 
> org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
> > > > at java.security.AccessController.doPrivileged(Native Method)
> > > > at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
> > > > at
> > > > 
> org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
> > > > at
> > > >
> > > 
> org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:283)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:56)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
> > > > at java.security.AccessController.doPrivileged(Native Method)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> > > > at
> > > >
> > > 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> > > > at
> > > >
> > > 
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
> > > > at
> > > >
> > > 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> > > > at
> > > >
> > > 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> > > > at
> > > >
> > > 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
> > > > at
> > > >
> > > 
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> > > > at
> > > > 
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> > > > at java.lang.Thread.run(Thread.java:619)
> > > > Caused by: java.lang.ClassNotFoundException: web.SessionBean
> > > > at
> > > >
> > > 
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
> > > > at
> > > >
> > > 
> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
> > > > at
> > > > 
> org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
> > > > at
> > > > 
> org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
> > > > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
> > > > ... 32 more
> > > >
> > > >
> > > > 
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> > > > For additional commands, e-mail: users-help@tomcat.apache.org
> > > >
> > >
> > > 
> ------------------------------------------------------------------------
> > > Lauren found her dream laptop. Find the PC that’s right for you.
> > > <http://www.microsoft.com/windows/choosepc/?ocid=ftp_val_wl_290>
>
> ------------------------------------------------------------------------
> Microsoft brings you a new way to search the web. Try Bing™ now 
> <http://www.bing.com?form=MFEHPG&publ=WLHMTAG&crea=TEXT_MFEHPG_Core_tagline_try%20bing_1x1>