Commit 961def6952393ddbc5921dbea7e8c7d9467cd424
1 parent
f78fcc1d
Exists in
master
Verificando antes de carregar a classe se ela já foi carregada
previamente
Showing
1 changed file
with
22 additions
and
22 deletions
Show diff stats
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 | } |