rendered paste bodypackage org.test;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
public class MyMain {
protected static String root = "C:\\apps\\aop\\jboss-aop_1.5.2.GA\\lib\\";
protected static String[] aopJars = new String[] {"jboss-aop.jar", "jboss-common.jar", "qdox.jar",
"concurrent.jar", "trove.jar", "javassist.jar",
"jboss-aspect-library.jar", "bsh-1.3.0.jar"};
private static ArrayList clList = new ArrayList();
private static ParentClassLoader loader;
public static void main(String[] args) {
for( int i = 0; i < 200; i++ ) {
Object o1 = getManager();
System.out.println("--- o" + i + " is " + o1);
}
}
private static ParentClassLoader getParentClassLoader() {
if( loader == null ) {
URL[] urls = getURLs();
loader = new ParentClassLoader(urls);
}
return loader;
}
private static URL[] getURLs() {
ArrayList list = new ArrayList();
for( int i = 0; i < aopJars.length; i++ ) {
File f = new File(root + aopJars[i]);
try {
list.add(f.toURL());
} catch( Exception e ) {
e.printStackTrace();
}
}
URL[] urls = (URL[]) list.toArray(new URL[list.size()]);
return urls;
}
private static Object getManager() {
ParentClassLoader pcl = getParentClassLoader();
URLClassLoader childLoader = new URLClassLoader(getURLs(), pcl);
clList.add(childLoader);
try {
Class c = childLoader.loadClass("org.jboss.aop.AspectManager");
System.out.println(" c is " + c);
Method m = c.getMethod("instance", new Class[0]);
System.out.println("m: " + m);
Object result = m.invoke(null, null);
System.out.println("result1: " + result);
Object result2 = m.invoke(null, null);
System.out.println("result2: " + result2);
return result2;
} catch( Exception e ) {
e.printStackTrace();
}
return null;
}
protected static class ParentClassLoader extends URLClassLoader {
public ParentClassLoader(URL[] urls) {
super(urls);
}
protected Class<?> findClass(String name) throws ClassNotFoundException {
if( name.equals("org.jboss.aop.AspectManager") ) throw new ClassNotFoundException(name);
return super.findClass(name);
}
}
}