X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fcodegen%2Futil%2FJavassistUtils.xtend;h=74efffafc6f590ed0a1804abc22409c219a877d3;hb=d2f7cb631a1261018315f8fe1575d6c506eea13a;hp=802e7acb5bb993976a8a5d04a1c1776a6c8a67c8;hpb=1d86c5cf27410934076c10eaa74f4bab4418215c;p=controller.git diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/util/JavassistUtils.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/util/JavassistUtils.xtend index 802e7acb5b..74efffafc6 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/util/JavassistUtils.xtend +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/codegen/util/JavassistUtils.xtend @@ -12,9 +12,16 @@ import javassist.LoaderClassPath import javassist.ClassClassPath import java.util.concurrent.locks.Lock import java.util.concurrent.locks.ReentrantLock +import org.slf4j.LoggerFactory +import java.util.HashMap +import java.util.WeakHashMap class JavassistUtils { + private static val LOG = LoggerFactory.getLogger(JavassistUtils); + + private val loaderClassPaths = new WeakHashMap(); + ClassPool classPool @Property @@ -95,14 +102,27 @@ class JavassistUtils { try { return pool.get(cls.name) } catch (NotFoundException e) { - pool.appendClassPath(new LoaderClassPath(cls.classLoader)); + appendClassLoaderIfMissing(cls.classLoader) try { return pool.get(cls.name) - } catch (NotFoundException ef) { + LOG.warn("Appending ClassClassPath for {}",cls); pool.appendClassPath(new ClassClassPath(cls)); + return pool.get(cls.name) } } } + + def void appendClassLoaderIfMissing(ClassLoader loader) { + if(loaderClassPaths.containsKey(loader)) { + return; + } + val ctLoader = new LoaderClassPath(loader); + classPool.appendClassPath(ctLoader); + } + + def void ensureClassLoader(Class child) { + appendClassLoaderIfMissing(child.classLoader); + } }