diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java index d5fb5dc..3549680 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java @@ -59,7 +59,7 @@ import br.gov.frameworkdemoiselle.DemoiselleException; import br.gov.frameworkdemoiselle.annotation.ViewScoped; import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; import br.gov.frameworkdemoiselle.internal.context.Contexts; -import br.gov.frameworkdemoiselle.internal.context.CustomContext; +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; @@ -74,7 +74,7 @@ public abstract class AbstractLifecycleBootstrap implement private List processors = Collections .synchronizedList(new ArrayList()); - private List tempContexts = new ArrayList(); + private List tempContexts = new ArrayList(); private AfterBeanDiscovery afterBeanDiscoveryEvent; @@ -134,7 +134,7 @@ public abstract class AbstractLifecycleBootstrap implement Exception failure = null; if (!registered) { - for (CustomContext tempContext : tempContexts) { + for (AbstractCustomContext tempContext : tempContexts) { Contexts.add(tempContext, afterBeanDiscoveryEvent); } @@ -168,7 +168,7 @@ public abstract class AbstractLifecycleBootstrap implement } private void unloadTempContexts() { - for (CustomContext tempContext : tempContexts) { + for (AbstractCustomContext tempContext : tempContexts) { Contexts.remove(tempContext); } } 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 new file mode 100644 index 0000000..a3b5745 --- /dev/null +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java @@ -0,0 +1,135 @@ +/* + * Demoiselle Framework + * Copyright (C) 2010 SERPRO + * ---------------------------------------------------------------------------- + * This file is part of Demoiselle Framework. + * + * Demoiselle Framework is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License version 3 + * along with this program; if not, see + * or write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301, USA. + * ---------------------------------------------------------------------------- + * Este arquivo é parte do Framework Demoiselle. + * + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação + * do Software Livre (FSF). + * + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português + * para maiores detalhes. + * + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título + * "LICENCA.txt", junto com esse programa. Se não, acesse + * ou escreva para a Fundação do Software Livre (FSF) Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. + */ +package br.gov.frameworkdemoiselle.internal.context; + +import java.lang.annotation.Annotation; +import java.util.Collections; +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 { + + private boolean active; + + private final Class scope; + + public AbstractCustomContext(final Class scope, boolean active) { + this.scope = scope; + this.active = active; + } + + protected abstract Store getStore(); + + @Override + public T get(final Contextual contextual) { + return get(contextual, null); + } + + @Override + @SuppressWarnings("unchecked") + public T get(final Contextual contextual, final CreationalContext creationalContext) { + T instance = null; + + if (!isActive()) { + throw new ContextNotActiveException(); + } + + Class type = getType(contextual); + if (getStore().contains(type)) { + instance = (T) getStore().get(type); + + } else if (creationalContext != null) { + instance = contextual.create(creationalContext); + getStore().put(type, instance); + } + + return instance; + } + + private Class getType(final Contextual contextual) { + Bean bean = (Bean) contextual; + return bean.getBeanClass(); + } + + @Override + public boolean isActive() { + return this.active; + } + + public void setActive(final boolean active) { + this.active = active; + } + + @Override + public Class getScope() { + 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() { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + + if (!cache.containsKey(classLoader)) { + cache.put(classLoader, Collections.synchronizedMap(new HashMap, Object>())); + } + + return cache.get(classLoader); + } + } +} diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextStore.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextStore.java deleted file mode 100644 index 9db17de..0000000 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextStore.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Demoiselle Framework - * Copyright (C) 2010 SERPRO - * ---------------------------------------------------------------------------- - * This file is part of Demoiselle Framework. - * - * Demoiselle Framework is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License version 3 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License version 3 - * along with this program; if not, see - * or write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301, USA. - * ---------------------------------------------------------------------------- - * Este arquivo é parte do Framework Demoiselle. - * - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação - * do Software Livre (FSF). - * - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português - * para maiores detalhes. - * - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título - * "LICENCA.txt", junto com esse programa. Se não, acesse - * ou escreva para a Fundação do Software Livre (FSF) Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. - */ -package br.gov.frameworkdemoiselle.internal.context; - -import java.util.Map; -import java.util.TreeMap; - -public class ContextStore { - - private Map map = new TreeMap(); - - public boolean contains(final String name) { - return this.map.containsKey(name); - } - - public Object get(final String name) { - return this.map.get(name); - } - - public void put(final String name, final Object instance) { - this.map.put(name, 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 0dcb1f7..f2e58f9 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(CustomContext context, AfterBeanDiscovery event) { + public static synchronized void add(AbstractCustomContext context, AfterBeanDiscovery event) { Class scope = context.getScope(); getLogger() @@ -99,10 +99,10 @@ public final class Contexts { } } - private static CustomContext get(Class scope, List contexts) { - CustomContext result = null; + private static AbstractCustomContext get(Class scope, List contexts) { + AbstractCustomContext result = null; - for (CustomContext context : contexts) { + for (AbstractCustomContext 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(CustomContext context) { + public static synchronized void remove(AbstractCustomContext 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); - CustomContext inactive = get(context.getScope(), inactiveContexts); + AbstractCustomContext 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() { - CustomContext context; - for (Iterator iter = activeContexts.iterator(); iter.hasNext();) { + AbstractCustomContext 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 deleted file mode 100644 index a515b0a..0000000 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Demoiselle Framework - * Copyright (C) 2010 SERPRO - * ---------------------------------------------------------------------------- - * This file is part of Demoiselle Framework. - * - * Demoiselle Framework is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License version 3 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License version 3 - * along with this program; if not, see - * or write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301, USA. - * ---------------------------------------------------------------------------- - * Este arquivo é parte do Framework Demoiselle. - * - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação - * do Software Livre (FSF). - * - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português - * para maiores detalhes. - * - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título - * "LICENCA.txt", junto com esse programa. Se não, acesse - * ou escreva para a Fundação do Software Livre (FSF) Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. - */ -package br.gov.frameworkdemoiselle.internal.context; - -import javax.enterprise.context.spi.Context; - -public interface CustomContext extends Context { - - void setActive(boolean b); - -} 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 51a0f43..61653b7 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 @@ -48,84 +48,18 @@ */ package br.gov.frameworkdemoiselle.internal.context; -import java.lang.annotation.Annotation; - -import javax.enterprise.context.ContextNotActiveException; -import javax.enterprise.context.spi.Contextual; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; - import br.gov.frameworkdemoiselle.annotation.StaticScoped; -public class StaticContext implements CustomContext { - - private final static ContextStore store = new ContextStore(); - - // private final Map, Object> cache = Collections.synchronizedMap(new HashMap, Object>()); +public class StaticContext extends AbstractCustomContext { - private boolean active; - - private final Class scope; - - public StaticContext(final Class scope) { - this(scope, true); - } + private final static Store store = new Store(); public StaticContext() { - this(StaticScoped.class, true); - } - - public StaticContext(final Class scope, boolean active) { - this.scope = scope; - this.active = active; - } - - @Override - public T get(final Contextual contextual) { - return get(contextual, null); - } - - @Override - @SuppressWarnings("unchecked") - public T get(final Contextual contextual, final CreationalContext creationalContext) { - T instance = null; - - if (!isActive()) { - throw new ContextNotActiveException(); - } - - String id = getId(contextual); - if (getStore().contains(id)) { - instance = (T) getStore().get(id); - - } else if (creationalContext != null) { - instance = contextual.create(creationalContext); - getStore().put(id, instance); - } - - return instance; - } - - private String getId(final Contextual contextual) { - Bean bean = (Bean) contextual; - return bean.getBeanClass().getCanonicalName(); + super(StaticScoped.class, true); } @Override - public Class getScope() { - return this.scope; - } - - private ContextStore getStore() { + protected Store getStore() { return store; } - - @Override - public boolean isActive() { - return this.active; - } - - public void setActive(final boolean active) { - this.active = active; - } } 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 9ca4f27..287ee21 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 @@ -50,81 +50,24 @@ package br.gov.frameworkdemoiselle.internal.context; import java.lang.annotation.Annotation; -import javax.enterprise.context.ContextNotActiveException; -import javax.enterprise.context.spi.Contextual; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; +public class ThreadLocalContext extends AbstractCustomContext { -public class ThreadLocalContext implements CustomContext { - - private final ThreadLocal threadLocal = new ThreadLocal(); - - private boolean active; - - private final Class scope; + private final ThreadLocal threadLocal = new ThreadLocal(); public ThreadLocalContext(final Class scope) { - this(scope, true); - } - - public ThreadLocalContext(final Class scope, - boolean active) { - this.scope = scope; - this.active = active; - } - - @Override - public T get(final Contextual contextual) { - return get(contextual, null); - } - - @Override - @SuppressWarnings("unchecked") - public T get(final Contextual contextual, - final CreationalContext creationalContext) { - T instance = null; - - if (!isActive()) { - throw new ContextNotActiveException(); - } - - String id = getId(contextual); - if (getStore().contains(id)) { - instance = (T) getStore().get(id); - - } else if (creationalContext != null) { - instance = contextual.create(creationalContext); - getStore().put(id, instance); - } - - return instance; + super(scope, true); } - private String getId(final Contextual contextual) { - Bean bean = (Bean) contextual; - return bean.getBeanClass().getCanonicalName(); - } +// public ThreadLocalContext(final Class scope, boolean active) { +// super(scope, active); +// } @Override - public Class getScope() { - return this.scope; - } - - private ContextStore getStore() { + protected Store getStore() { if (this.threadLocal.get() == null) { - this.threadLocal.set(new ContextStore()); + this.threadLocal.set(new Store()); } return this.threadLocal.get(); } - - @Override - public boolean isActive() { - return this.active; - } - - public void setActive(final boolean active) { - this.active = active; - } - } 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 e1a3a16..6da919c 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,14 +44,14 @@ 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 tempContexts = new ArrayList(); private AfterBeanDiscovery afterBeanDiscoveryEvent; @@ -61,13 +61,13 @@ public class JsfBootstrap implements Extension { } public void addContexts(@Observes final AfterDeploymentValidation event) { - for (CustomContext tempContext : this.tempContexts) { + for (AbstractCustomContext tempContext : this.tempContexts) { Contexts.add(tempContext, this.afterBeanDiscoveryEvent); } } public void removeContexts(@Observes AfterShutdownProccess event) { - for (CustomContext tempContext : this.tempContexts) { + for (AbstractCustomContext tempContext : this.tempContexts) { 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 3307fae..c1e5a46 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 @@ -36,60 +36,26 @@ */ package br.gov.frameworkdemoiselle.internal.context; -import java.lang.annotation.Annotation; import java.util.Map; -import javax.enterprise.context.spi.Contextual; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; - import br.gov.frameworkdemoiselle.annotation.ViewScoped; import br.gov.frameworkdemoiselle.util.Faces; -public class ViewContext implements CustomContext { - - private boolean active; +public class ViewContext extends AbstractCustomContext { public ViewContext() { - this.active = true; - } - - @Override - public T get(final Contextual contextual) { - return get(contextual, null); + super(ViewScoped.class, true); } @Override - @SuppressWarnings("unchecked") - public T get(final Contextual contextual, final CreationalContext creationalContext) { - T instance = null; - - Bean bean = (Bean) contextual; + protected Store getStore() { Map viewMap = Faces.getViewMap(); + String key = Store.class.getName(); - if (viewMap.containsKey(bean.getName())) { - instance = (T) viewMap.get(bean.getName()); - - } else if (creationalContext != null) { - instance = bean.create(creationalContext); - viewMap.put(bean.getName(), instance); + if (!viewMap.containsKey(key)) { + viewMap.put(key, new Store()); } - return instance; - } - - @Override - public Class getScope() { - return ViewScoped.class; - } - - @Override - public boolean isActive() { - return this.active; - } - - @Override - public void setActive(boolean active) { - this.active = active; + return (Store) viewMap.get(key); } } diff --git a/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrapTest.java b/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrapTest.java index 5d7ff0b..3f36c49 100644 --- a/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrapTest.java +++ b/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrapTest.java @@ -58,8 +58,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +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; import br.gov.frameworkdemoiselle.util.Beans; @@ -85,17 +85,17 @@ public class JsfBootstrapTest { public void testStoreContexts() { bootstrap.storeContexts(event); replay(event); - + Assert.assertEquals(event, Whitebox.getInternalState(bootstrap, "afterBeanDiscoveryEvent")); - List context = Whitebox.getInternalState(bootstrap, "tempContexts"); + List context = Whitebox.getInternalState(bootstrap, "tempContexts"); Assert.assertEquals(1, context.size()); verifyAll(); } @Test public void testAddContexts() { - List tempContexts = new ArrayList(); - CustomContext tempContext = new ViewContext(); + List tempContexts = new ArrayList(); + AbstractCustomContext tempContext = new ViewContext(); tempContexts.add(tempContext); Whitebox.setInternalState(bootstrap, "tempContexts", tempContexts); Whitebox.setInternalState(bootstrap, "afterBeanDiscoveryEvent", event); @@ -113,7 +113,7 @@ public class JsfBootstrapTest { @Test public void testRemoveContexts() { bootstrap.storeContexts(event); - + AfterShutdownProccess afterShutdownProccess = createMock(AfterShutdownProccess.class); replay(event, afterShutdownProccess); bootstrap.removeContexts(afterShutdownProccess); 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 5e860c4..0303390 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.CustomContext; +import br.gov.frameworkdemoiselle.internal.context.AbstractCustomContext; 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 (CustomContext tempContext : this.tempContexts) { + for (AbstractCustomContext tempContext : this.tempContexts) { Contexts.add(tempContext, this.afterBeanDiscoveryEvent); } } public void removeContexts(@Observes AfterShutdownProccess event) { - for (CustomContext tempContext : this.tempContexts) { + for (AbstractCustomContext tempContext : this.tempContexts) { Contexts.remove(tempContext); } } diff --git a/impl/extension/se/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrapTest.java b/impl/extension/se/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrapTest.java index 75d37fb..c3e2de0 100644 --- a/impl/extension/se/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrapTest.java +++ b/impl/extension/se/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrapTest.java @@ -56,19 +56,19 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.reflect.Whitebox; +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.lifecycle.AfterShutdownProccess; import br.gov.frameworkdemoiselle.util.Beans; @RunWith(PowerMockRunner.class) @PrepareForTest({ Beans.class, Contexts.class }) public class SeBootstrapTest { - + private SeBootstrap seBootstrap; - + private AfterBeanDiscovery event; - + @Before public void before() { event = createMock(AfterBeanDiscovery.class); @@ -77,22 +77,22 @@ public class SeBootstrapTest { replay(Beans.class); seBootstrap = new SeBootstrap(); } - + @Test public void testStoreContext() { seBootstrap.storeContexts(event); replay(event); - + Assert.assertEquals(event, Whitebox.getInternalState(seBootstrap, "afterBeanDiscoveryEvent")); - List context = Whitebox.getInternalState(seBootstrap, "tempContexts"); + List context = Whitebox.getInternalState(seBootstrap, "tempContexts"); Assert.assertEquals(4, context.size()); verifyAll(); } - + @Test public void testRemoveContexts() { seBootstrap.storeContexts(event); - + AfterShutdownProccess afterShutdownProccess = createMock(AfterShutdownProccess.class); replay(event, afterShutdownProccess); seBootstrap.removeContexts(afterShutdownProccess); -- libgit2 0.21.2