I would like to extend WebappLoader to use libraries that are placed out
of my webapp dir, but when I try to start the server, I obtain the following
error:

Nov 30, 2006 11:38:07 AM es.tid.psstlatam.tomcat.CustomWebappLoader start
INFO: CustomWebappLoader start:
/etc/opt/psbatlatam/ar/pmg/pod/;/opt/install/psbatlatam/apache-
tomcat-5.5.20/common/lib/servlet-api.
jar
Nov 30, 2006 11:38:07 AM es.tid.psstlatam.tomcat.CustomWebappLoader start
INFO: CustomWebappLoader start -> dir fileName:
/etc/opt/psbatlatam/ar/pmg/pod/
Nov 30, 2006 11:38:07 AM es.tid.psstlatam.tomcat.CustomWebappLoader start
INFO: CustomWebappLoader start -> dir fileName:
/opt/install/psbatlatam/apache-tomcat-5.5.20/common/lib/servlet-api.jar
Nov 30, 2006 11:38:08 AM org.apache.catalina.startup.ContextConfig start
FINE: ContextConfig: Processing START
Nov 30, 2006 11:38:08 AM 
org.apache.catalina.startup.ContextConfigprocessDefaultWebConfig
FINE: Processing context [/pod] web configuration resource
file:///opt/install/psbatlatam/apache-tomcat-5.5.20/conf/web.xml
Nov 30, 2006 11:38:11 AM 
org.apache.catalina.startup.ContextConfigdefaultWebConfig
FINE: Processed default web.xml /opt/install/psbatlatam/apache-
tomcat-5.5.20/conf/web.xml 2805
Nov 30, 2006 11:38:11 AM 
org.apache.catalina.startup.ContextConfigapplicationWebConfig
FINE: Parsing application web.xml file at
jndi:/localhost/pod/WEB-INF/web.xml
Nov 30, 2006 11:38:11 AM org.apache.catalina.startup.ContextConfig start
FINE: Pipeline Configuration:
Nov 30, 2006 11:38:11 AM org.apache.catalina.startup.ContextConfig start
FINE:   org.apache.catalina.core.StandardContextValve/1.0
Nov 30, 2006 11:38:11 AM org.apache.catalina.startup.ContextConfig start
FINE: ======================
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
Caused by: java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(
WebappClassLoader.java:1815)
        at org.apache.catalina.loader.WebappClassLoader.findClass(
WebappClassLoader.java:869)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java:1322)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(
WebappClassLoader.java:1201)
        at org.apache.catalina.core.StandardWrapper.loadServlet(
StandardWrapper.java:1034)
        at org.apache.catalina.core.StandardWrapper.load (
StandardWrapper.java:932)
        at org.apache.catalina.core.StandardContext.loadOnStartup(
StandardContext.java:3951)
        at org.apache.catalina.core.StandardContext.start(
StandardContext.java:4225)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java
:1013)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java
:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
        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:709)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
        ... 6 more


Tomcat don't find HttpServlet.class, but It seems that my
CustomWebappLoader add this jar (/opt/install/psbatlatam/apache-
tomcat-5.5.20/common/lib/servlet-api.jar) to the repository. I have
implemented a CustomWebappLoader as follow:

public class CustomWebappLoader extends WebappLoader {


    private String classPath;
    protected static Log log = LogFactory.getLog( CustomWebappLoader.class);


    public String getClassPath() {
        return classPath;
    }

    //  Called by tomcat to set the property
    public void setClassPath(String cp) {
        classPath=cp;
    }

    public CustomWebappLoader() {
        super();
        log.info("CustomWebappLoader constructor");
    }

    /*public void init() {
        super.init();
    }*/

    public CustomWebappLoader(ClassLoader parent) {
        super(parent);
        log.info("CustomWebappLoader constructor parent: " +
parent.getClass().getName());
    }

    public void addRepository(String repository) {
        log.debug ("[CL] AddRepository called with argument:
"+repository);
    }

    public void start() throws LifecycleException {

        log.info("CustomWebappLoader start: " + classPath);
        if(classPath==null || classPath.length()==0) return;

        String [] classPathItems=classPath.split(";");
        for(int i=0; i<classPathItems.length; i++) {
            // Check if the item specifies a set of jar files
            String classPathItem=classPathItems[i];
            int index=classPathItem.indexOf("/*.jar");
            if(index!=-1) {
                String jarDir=classPathItem.substring(0, index+1);
                log.debug("[CCL] jardir: "+jarDir);
                File dir=new File(jarDir);
                File[] jars=dir.listFiles();
                for(int j=0; j<jars.length; j++) {
                    String jarFileName=jars[j].getName();
                    if(jarFileName.endsWith(".jar")) {
                        log.info("CustomWebappLoader start -> jar
fileName: " + jarFileName);
                        super.addRepository ("file:/"+jarDir+jarFileName);
                    }
                }
            } else {
                log.info("CustomWebappLoader start -> dir fileName: " +
classPathItem);
                super.addRepository("file:/"+classPathItem);
            }
        }

        super.start();
    }
}

In the server.xml I have added:

 <Context path="/pod"
docBase="/opt/psbatlatam/ar/Radius_disconnection_web/" debug="0"
privileged="true" reloadable="true">

              <!-- classPath contains semicolon separated list of
directories containing
              classes or path/*.jar for getting all the jars in the
specified path -->

              <Loader className="
es.tid.psstlatam.tomcat.CustomWebappLoader" delegate="false"
classPath="/etc/opt/psbatlatam/ar/pmg/
pod/;/opt/install/psbatlatam/apache-tomcat-5.5.20/common/lib/servlet-
api.jar"/>

</Context>

Can anyone help me, please??
Thanks, Joaquin

Reply via email to