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 }