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 | 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 | } | ... | ... |