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 e08e487..5ba46d7 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 @@ -46,6 +46,8 @@ import java.lang.annotation.Target; import javax.enterprise.inject.Stereotype; import javax.enterprise.util.Nonbinding; +import br.gov.frameworkdemoiselle.annotation.StaticScoped; + /** * Identifies a configuration class, that is, a structure reserved to store configuration values retrieved from a * given resource file or system variables. @@ -63,7 +65,7 @@ import javax.enterprise.util.Nonbinding; */ @Inherited @Stereotype -// @StaticScoped +@StaticScoped @Target(TYPE) @Retention(RUNTIME) public @interface Configuration { diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java index 15b4638..c4b5754 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java @@ -36,6 +36,8 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import javax.enterprise.event.Observes; @@ -49,6 +51,7 @@ import javax.enterprise.inject.spi.Extension; import org.slf4j.Logger; import br.gov.frameworkdemoiselle.internal.context.Contexts; +import br.gov.frameworkdemoiselle.internal.context.CustomContext; import br.gov.frameworkdemoiselle.internal.context.StaticContext; import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; @@ -61,7 +64,9 @@ public class CoreBootstrap implements Extension { private ResourceBundle bundle; - private AfterBeanDiscovery afterBeanDiscovery; + private AfterBeanDiscovery afterBeanDiscoveryEvent; + + private List customContexts = new ArrayList(); private Logger getLogger() { if (this.logger == null) { @@ -86,17 +91,24 @@ public class CoreBootstrap implements Extension { getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName())); } - public void afterBeanDiscovery(@Observes final AfterBeanDiscovery event) { - this.afterBeanDiscovery = event; + public void storeContexts(@Observes final AfterBeanDiscovery event) { + this.customContexts.add(new StaticContext()); + this.afterBeanDiscoveryEvent = event; } public void takeOff(@Observes final AfterDeploymentValidation event) { - Contexts.add(new StaticContext(), this.afterBeanDiscovery); + for (CustomContext tempContext : this.customContexts) { + Contexts.add(tempContext, this.afterBeanDiscoveryEvent); + } getLogger().info(getBundle().getString("taking-off")); } public void engineOff(@Observes final BeforeShutdown event) { + for (CustomContext tempContext : this.customContexts) { + Contexts.remove(tempContext); + } + getLogger().info(getBundle().getString("engine-off")); } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java index c0c445d..1032a9b 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java @@ -42,12 +42,11 @@ import java.util.HashMap; import java.util.Map; import javax.enterprise.context.ContextNotActiveException; -import javax.enterprise.context.spi.Context; import javax.enterprise.context.spi.Contextual; import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.inject.spi.Bean; -public abstract class AbstractCustomContext implements Context { +public abstract class AbstractCustomContext implements CustomContext { private boolean active; @@ -96,7 +95,7 @@ public abstract class AbstractCustomContext implements Context { return this.active; } - public void setActive(final boolean active) { + public void setActive(boolean active) { this.active = active; } @@ -105,41 +104,27 @@ public abstract class AbstractCustomContext implements Context { return this.scope; } - // static class Store { - // - // private Map, Object> cache = Collections.synchronizedMap(new HashMap, Object>()); - // - // public boolean contains(final Class type) { - // return this.getMap().containsKey(type); - // } - // - // public Object get(final Class type) { - // return this.getMap().get(type); - // } - // - // public void put(final Class type, final Object instance) { - // this.getMap().put(type, instance); - // } - // - // private Map, Object> getMap() { - // return cache; - // } - // } + protected static Store createStore() { + return new Store(); + } static class Store { private Map, Object>> cache = Collections .synchronizedMap(new HashMap, Object>>()); - public boolean contains(final Class type) { + private Store() { + } + + private boolean contains(final Class type) { return this.getMap().containsKey(type); } - public Object get(final Class type) { + private Object get(final Class type) { return this.getMap().get(type); } - public void put(final Class type, final Object instance) { + private void put(final Class type, final Object instance) { this.getMap().put(type, instance); } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java index f2e58f9..0dcb1f7 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java @@ -52,9 +52,9 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; public final class Contexts { - private static List activeContexts = Collections.synchronizedList(new ArrayList()); + private static List activeContexts = Collections.synchronizedList(new ArrayList()); - private static List inactiveContexts = Collections.synchronizedList(new ArrayList()); + private static List inactiveContexts = Collections.synchronizedList(new ArrayList()); private static Logger logger; @@ -79,7 +79,7 @@ public final class Contexts { return bundle; } - public static synchronized void add(AbstractCustomContext context, AfterBeanDiscovery event) { + public static synchronized void add(CustomContext context, AfterBeanDiscovery event) { Class scope = context.getScope(); getLogger() @@ -99,10 +99,10 @@ public final class Contexts { } } - private static AbstractCustomContext get(Class scope, List contexts) { - AbstractCustomContext result = null; + private static CustomContext get(Class scope, List contexts) { + CustomContext result = null; - for (AbstractCustomContext context : contexts) { + for (CustomContext context : contexts) { if (scope.equals(context.getScope())) { result = context; break; @@ -112,7 +112,7 @@ public final class Contexts { return result; } - public static synchronized void remove(AbstractCustomContext context) { + public static synchronized void remove(CustomContext context) { getLogger().trace( getBundle().getString("custom-context-was-unregistered", context.getScope().getCanonicalName())); @@ -120,7 +120,7 @@ public final class Contexts { activeContexts.remove(context); context.setActive(false); - AbstractCustomContext inactive = get(context.getScope(), inactiveContexts); + CustomContext inactive = get(context.getScope(), inactiveContexts); if (inactive != null) { activeContexts.add(inactive); inactive.setActive(true); @@ -133,8 +133,8 @@ public final class Contexts { } public static synchronized void clear() { - AbstractCustomContext context; - for (Iterator iter = activeContexts.iterator(); iter.hasNext();) { + CustomContext context; + for (Iterator iter = activeContexts.iterator(); iter.hasNext();) { context = iter.next(); context.setActive(false); iter.remove(); @@ -144,11 +144,11 @@ public final class Contexts { inactiveContexts.clear(); } - public static synchronized List getActiveContexts() { + public static synchronized List getActiveContexts() { return activeContexts; } - public static synchronized List getInactiveContexts() { + public static synchronized List getInactiveContexts() { return inactiveContexts; } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java new file mode 100644 index 0000000..f1528eb --- /dev/null +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java @@ -0,0 +1,9 @@ +package br.gov.frameworkdemoiselle.internal.context; + +import javax.enterprise.context.spi.Context; + +public interface CustomContext extends Context { + + void setActive(boolean active); + +} diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java index 61653b7..e5cd9bd 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java @@ -52,7 +52,7 @@ import br.gov.frameworkdemoiselle.annotation.StaticScoped; public class StaticContext extends AbstractCustomContext { - private final static Store store = new Store(); + private final static Store store = createStore(); public StaticContext() { super(StaticScoped.class, true); diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java index 287ee21..f11c17a 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java @@ -65,7 +65,7 @@ public class ThreadLocalContext extends AbstractCustomContext { @Override protected Store getStore() { if (this.threadLocal.get() == null) { - this.threadLocal.set(new Store()); + this.threadLocal.set(createStore()); } return this.threadLocal.get(); diff --git a/impl/core/src/test/java/br/gov/frameworkdemoiselle/configuration/field/basic/ConfigurationBasicFieldTest.java b/impl/core/src/test/java/br/gov/frameworkdemoiselle/configuration/field/basic/ConfigurationBasicFieldTest.java index 9f8699e..59c5421 100644 --- a/impl/core/src/test/java/br/gov/frameworkdemoiselle/configuration/field/basic/ConfigurationBasicFieldTest.java +++ b/impl/core/src/test/java/br/gov/frameworkdemoiselle/configuration/field/basic/ConfigurationBasicFieldTest.java @@ -46,6 +46,7 @@ import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.asset.FileAsset; import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -77,10 +78,17 @@ public class ConfigurationBasicFieldTest extends AbstractConfigurationTest { return deployment; } + @BeforeClass + public static void afterClass() { + System.setProperty("primitiveInteger", String.valueOf(1)); + System.setProperty("wrappedInteger", String.valueOf(2)); + System.setProperty("stringWithSpace", String.valueOf("demoiselle framework")); + System.setProperty("stringWithComma", String.valueOf("demoiselle,framework")); + } + @Test public void loadPrimitiveInteger() { int expected = 1; - System.setProperty("primitiveInteger", String.valueOf(expected)); assertEquals(expected, systemConfig.getPrimitiveInteger()); assertEquals(expected, propertiesConfig.getPrimitiveInteger()); @@ -90,7 +98,6 @@ public class ConfigurationBasicFieldTest extends AbstractConfigurationTest { @Test public void loadWrappedInteger() { Integer expected = 2; - System.setProperty("wrappedInteger", String.valueOf(expected)); assertEquals(expected, systemConfig.getWrappedInteger()); assertEquals(expected, propertiesConfig.getWrappedInteger()); @@ -100,7 +107,6 @@ public class ConfigurationBasicFieldTest extends AbstractConfigurationTest { @Test public void loadStringWithSpace() { String expected = "demoiselle framework"; - System.setProperty("stringWithSpace", String.valueOf(expected)); assertEquals(expected, systemConfig.getStringWithSpace()); assertEquals(expected, propertiesConfig.getStringWithSpace()); @@ -110,7 +116,6 @@ public class ConfigurationBasicFieldTest extends AbstractConfigurationTest { // @Test public void loadStringWithComma() { String expected = "demoiselle,framework"; - System.setProperty("stringWithComma", String.valueOf(expected)); assertEquals(expected, systemConfig.getStringWithComma()); assertEquals(expected, propertiesConfig.getStringWithComma()); diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java index 6da919c..a7fde83 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java @@ -44,30 +44,30 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.AfterDeploymentValidation; import javax.enterprise.inject.spi.Extension; -import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; import br.gov.frameworkdemoiselle.internal.context.Contexts; +import br.gov.frameworkdemoiselle.internal.context.CustomContext; import br.gov.frameworkdemoiselle.internal.context.ViewContext; import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; public class JsfBootstrap implements Extension { - private List tempContexts = new ArrayList(); + private List customContexts = new ArrayList(); private AfterBeanDiscovery afterBeanDiscoveryEvent; public void storeContexts(@Observes final AfterBeanDiscovery event) { - this.tempContexts.add(new ViewContext()); + this.customContexts.add(new ViewContext()); this.afterBeanDiscoveryEvent = event; } public void addContexts(@Observes final AfterDeploymentValidation event) { - for (AbstractCustomContext tempContext : this.tempContexts) { + for (CustomContext tempContext : this.customContexts) { Contexts.add(tempContext, this.afterBeanDiscoveryEvent); } } public void removeContexts(@Observes AfterShutdownProccess event) { - for (AbstractCustomContext tempContext : this.tempContexts) { + for (CustomContext tempContext : this.customContexts) { Contexts.remove(tempContext); } } diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java index c1e5a46..4ad5c6f 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java @@ -53,7 +53,7 @@ public class ViewContext extends AbstractCustomContext { String key = Store.class.getName(); if (!viewMap.containsKey(key)) { - viewMap.put(key, new Store()); + viewMap.put(key, createStore()); } return (Store) viewMap.get(key); diff --git a/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java b/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java index 0303390..5e860c4 100644 --- a/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java +++ b/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java @@ -49,13 +49,13 @@ import javax.enterprise.inject.spi.Extension; import br.gov.frameworkdemoiselle.annotation.ViewScoped; import br.gov.frameworkdemoiselle.internal.context.Contexts; -import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; +import br.gov.frameworkdemoiselle.internal.context.CustomContext; import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; public class SeBootstrap implements Extension { - private List tempContexts = new ArrayList(); + private List tempContexts = new ArrayList(); private AfterBeanDiscovery afterBeanDiscoveryEvent; @@ -69,13 +69,13 @@ public class SeBootstrap implements Extension { } public void addContexts(@Observes final AfterDeploymentValidation event) { - for (AbstractCustomContext tempContext : this.tempContexts) { + for (CustomContext tempContext : this.tempContexts) { Contexts.add(tempContext, this.afterBeanDiscoveryEvent); } } public void removeContexts(@Observes AfterShutdownProccess event) { - for (AbstractCustomContext tempContext : this.tempContexts) { + for (CustomContext tempContext : this.tempContexts) { Contexts.remove(tempContext); } } -- libgit2 0.21.2