From ee348c188d8fd39320cf524ee37f8f8768d22186 Mon Sep 17 00:00:00 2001 From: Ednara Oliveira Date: Wed, 19 Sep 2012 08:42:41 -0300 Subject: [PATCH] Ajustes na implementação do ConfigurationBootstrap --- impl/core/src/main/java/br/gov/frameworkdemoiselle/configuration/Configuration.java | 4 +++- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ConfigurationBootstrap.java | 26 +++++++++++++++++--------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ProxyBean.java | 5 +++-- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationImpl.java | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/X.java | 40 ---------------------------------------- 5 files changed, 81 insertions(+), 52 deletions(-) create mode 100644 impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationImpl.java delete mode 100644 impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/X.java diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/configuration/Configuration.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/configuration/Configuration.java index 4e5c2cb..80b4d41 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/configuration/Configuration.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/configuration/Configuration.java @@ -43,6 +43,8 @@ import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.Target; +import javax.enterprise.context.ApplicationScoped; +import javax.enterprise.context.RequestScoped; import javax.enterprise.inject.Stereotype; import javax.enterprise.util.Nonbinding; import javax.inject.Singleton; @@ -62,7 +64,7 @@ import javax.inject.Singleton; * * @author SERPRO */ -@Singleton +//@Singleton @Stereotype @Inherited @Target(TYPE) 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 81649a5..6b41095 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 @@ -42,7 +42,6 @@ import java.util.List; import javassist.ClassPool; import javassist.CtClass; -import javassist.CtField; import javassist.CtMethod; import javassist.CtNewMethod; import javassist.LoaderClassPath; @@ -55,6 +54,7 @@ import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; import br.gov.frameworkdemoiselle.configuration.Configuration; +import br.gov.frameworkdemoiselle.internal.implementation.ConfigurationImpl; public class ConfigurationBootstrap implements Extension { @@ -84,6 +84,8 @@ public class ConfigurationBootstrap implements Extension { String chieldClassName = superClassName + "__DemoiselleProxy"; ClassPool pool = ClassPool.getDefault(); + ClassPool.doPruning = true; + CtClass ctChieldClass = pool.getOrNull(chieldClassName); ClassLoader classLoader = type.getClassLoader(); @@ -97,20 +99,26 @@ public class ConfigurationBootstrap implements Extension { CtClass ctSuperClass = pool.get(superClassName); - ctChieldClass = pool.makeClass(chieldClassName, ctSuperClass); + // ctChieldClass = pool.makeClass(chieldClassName, ctSuperClass); + ctChieldClass = pool.getAndRename(ConfigurationImpl.class.getCanonicalName(), chieldClassName); + ctChieldClass.setSuperclass(ctSuperClass); - CtClass ctClassX = pool.get("br.gov.frameworkdemoiselle.internal.implementation.X"); + // for (CtField ctFieldImpl : ctClassImpl.getDeclaredFields()) { + // ctChieldClass.addField(new CtField(ctFieldImpl, ctChieldClass)); + // System.out.println("FFFFFFFFFFFFFFFFFFFFFFFFFF-----------" + ctFieldImpl.toString()); + // } - CtField ctFieldX = ctClassX.getField("cache"); - ctChieldClass.addField(new CtField(ctFieldX, ctChieldClass)); - - CtMethod ctMethodX = ctClassX.getDeclaredMethod("loadProxyConfigurarion"); - ctChieldClass.addMethod(new CtMethod(ctMethodX, ctChieldClass, null)); + // for (CtMethod ctMethodImpl : ctClassImpl.getDeclaredMethods()) { + // ctChieldClass.addMethod(new CtMethod(ctMethodImpl, ctChieldClass, null)); + // System.out.println("MMMMMMMMMMMMMMMMMMMMMMMMMM-----------" + ctMethodImpl.toString()); + // } CtMethod ctChieldMethod; for (CtMethod ctSuperMethod : ctSuperClass.getDeclaredMethods()) { ctChieldMethod = CtNewMethod.delegator(ctSuperMethod, ctChieldClass); - ctChieldMethod.insertBefore("loadProxyConfigurarion();"); + ctChieldMethod.insertBefore("loadProxyConfigurarion(this);"); + // ctChieldMethod + // .insertBefore("new br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader().load(this);"); ctChieldClass.addMethod(ctChieldMethod); } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ProxyBean.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ProxyBean.java index 2dea41d..06acbb4 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ProxyBean.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ProxyBean.java @@ -42,6 +42,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; +import javax.enterprise.context.Dependent; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.Any; import javax.enterprise.inject.Default; @@ -51,7 +52,7 @@ import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.InjectionPoint; import javax.enterprise.inject.spi.InjectionTarget; import javax.enterprise.util.AnnotationLiteral; -import javax.inject.Singleton; +import javax.inject.Scope; /** * @see http://docs.jboss.org/weld/reference/latest/en-US/html_single/#d0e5035 @@ -101,7 +102,7 @@ public class ProxyBean implements Bean { } public Class getScope() { - return Singleton.class; + return Dependent.class; } public String getName() { diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationImpl.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationImpl.java new file mode 100644 index 0000000..891aab1 --- /dev/null +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationImpl.java @@ -0,0 +1,58 @@ +package br.gov.frameworkdemoiselle.internal.implementation; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; +import br.gov.frameworkdemoiselle.util.Beans; + +public class ConfigurationImpl { + + private static Map>> cache; + + private boolean loaded = false; + + private synchronized static Map>> getCache() { + if (cache == null) { + cache = Collections.synchronizedMap(new HashMap>>()); + } + + return cache; + } + + @SuppressWarnings("unused") + private synchronized void loadProxyConfigurarion(Object instance) { + if (!loaded) { + Beans.getReference(ConfigurationLoader.class).load(instance); + loaded = true; + } + } + + @SuppressWarnings("unused") + private synchronized static void loadProxyConfigurarionX(Object instance) { + Class clazz = instance.getClass().getSuperclass(); + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + + boolean loaded = true; + + if (getCache().containsKey(classLoader)) { + if (!getCache().get(classLoader).contains(clazz)) { + loaded = false; + } + + } else { + List> classes = Collections.synchronizedList(new ArrayList>()); + getCache().put(classLoader, classes); + loaded = false; + } + + if (!loaded) { +// new br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader().load(instance); + Beans.getReference(ConfigurationLoader.class).load(instance); + getCache().get(classLoader).add(clazz); + } + } +} diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/X.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/X.java deleted file mode 100644 index 86bed8b..0000000 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/X.java +++ /dev/null @@ -1,40 +0,0 @@ -package br.gov.frameworkdemoiselle.internal.implementation; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; - -public class X { - - private final Map>> cache = Collections - .synchronizedMap(new HashMap>>()); - - private void loadProxyConfigurarion() { - Class clazz = this.getClass(); - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - - boolean loaded = true; - - if (cache.containsKey(classLoader)) { - if (!cache.get(classLoader).contains(clazz)) { - loaded = false; - } - - } else { - List> classes = Collections.synchronizedList(new ArrayList>()); - cache.put(classLoader, classes); - loaded = false; - } - - if (!loaded) { - new ConfigurationLoader().load(this); - cache.get(classLoader).add(clazz); - } - - new ConfigurationLoader().load(this); - } -} -- libgit2 0.21.2