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 c3bc13e..c0255bd 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 @@ -91,13 +91,16 @@ public class CoreBootstrap implements Extension { ContextManager.activate(StaticContext.class, StaticScoped.class); } + + public void terminateCustomContexts(@Observes final BeforeShutdown event) { + ContextManager.shutdown(); + } public void takeOff(@Observes final AfterDeploymentValidation event) { getLogger().info(getBundle().getString("taking-off")); } public void engineOff(@Observes final BeforeShutdown event) { - ContextManager.shutdown(); 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 8dc32ab..f52b2a8 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 @@ -58,12 +58,15 @@ public abstract class AbstractCustomContext implements CustomContext { } protected abstract Store getStore(); + + protected abstract boolean isStoreInitialized(); @Override public T get(final Contextual contextual) { return get(contextual, null); } + @SuppressWarnings("unchecked") @Override public T get(final Contextual contextual, final CreationalContext creationalContext) { T instance = null; @@ -97,7 +100,9 @@ public abstract class AbstractCustomContext implements CustomContext { public void setActive(boolean active) { if (!active && this.active) { // Limpando contexto - getStore().clear(); + if (isStoreInitialized()){ + getStore().clear(); + } } this.active = active; } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java index 39ba5d1..ef84186 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java @@ -10,7 +10,6 @@ import javax.enterprise.context.ContextNotActiveException; import javax.enterprise.context.spi.Context; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.BeanManager; -import javax.enterprise.inject.spi.BeforeShutdown; import org.slf4j.Logger; @@ -196,8 +195,7 @@ public class ContextManager { /** *

- * This method should be called when the application is shutting down, usually by observing the - * {@link BeforeShutdown} event. + * This method should be called when the application is shutting down. *

*/ public static synchronized void shutdown() { 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 d8f02fd..eb91ad2 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 @@ -50,4 +50,9 @@ public class StaticContext extends AbstractCustomContext { protected Store getStore() { return store; } + + @Override + protected boolean isStoreInitialized() { + return store!=null; + } } 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 b47bb60..232af59 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 @@ -62,6 +62,11 @@ public class ThreadLocalContext extends AbstractCustomContext { public ThreadLocalContext(final Class scope) { super(scope); } + + @Override + protected boolean isStoreInitialized() { + return threadLocal.get()!=null; + } @Override protected Store getStore() { 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 87f8e5c..9bcdbe9 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 @@ -38,6 +38,8 @@ package br.gov.frameworkdemoiselle.internal.context; import java.util.Map; +import javax.faces.context.FacesContext; + import br.gov.frameworkdemoiselle.annotation.ViewScoped; import br.gov.frameworkdemoiselle.util.Faces; @@ -46,6 +48,11 @@ public class ViewContext extends AbstractCustomContext { public ViewContext() { super(ViewScoped.class); } + + @Override + protected boolean isStoreInitialized() { + return FacesContext.getCurrentInstance()!=null; + } @Override protected Store getStore() { -- libgit2 0.21.2