RE: Custom class loader

2016-09-20 Thread Erwan Cancouet

Erwan,

On 9/19/16 11:36 AM, Erwan Cancouet wrote:
> Hi,
>
> i'm using Tomcat 7.0.70 on ubuntu 15.10.
>
> I have created a SampleClassLoader :
>
> package com.axway.tnt.compliance;
>
> import org.apache.catalina.loader.WebappClassLoader;
>
> import java.io.File; import java.io.IOException;
>
> public class SampleClassLoader extends WebappClassLoader { public
> SampleClassLoader() { super(); }
>
> public SampleClassLoader(final ClassLoader parent) {
> super(parent); }
>
> @Override protected boolean validateJarFile(final File file) throws
> IOException { System.out.println("---Load: " +
> file.getName()); return super.validateJarFile(file); } }
>
> I have put it in a jar in ../apache-tomcat/lib
>
> I have a webapp : apache-tomcat/lwebapps/sample
>
> I have modified  apache-tomcat/lwebapps/sample/meta-inf/context.xml
> to use this classloader :
>
>
> 
>
> 
> WEB-INF/web.xml
>
>   delegate="true"
> loaderClass="com.axway.tnt.compliance.SampleClassLoader"/>
>
> 
>
>
> And it's working fine.
>
> But i don't want to modify my tomcat, i want to put my classloader
> in my webapp/lib and in this case i have :
>
>
> java.lang.ClassNotFoundException:
> com.axway.tnt.compliance.SampleClassLoader at
> java.net.URLClassLoader.findClass(URLClassLoader.java:381) at
> java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
> java.lang.ClassLoader.loadClass(ClassLoader.java:357) at
> org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader
.java:723)
>
>
at
org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:
582)
> Caused by: org.apache.catalina.LifecycleException: Failed to start
> component [WebappLoader[/sample]] at
> org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.jav
a:632)
>
>
Caused by: java.lang.ClassNotFoundException:
com.axway.tnt.compliance.SampleClassLoader
> at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at
> java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
> java.lang.ClassLoader.loadClass(ClassLoader.java:357) at
> org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader
.java:723)
>
>
at
org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:
582)
>
>
> Any idea to do that ?

Sorry, this is not possible, because otherwise your SampleClassLoader
would have to load itself. You will have to package your custom
ClassLoader and install it into Tomcat's lib/ directory.

- -chris


Hi,

thanks for the response even if it is'nt the one i was expected :-).


Erwan



Custom class loader

2016-09-19 Thread Erwan Cancouet
Hi,

i'm using Tomcat 7.0.70 on ubuntu 15.10.

I have created a SampleClassLoader :

package com.axway.tnt.compliance;

import org.apache.catalina.loader.WebappClassLoader;

import java.io.File;
import java.io.IOException;

public class SampleClassLoader extends WebappClassLoader
{
public SampleClassLoader() {
super();
}

public SampleClassLoader(final ClassLoader parent) {
super(parent);
}

@Override
protected boolean validateJarFile(final File file) throws IOException {
System.out.println("---Load: " + file.getName());
return super.validateJarFile(file);
}
}

I have put it in a jar in ../apache-tomcat/lib

I have a webapp : apache-tomcat/lwebapps/sample

I have modified  apache-tomcat/lwebapps/sample/meta-inf/context.xml to use this 
classloader :





WEB-INF/web.xml







And it's working fine.

But i don't want to modify my tomcat, i want to put my classloader in my 
webapp/lib and in this case i have :


java.lang.ClassNotFoundException: com.axway.tnt.compliance.SampleClassLoader
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at 
org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:723)
at 
org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:582)
Caused by: org.apache.catalina.LifecycleException: Failed to start component 
[WebappLoader[/sample]]
at 
org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:632)
Caused by: java.lang.ClassNotFoundException: 
com.axway.tnt.compliance.SampleClassLoader
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at 
org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoader.java:723)
at 
org.apache.catalina.loader.WebappLoader.startInternal(WebappLoader.java:582)


Any idea to do that ?

Thanks for your time and answers.