tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <robert.pur...@nhs.net>
Subject Tomcat cannot find infrequently used classes
Date Wed, 23 Jul 2008 08:33:47 GMT
I have a very large web application, running on three tomcats, which has
been running for many years.

There was a change made to the web application overnight, to add the
following jar files to the webapp/WEB-INF/lib directory:

avalon-framework-cvs-20020806.jar
batik.jar
crimson_1_1_3.jar
icu4j_2_6.jar
jacob.jar
jaxen-full.jar
saxon_6_5_3.jar
saxpath.jar

Today the web application started exhibiting behaviour I have never seen
before. Some classes, in unrelated areas of the application are getting lost
by Tomcat. It seems to be classes that are not used often, so my theory is
that the class (a servlet, or another class used by the servlet or JSP) is
loaded, and used, then a period of time goes by during which it is not used.
The next time an attempt to use the same class then Tomcat gives this type
of response:

Error:
javax.servlet.ServletException: Wrapper cannot find servlet class XYZ or a
class it depends on
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:10
76)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:791)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:127)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:174)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:108)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java
:895)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:685)
at java.lang.Thread.run(Thread.java:595)


Root Stack Trace:
java.lang.ClassNotFoundException: XYZ
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1359)
at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.jav
a:1205)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:10
68)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:791)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:127)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:174)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127
)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117
)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:108)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java
:895)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:685)
at java.lang.Thread.run(Thread.java:595)

-------------

Then the next time the page is requested the response is a 404 error.

The three load-balanced tomcat servers all have the same setup, and by
getting one of the other servers you would sometimes get the page that was
reported as missing.

It seems that Tomcat is unloading the classes, but having read up about
unloading classes it doesn't seem possible unless the class loader that
loaded the class is also unloaded. The reloadble option in server.xml is NOT
set to true.

Any ideas? 

Robert Purvis 
Principal Technical Specialist 


Systems and Service Delivery 
NHS Connecting for Health 
01392 206691 
robert.purvis@nhs.net 
www.connectingforhealth.nhs.uk 


***********************************************************************
This  message  may  contain  confidential and  privileged  information.
If you  are not the  intended recipient  you should not  disclose, copy
or distribute information in this e-mail or take any action in reliance
on its contents.  To do so is strictly  prohibited and may be unlawful.
Please  inform  the  sender that  this  message has  gone astray before
deleting it.  Thank you.

2008 marks the 60th anniversary of the NHS.  It's an opportunity to pay
tribute to the NHS staff and volunteers who help shape the service, and
celebrate their achievements.

If you work for the NHS  and  would like  an NHSmail  email account, go
to: www.connectingforhealth.nhs.uk/nhsmail
***********************************************************************


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


Mime
View raw message