View Javadoc

1   package argos.deploy;
2   
3   import java.net.URL;
4   import java.util.List;
5   
6   public class ChainClassLoader extends ClassLoader {
7   	private List<OpenClassLoader> loaders;
8   	
9   	public ChainClassLoader(List<OpenClassLoader> loaders) {
10  		super();
11  		this.loaders = loaders;
12  	}
13  
14  	@Override
15  	protected Class<?> findClass(String name) throws ClassNotFoundException {
16  		for(OpenClassLoader l : loaders) {
17  			try {
18  				return l.findClass(name);
19  			}
20  			catch(ClassNotFoundException ignore) {}
21  		}
22  		throw new ClassNotFoundException(name);
23  	}
24  
25  	@Override
26  	protected URL findResource(String name) {
27  		URL url = null;
28  		for(OpenClassLoader l : loaders) {
29  			url = l.findResource(name);
30  			if(url != null) {
31  				return url;
32  			}
33  		}
34  		return url;
35  	}
36  
37  	@Override
38  	protected Package getPackage(String name) {
39  		Package pkg = null;
40  		for(OpenClassLoader l : loaders) {
41  			pkg = l.getPackage(name);
42  			if(pkg != null) {
43  				return pkg;
44  			}
45  		}
46  		return pkg;
47  	}
48  
49  	@Override
50  	protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
51  		for(OpenClassLoader l : loaders) {
52  			try {
53  				return l.loadClass(name, resolve);
54  			}
55  			catch(ClassNotFoundException ignore) {}
56  		}
57  		throw new ClassNotFoundException(name);
58  	}
59  
60  	@Override
61  	public Class<?> loadClass(String name) throws ClassNotFoundException {
62  		return loadClass(name, true);
63  	}
64  }