All pastes #352070 Raw Edit

Mine

public text v1 · immutable
·published 2007-02-12 15:56 UTC
rendered paste body
package 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);
	    }		
	}
}