From e5e294d0cc60e1093f538e1e95fbc4fcabc10da9 Mon Sep 17 00:00:00 2001 From: Dancovich Date: Fri, 2 Aug 2013 17:12:54 -0300 Subject: [PATCH] Implementado método para determinar se o "store" de custom contexts foi inicializado. Usa isso para evitar acesso desnecessário a getStore() e evitar um bug onde se criava um store (via getStore()) apenas para testar se ele está vazio. --- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java | 5 ++++- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java | 7 ++++++- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java | 4 +--- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java | 5 +++++ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java | 5 +++++ impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java | 7 +++++++ 6 files changed, 28 insertions(+), 5 deletions(-) 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