tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joaquín López" <joaqui...@gmail.com>
Subject Re: Extending WebappLoader doesn't load internal tomcat libs
Date Thu, 30 Nov 2006 10:57:09 GMT
>
> 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
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message