Estoy tratando de definir un ClassLoader personalizado.ContextClassLoader no se conecta
public class ExampleLoader extends ClassLoader
{
public Class<?> findClass(String name) throws ClassNotFoundException
{
System.out.println("This never gets printed");
return super.findClass(name);
}
public Class<?> loadClass(String name, boolean b)
throws ClassNotFoundException
{
System.out.println("This never gets printed");
return super.loadClass(name, b);
}
}
Y por supuesto mi código para probarlo:
public class Tester
{
public static void main(String[] args)
{
Thread t = new FooThread();
t.setContextClassLoader(new ExampleLoader());
t.start();
}
}
class FooThread extends Thread
{
public void run()
{
new RandomClass();
}
}
El problema es que mis líneas no se imprimen. Claramente me falta algo.
Por curiosidad, ¿cómo aplicaciones como Tomcat hacer este trabajo? Según tengo entendido, todas las tomas webapps de tomcat se ejecutan desde un jvm compartido, pero cuando usan clases, las definiciones de clase provienen de sus respectivas guerras. ¿Alguna idea de cómo logran esto? – Jim
Usan 'ClassLoader # loadClass()'. La instancia de 'ClassLoader' se almacena y pasa en el hilo de esta manera. Un buen punto de partida para buscar en el código fuente es 'org.apache.catalina.core.DefaultInstanceManager'. – BalusC