>
> 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
>