diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ConfigurationBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ConfigurationBootstrap.java index 6ca5101..216679c 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ConfigurationBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ConfigurationBootstrap.java @@ -62,8 +62,9 @@ public class ConfigurationBootstrap implements Extension { private final List> cache = Collections.synchronizedList(new ArrayList>()); - private static final Map> cacheClassLoader = Collections.synchronizedMap(new HashMap>()); - + private static final Map>> cacheClassLoader = Collections + .synchronizedMap(new HashMap>>()); + public void processAnnotatedType(@Observes final ProcessAnnotatedType event) { final AnnotatedType annotatedType = event.getAnnotatedType(); @@ -78,9 +79,7 @@ public class ConfigurationBootstrap implements Extension { for (Class config : cache) { proxy = createProxy(config); - if (proxy != null) { - event.addBean(new CustomBean(proxy, beanManager)); - } + event.addBean(new CustomBean(proxy, beanManager)); } } @@ -89,24 +88,20 @@ public class ConfigurationBootstrap implements Extension { String superClassName = type.getCanonicalName(); String chieldClassName = superClassName + "__DemoiselleProxy"; - Class clazz = null; - - Boolean loaded = true; + Map> cacheProxy = Collections.synchronizedMap(new HashMap>());; + + Class clazzProxy = null; + ClassLoader classLoader = type.getClassLoader(); - if (cacheClassLoader.containsKey(classLoader)) { - if (!cacheClassLoader.get(classLoader).contains(chieldClassName)) { - loaded = false; + if (cacheClassLoader.containsKey(classLoader)) { + cacheProxy = cacheClassLoader.get(classLoader); + if (cacheProxy.containsKey(chieldClassName)) { + clazzProxy = cacheProxy.get(chieldClassName); } } - else{ - List strings = Collections.synchronizedList(new ArrayList()); - cacheClassLoader.put(classLoader, strings); - loaded = false; - } - - if (!loaded){ - cacheClassLoader.get(classLoader).add(chieldClassName); - + + if (clazzProxy == null) { + ClassPool pool = new ClassPool(); CtClass ctChieldClass = pool.getOrNull(chieldClassName); @@ -123,9 +118,13 @@ public class ConfigurationBootstrap implements Extension { ctChieldClass.addMethod(ctChieldMethod); } - clazz = ctChieldClass.toClass(classLoader, type.getProtectionDomain()); + + clazzProxy = ctChieldClass.toClass(classLoader, type.getProtectionDomain()); + + cacheProxy.put(chieldClassName, clazzProxy); + cacheClassLoader.put(classLoader, cacheProxy); } - return clazz; - } + return clazzProxy; + } } -- libgit2 0.21.2