(trying to understand) Tomcat class loading mechanism

2003-06-10 Thread Manav Gupta
Hi,
 
I'm trying to understand the tomcat class loading mechanism and have read
through the Class Loader HOW-TO (
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html ).
 

How does one make additional jars available to tomcat? I understand one can
add them to WEB-INF/lib,but there are sometimes that approach does not work.
Here's a scenario:
I'm using tomcat 4.1.24 with jdk 1.4.1_02. One of the required libraries for
my web app is oc4j.jar. If I put that oc4j.jar into the WEB-INF/lib, tomcat
throws the following error on startup:
=
Starting service Tomcat-Standalone
Apache Tomcat/4.1.24
WebappClassLoader:
validateJarFile(D:\jakarta-tomcat-4.1.24\bin\..\webapps\graphics\WEB-INF\lib
\oc4j.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending
class: javax/servlet/Servlet.class
=
Upon checking, I found oc4j.jar has javax.servlet.Servlet and I suspect it
does not adhere to Servlet Spec 2.3 (but probably something earlier than
that). 
 
If I do not put oc4j.jar in WEB-INF/lib, I get the following error:
 
2003-06-10 13:28:43 StandardWrapperValve[jsp]: Servlet.service() for servlet
jsp threw exception
javax.servlet.ServletException:
javax.servlet.jsp.tagext.TagInfo.init(Ljava/lang/String;Ljava/lang/String;
Ljava/lang/String;Ljava/lang/String;Ljavax/servlet/jsp/tagext/TagLibraryInfo
;Ljavax/servlet/jsp/tagext/TagExtraInfo;[Ljavax/servlet/jsp/tagext/TagAttrib
uteInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljavax/servle
t/jsp/tagext/TagVariableInfo;)V
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:249)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:336)
 at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application
FilterChain.java:247)
 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:193)
 at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:256)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:643)
 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:191)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:643)
 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
 at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180
)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:643)
 at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.
java:171)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:641)
 at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172
)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:641)
 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:174)
 at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok
eNext(StandardPipeline.java:643)
 at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
 at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
 at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
 at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne
ction(Http11Protocol.java:392)
 at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
 at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav
a:619)
 at java.lang.Thread.run(Thread.java:536)
Root cause is; java.lang.NoSuchMethodError:
javax.servlet.jsp.tagext.TagInfo.init(Ljava/lang/String;Ljava/lang/String;
Ljava/lang/String;Ljava/lang/String;Ljavax/servlet/jsp/tagext/TagLibraryInfo
;Ljavax/servlet/jsp/tagext/TagExtraInfo;[Ljavax/servlet/jsp/tagext/TagAttrib
uteInfo;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljavax/servle
t/jsp/tagext/TagVariableInfo;)V
 at
org.apache.jasper.compiler.TagLibraryInfoImpl.createTagInfo(TagLibraryInfoIm
pl.java:385)
(and a whole lot of lines)
 
This above error stems from a particular tag library that I have written,
and when tomcat tries to generate the java source from the jsp page, it
fails (the translated file inside

Re: (trying to understand) Tomcat class loading mechanism

2003-06-10 Thread Robert Wray
At 03:02 PM 10/06/2003 +0100, you wrote:
Hi,

I'm trying to understand the tomcat class loading mechanism and have read
through the Class Loader HOW-TO (
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html ).
How does one make additional jars available to tomcat? I understand one can
add them to WEB-INF/lib,but there are sometimes that approach does not work.
Here's a scenario:
I'm using tomcat 4.1.24 with jdk 1.4.1_02. One of the required libraries for
my web app is oc4j.jar. If I put that oc4j.jar into the WEB-INF/lib, tomcat
throws the following error on startup:
=
Starting service Tomcat-Standalone
Apache Tomcat/4.1.24
WebappClassLoader:
validateJarFile(D:\jakarta-tomcat-4.1.24\bin\..\webapps\graphics\WEB-INF\lib
\oc4j.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending
class: javax/servlet/Servlet.class
=
Upon checking, I found oc4j.jar has javax.servlet.Servlet and I suspect it
does not adhere to Servlet Spec 2.3 (but probably something earlier than
that).
I would think javax.servlet.Servlet is being used by tomcat, why is it 
included in the jar file?
Try extracting the jar file, deleting all the unnecessary files (those that 
are already included in another base jar that tomcat uses), and recompile 
it into a new jar file. Replace the old oc4j.jar with the new one.

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]