Commit 961def6952393ddbc5921dbea7e8c7d9467cd424

Authored by Cleverson Sacramento
1 parent f78fcc1d
Exists in master

Verificando antes de carregar a classe se ela já foi carregada

previamente
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ConfigurationBootstrap.java
@@ -44,6 +44,7 @@ import javassist.ClassPool; @@ -44,6 +44,7 @@ import javassist.ClassPool;
44 import javassist.CtClass; 44 import javassist.CtClass;
45 import javassist.CtMethod; 45 import javassist.CtMethod;
46 import javassist.CtNewMethod; 46 import javassist.CtNewMethod;
  47 +import javassist.LoaderClassPath;
47 48
48 import javax.enterprise.event.Observes; 49 import javax.enterprise.event.Observes;
49 import javax.enterprise.inject.spi.AfterBeanDiscovery; 50 import javax.enterprise.inject.spi.AfterBeanDiscovery;
@@ -68,44 +69,43 @@ public class ConfigurationBootstrap implements Extension { @@ -68,44 +69,43 @@ public class ConfigurationBootstrap implements Extension {
68 } 69 }
69 } 70 }
70 71
71 - public void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager beanManager) throws Exception { 72 + public void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager beanManager) throws Exception {
72 Class<Object> proxy; 73 Class<Object> proxy;
73 74
74 for (Class<Object> config : cache) { 75 for (Class<Object> config : cache) {
75 proxy = createProxy(config); 76 proxy = createProxy(config);
76 - abd.addBean(new ProxyBean(proxy, beanManager)); 77 + event.addBean(new ProxyBean(proxy, beanManager));
77 } 78 }
78 } 79 }
79 80
80 @SuppressWarnings("unchecked") 81 @SuppressWarnings("unchecked")
81 - private Class<Object> createProxy(Class<?> type) throws Exception { 82 + private Class<Object> createProxy(Class<Object> type) throws Exception {
82 String superClassName = type.getCanonicalName(); 83 String superClassName = type.getCanonicalName();
83 String chieldClassName = superClassName + "__DemoiselleProxy"; 84 String chieldClassName = superClassName + "__DemoiselleProxy";
  85 +
84 ClassPool pool = ClassPool.getDefault(); 86 ClassPool pool = ClassPool.getDefault();
  87 + CtClass ctChieldClass = pool.getOrNull(chieldClassName);
85 88
86 - CtClass ctChieldClass = pool.makeClass(chieldClassName);  
87 - CtClass ctSuperClass = pool.get(superClassName);  
88 - ctChieldClass.setSuperclass(ctSuperClass); 89 + if (ctChieldClass == null) {
  90 + ClassLoader classLoader = ConfigurationLoader.getClassLoaderForClass(superClassName);
  91 + pool.appendClassPath(new LoaderClassPath(classLoader));
  92 + CtClass ctSuperClass = pool.get(superClassName);
89 93
90 - StringBuffer buffer = new StringBuffer();  
91 - buffer.append("new ");  
92 - buffer.append(ConfigurationLoader.class.getCanonicalName());  
93 - buffer.append("().load(this);"); 94 + ctChieldClass = pool.makeClass(chieldClassName, ctSuperClass);
94 95
95 - CtMethod ctChieldMethod;  
96 - for (CtMethod ctSuperMethod : ctSuperClass.getDeclaredMethods()) {  
97 - ctChieldMethod = CtNewMethod.delegator(ctSuperMethod, ctChieldClass);  
98 - ctChieldMethod.insertBefore(buffer.toString()); 96 + StringBuffer buffer = new StringBuffer();
  97 + buffer.append("new ");
  98 + buffer.append(ConfigurationLoader.class.getCanonicalName());
  99 + buffer.append("().load(this);");
99 100
100 - ctChieldClass.addMethod(ctChieldMethod);  
101 - } 101 + CtMethod ctChieldMethod;
  102 + for (CtMethod ctSuperMethod : ctSuperClass.getDeclaredMethods()) {
  103 + ctChieldMethod = CtNewMethod.delegator(ctSuperMethod, ctChieldClass);
  104 + ctChieldMethod.insertBefore(buffer.toString());
102 105
103 - // CtConstructor ctChieldDefaultConstructor = CtNewConstructor.defaultConstructor(ctChieldClass);  
104 - // ctChieldClass.addConstructor(ctChieldDefaultConstructor);  
105 - //  
106 - // for (CtConstructor ctConstructor : ctChieldClass.getConstructors()) {  
107 - // ctConstructor.insertBefore(buffer.toString());  
108 - // } 106 + ctChieldClass.addMethod(ctChieldMethod);
  107 + }
  108 + }
109 109
110 return ctChieldClass.toClass(); 110 return ctChieldClass.toClass();
111 } 111 }