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 }