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 44 import javassist.CtClass;
45 45 import javassist.CtMethod;
46 46 import javassist.CtNewMethod;
  47 +import javassist.LoaderClassPath;
47 48  
48 49 import javax.enterprise.event.Observes;
49 50 import javax.enterprise.inject.spi.AfterBeanDiscovery;
... ... @@ -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 73 Class<Object> proxy;
73 74  
74 75 for (Class<Object> config : cache) {
75 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 81 @SuppressWarnings("unchecked")
81   - private Class<Object> createProxy(Class<?> type) throws Exception {
  82 + private Class<Object> createProxy(Class<Object> type) throws Exception {
82 83 String superClassName = type.getCanonicalName();
83 84 String chieldClassName = superClassName + "__DemoiselleProxy";
  85 +
84 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 110 return ctChieldClass.toClass();
111 111 }
... ...