diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2016-04-27 09:52:21 -0400 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2016-04-28 13:34:01 -0400 |
commit | 7f9380157a5cf95e767f74d6f7c52da24ea8f51f (patch) | |
tree | 4b488257712028eafa9d4e693cc16c10eff3b00c /nailgun_launcher/CBTUrlClassLoader.java | |
parent | 1de728fc751669fb08b5263d5ba4df11b64afda0 (diff) | |
download | cbt-7f9380157a5cf95e767f74d6f7c52da24ea8f51f.tar.gz cbt-7f9380157a5cf95e767f74d6f7c52da24ea8f51f.tar.bz2 cbt-7f9380157a5cf95e767f74d6f7c52da24ea8f51f.zip |
add caching to CBTUrlClassLoader (so we can eventually wrap the system class loader into it to not produce multiple exceptions in a classloader tree, where a class is not in the systemclassloader)
Diffstat (limited to 'nailgun_launcher/CBTUrlClassLoader.java')
-rw-r--r-- | nailgun_launcher/CBTUrlClassLoader.java | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/nailgun_launcher/CBTUrlClassLoader.java b/nailgun_launcher/CBTUrlClassLoader.java index 0ba8a61..9c41978 100644 --- a/nailgun_launcher/CBTUrlClassLoader.java +++ b/nailgun_launcher/CBTUrlClassLoader.java @@ -15,12 +15,31 @@ class CbtURLClassLoader extends java.net.URLClassLoader{ + "\n)" ); } + ClassLoaderCache2<Class> cache = new ClassLoaderCache2<Class>( + new ConcurrentHashMap<String, Object>(), + new ConcurrentHashMap<Object, Class>() + ); public Class loadClass(String name) throws ClassNotFoundException{ Class _class = super.loadClass(name); if(_class == null) throw new ClassNotFoundException(name); else return _class; + } + public Class loadClass(String name, Boolean resolve) throws ClassNotFoundException{ //System.out.println("loadClass("+name+") on \n"+this); - return super.loadClass(name); + if(!cache.contains(name)) + try{ + cache.put(super.loadClass(name, resolve), name); + } catch (ClassNotFoundException e){ + cache.put(Object.class, name); + } + Class _class = cache.get(name); + if(_class == Object.class){ + if( name == "java.lang.Object" ) + return Object.class; + else return null; + } else { + return _class; + } } void assertExist(URL[] urls){ for(URL url: urls){ |