From a1cf72f1281fa6f598ebb92026d13630348787cb Mon Sep 17 00:00:00 2001 From: Dancovich Date: Mon, 16 Sep 2013 19:15:59 -0300 Subject: [PATCH] Resolvido bug que impedia levantamento de aplicação web após refatoração de contextos. --- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java | 39 +++++++++++++++++++++++++++++++++------ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java | 17 +++++++++++++++++ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java | 2 +- impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/EntityManagerBootstrap.java | 10 ++-------- impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java | 2 ++ impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java | 16 +++++++++++----- impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java | 2 ++ 7 files changed, 68 insertions(+), 20 deletions(-) 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 12d1ce0..75a4850 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 @@ -51,6 +51,7 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType; import org.slf4j.Logger; import br.gov.frameworkdemoiselle.DemoiselleException; +import br.gov.frameworkdemoiselle.context.ConversationContext; import br.gov.frameworkdemoiselle.context.RequestContext; import br.gov.frameworkdemoiselle.context.SessionContext; import br.gov.frameworkdemoiselle.context.ViewContext; @@ -127,11 +128,25 @@ public abstract class AbstractLifecycleBootstrap implement RequestContext tempRequestContext = Beans.getReference(RequestContext.class); SessionContext tempSessionContext = Beans.getReference(SessionContext.class); ViewContext tempViewContext = Beans.getReference(ViewContext.class); + ConversationContext tempConversationContext = Beans.getReference(ConversationContext.class); + boolean requestActivatedHere = !tempRequestContext.isActive(); + boolean sessionActivatedHere = !tempSessionContext.isActive(); + boolean viewActivatedHere = !tempViewContext.isActive(); + boolean conversationActivatedHere = !tempConversationContext.isActive(); + if (!registered) { - tempRequestContext.activate(); - tempSessionContext.activate(); - tempViewContext.activate(); + if (!tempRequestContext.isActive()) + tempRequestContext.activate(); + + if (!tempSessionContext.isActive()) + tempSessionContext.activate(); + + if (!tempViewContext.isActive()) + tempViewContext.activate(); + + if (!tempConversationContext.isActive()) + tempConversationContext.activate(); registered = true; } @@ -154,9 +169,21 @@ public abstract class AbstractLifecycleBootstrap implement } if (processors.isEmpty()) { - tempRequestContext.deactivate(); - tempSessionContext.deactivate(); - tempViewContext.deactivate(); + if (requestActivatedHere){ + tempRequestContext.deactivate(); + } + + if (sessionActivatedHere){ + tempSessionContext.deactivate(); + } + + if (viewActivatedHere){ + tempViewContext.deactivate(); + } + + if (conversationActivatedHere){ + tempConversationContext.deactivate(); + } } if (failure != null) { 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 00aab89..51146fb 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 @@ -175,6 +175,23 @@ public abstract class AbstractCustomContext implements CustomContext { return logger; } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if ( !this.getClass().equals(obj.getClass()) ) + return false; + AbstractCustomContext other = (AbstractCustomContext) obj; + if (scope == null) { + if (other.scope != null) + return false; + } else if (!scope.equals(other.scope)) + return false; + return true; + } static class Store { diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java index 159ee28..178de8b 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java @@ -103,7 +103,7 @@ public class CustomContextProducer { logger.debug( bundle.getString("bootstrap-context-added", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) ); } else{ - logger.debug( bundle.getString("bootstrap-context-already-managed", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) ); + logger.warn( bundle.getString("bootstrap-context-already-managed", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) ); } } diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/EntityManagerBootstrap.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/EntityManagerBootstrap.java index 51abeeb..3cb2204 100644 --- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/EntityManagerBootstrap.java +++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/EntityManagerBootstrap.java @@ -10,17 +10,14 @@ import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped; -import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AnnotatedConstructor; import javax.enterprise.inject.spi.AnnotatedField; import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.BeanManager; -import javax.enterprise.inject.spi.BeforeBeanDiscovery; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; import javax.enterprise.inject.spi.ProcessBean; -import javax.enterprise.inject.spi.ProcessManagedBean; import org.apache.commons.configuration.PropertiesConfiguration; import org.slf4j.Logger; @@ -42,7 +39,7 @@ public class EntityManagerBootstrap implements Extension { private EntityManagerScope selectedScope; - public void replaceAnnotatedType(@Observes final ProcessAnnotatedType event , BeanManager manager){ + public void replaceAnnotatedType(final ProcessAnnotatedType event , BeanManager manager){ if (event.getAnnotatedType().getJavaClass().equals(EntityManagerProducer.class)){ AnnotatedType wrapper = new AnnotatedType() { @@ -135,10 +132,7 @@ public class EntityManagerBootstrap implements Extension { } } - public void a(@Observes BeforeBeanDiscovery event){ - } - - public void configureBean(@Observes ProcessBean event , BeanManager manager){ + public void configureBean(ProcessBean event , BeanManager manager){ Class beanScope = event.getBean().getScope(); System.out.println(beanScope.toString()); } diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java index c728180..ca1a6c2 100644 --- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java +++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/producer/EntityManagerProducer.java @@ -44,6 +44,7 @@ import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import javax.enterprise.context.RequestScoped; import javax.enterprise.inject.Default; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.InjectionPoint; @@ -66,6 +67,7 @@ import br.gov.frameworkdemoiselle.util.ResourceBundle; * persistence.xml, demoiselle.properties or @PersistenceUnit annotation. *

*/ +@RequestScoped public class EntityManagerProducer implements Serializable { private static final long serialVersionUID = 1L; 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 5cba5c4..3639e24 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 @@ -41,7 +41,6 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.AfterDeploymentValidation; import javax.enterprise.inject.spi.Extension; -import br.gov.frameworkdemoiselle.context.ViewContext; import br.gov.frameworkdemoiselle.internal.context.CustomContextProducer; import br.gov.frameworkdemoiselle.internal.context.FacesViewContextImpl; import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; @@ -54,6 +53,7 @@ public class JsfBootstrap implements Extension { //private AfterBeanDiscovery afterBeanDiscoveryEvent; private FacesViewContextImpl context; + private boolean contextActivatedHere; public void createCustomContext(@Observes AfterBeanDiscovery event){ context = new FacesViewContextImpl(); @@ -65,13 +65,19 @@ public class JsfBootstrap implements Extension { producer.addRegisteredContext(context); //Ativa o ViewContext - ViewContext ctx = Beans.getReference(FacesViewContextImpl.class); - ctx.activate(); + if (!context.isActive()){ + context.activate(); + contextActivatedHere = true; + } + else{ + contextActivatedHere = false; + } } public void removeContexts(@Observes AfterShutdownProccess event) { //Desativa o ViewContext - ViewContext ctx = Beans.getReference(FacesViewContextImpl.class); - ctx.deactivate(); + if (contextActivatedHere){ + context.deactivate(); + } } } diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java index fb3d992..3910557 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java @@ -38,6 +38,7 @@ package br.gov.frameworkdemoiselle.internal.context; import java.util.Map; +import javax.enterprise.inject.Alternative; import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; @@ -56,6 +57,7 @@ import br.gov.frameworkdemoiselle.util.Faces; * */ @Priority(Priority.L2_PRIORITY) +@Alternative public class FacesViewContextImpl extends AbstractCustomContext implements ViewContext { public FacesViewContextImpl() { -- libgit2 0.21.2