Extending webappclassloader

2005-12-05 Thread Niels Soeffers
Hello,

I have a problem extending the webappclassLoader.
In the company I work for, we are using eclipse as our IDE. We have multple
projects in eclipse and we would like to have an in-place deployment (so
tomcat works on the (bin) directories of our eclipse projects). That way we
don't have to copy all the modified classes over all the time to a
WEB-INF/classes folder.  I do realize that the WEB-INF/classes is the
correct place to put these classes. And in our continuous integration
environment we are using a war to deploy our application. However to ease
and speed up the development and test process we would like to have Tomcat
to look in our bin directories of eclipse to find our class files.

For this to work I have created an InPlaceDeployWebappClassLoader which
extends of the default WebappClassLoader. However if i add a Loader tag to
my server.xml configuration file. I always get the following exception:

SEVERE: Error loading WebappClassLoader
  delegate: false
  repositories:
/WEB-INF/classes/
-- Parent Classloader:
[EMAIL PROTECTED]
 org.apache.jasper.servlet.JspServlet
java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java:1338)
at org.apache.catalina.loader.WebappClassLoader.loadClass (
WebappClassLoader.java:1187)
at org.apache.catalina.core.StandardWrapper.loadServlet(
StandardWrapper.java:1027)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java
:925)
at org.apache.catalina.core.StandardContext.loadOnStartup (
StandardContext.java:3880)
at org.apache.catalina.core.StandardContext.start(StandardContext.java
:4141)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardHost.start (StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java
:442)
at org.apache.catalina.core.StandardService.start (StandardService.java
:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java
:680)
at org.apache.catalina.startup.Catalina.start(Catalina.java:536)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
5-dec-2005 14:55:24 org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /HotDeployOnTomcat threw load() exception
java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java :1338)
at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java:1187)
at org.apache.catalina.core.StandardWrapper.loadServlet(
StandardWrapper.java:1027)
at org.apache.catalina.core.StandardWrapper.load (StandardWrapper.java
:925)
at org.apache.catalina.core.StandardContext.loadOnStartup(
StandardContext.java:3880)
at org.apache.catalina.core.StandardContext.start(StandardContext.java
:4141)
at org.apache.catalina.core.ContainerBase.start (ContainerBase.java
:1012)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardEngine.start (StandardEngine.java
:442)
at org.apache.catalina.core.StandardService.start(StandardService.java
:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java
:680)
at org.apache.catalina.startup.Catalina.start (Catalina.java:536)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
at org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:413)
5-dec-2005 14:55:24 org.apache.commons.modeler.Registry registerComponent
SEVERE: Null component
Catalina:type=JspMonitor,name=jsp,WebModule=//localhost/HotDeployOnTomcat,J2EEApplication=none,J2EEServer=none

5-dec-2005 14:55:25 org.apache.coyote.http11.Http11BaseProtocol start

Even if I use the loader tag with the default loaderClass
(WebappClassLoader) I get this exception?

Can someone tell me where I have to put the class file of my custom
webappclassloader, currently it is in $CATALINA_HOME/server/classes

Thanks in advance,
Kind Regards,


Re: Extending webappclassloader

2005-12-05 Thread Jon Wingfield

Our custom loader sits in a jar in $CATALINA_HOME/server/lib
Our classloader uses different parent classloaders depending on which 
version of TC is running.

In 4.1 we just use the parent classloader as supplied in the constructor.
In 5.0.x we use the classloader of WebAppClassLoader as the parent. It's 
a while since the code was written but I seem to recall the creating 
parent is the bootstrap classloader which knows nothing of the server 
classloader, and hence can't find the servlet api classes.

We haven't tried it in 5.5.x yet.

HTH,

Jon

Niels Soeffers wrote:

Hello,

I have a problem extending the webappclassLoader.
In the company I work for, we are using eclipse as our IDE. We have multple
projects in eclipse and we would like to have an in-place deployment (so
tomcat works on the (bin) directories of our eclipse projects). That way we
don't have to copy all the modified classes over all the time to a
WEB-INF/classes folder.  I do realize that the WEB-INF/classes is the
correct place to put these classes. And in our continuous integration
environment we are using a war to deploy our application. However to ease
and speed up the development and test process we would like to have Tomcat
to look in our bin directories of eclipse to find our class files.

For this to work I have created an InPlaceDeployWebappClassLoader which
extends of the default WebappClassLoader. However if i add a Loader tag to
my server.xml configuration file. I always get the following exception:

SEVERE: Error loading WebappClassLoader
  delegate: false
  repositories:
/WEB-INF/classes/
-- Parent Classloader:
[EMAIL PROTECTED]
 org.apache.jasper.servlet.JspServlet
java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java:1338)
at org.apache.catalina.loader.WebappClassLoader.loadClass (
WebappClassLoader.java:1187)
at org.apache.catalina.core.StandardWrapper.loadServlet(
StandardWrapper.java:1027)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java
:925)
at org.apache.catalina.core.StandardContext.loadOnStartup (
StandardContext.java:3880)
at org.apache.catalina.core.StandardContext.start(StandardContext.java
:4141)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardHost.start (StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java
:442)
at org.apache.catalina.core.StandardService.start (StandardService.java
:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java
:680)
at org.apache.catalina.startup.Catalina.start(Catalina.java:536)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
5-dec-2005 14:55:24 org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /HotDeployOnTomcat threw load() exception
java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java :1338)
at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java:1187)
at org.apache.catalina.core.StandardWrapper.loadServlet(
StandardWrapper.java:1027)
at org.apache.catalina.core.StandardWrapper.load (StandardWrapper.java
:925)
at org.apache.catalina.core.StandardContext.loadOnStartup(
StandardContext.java:3880)
at org.apache.catalina.core.StandardContext.start(StandardContext.java
:4141)
at org.apache.catalina.core.ContainerBase.start (ContainerBase.java
:1012)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at org.apache.catalina.core.StandardEngine.start (StandardEngine.java
:442)
at org.apache.catalina.core.StandardService.start(StandardService.java
:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java
:680)
at org.apache.catalina.startup.Catalina.start (Catalina.java:536)
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:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:275)
at org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:413)
5-dec-2005