Commit 0b5ebd8c699b35134441140f057a229f760c79a0
Exists in
master
Merge remote branch 'origin/2.4.0' into 2.4.0
Conflicts: impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ManagementBootstrap.java impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/Management.java impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/DynamicMBeanProxy.java impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/JMXManagementExtension.java impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/NotificationEventListener.java impl/extension/jsf/src/test/java/test/Tests.java
Showing
47 changed files
with
1237 additions
and
836 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/CustomContext.java
0 → 100644
| @@ -0,0 +1,62 @@ | @@ -0,0 +1,62 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +package br.gov.frameworkdemoiselle.context; | ||
| 38 | + | ||
| 39 | +import javax.enterprise.context.spi.Context; | ||
| 40 | + | ||
| 41 | +/** | ||
| 42 | + * | ||
| 43 | + * Base interface for contexts managed by the framework. | ||
| 44 | + * | ||
| 45 | + * @author serpro | ||
| 46 | + * | ||
| 47 | + */ | ||
| 48 | +public interface CustomContext extends Context { | ||
| 49 | + | ||
| 50 | + /** | ||
| 51 | + * Activates a custom context | ||
| 52 | + * | ||
| 53 | + * @return <code>true</code> if context was activated, <code>false</code> if there was already another active | ||
| 54 | + * context for the same scope and the activation of this scope failed. | ||
| 55 | + */ | ||
| 56 | + boolean activate(); | ||
| 57 | + | ||
| 58 | + /** | ||
| 59 | + * Deactivates this context, it will clear all beans stored on this context. | ||
| 60 | + */ | ||
| 61 | + void deactivate(); | ||
| 62 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/RequestContext.java
0 → 100644
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/SessionContext.java
0 → 100644
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/StaticContext.java
0 → 100644
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/ViewContext.java
0 → 100644
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
| @@ -42,11 +42,7 @@ import java.util.Collections; | @@ -42,11 +42,7 @@ import java.util.Collections; | ||
| 42 | import java.util.Iterator; | 42 | import java.util.Iterator; |
| 43 | import java.util.List; | 43 | import java.util.List; |
| 44 | 44 | ||
| 45 | -import javax.enterprise.context.ConversationScoped; | ||
| 46 | -import javax.enterprise.context.RequestScoped; | ||
| 47 | -import javax.enterprise.context.SessionScoped; | ||
| 48 | import javax.enterprise.event.Observes; | 45 | import javax.enterprise.event.Observes; |
| 49 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 50 | import javax.enterprise.inject.spi.AnnotatedMethod; | 46 | import javax.enterprise.inject.spi.AnnotatedMethod; |
| 51 | import javax.enterprise.inject.spi.AnnotatedType; | 47 | import javax.enterprise.inject.spi.AnnotatedType; |
| 52 | import javax.enterprise.inject.spi.Extension; | 48 | import javax.enterprise.inject.spi.Extension; |
| @@ -55,9 +51,9 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType; | @@ -55,9 +51,9 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType; | ||
| 55 | import org.slf4j.Logger; | 51 | import org.slf4j.Logger; |
| 56 | 52 | ||
| 57 | import br.gov.frameworkdemoiselle.DemoiselleException; | 53 | import br.gov.frameworkdemoiselle.DemoiselleException; |
| 58 | -import br.gov.frameworkdemoiselle.annotation.ViewScoped; | ||
| 59 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 60 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 54 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 55 | +import br.gov.frameworkdemoiselle.context.SessionContext; | ||
| 56 | +import br.gov.frameworkdemoiselle.context.ViewContext; | ||
| 61 | import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; | 57 | import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; |
| 62 | import br.gov.frameworkdemoiselle.util.Beans; | 58 | import br.gov.frameworkdemoiselle.util.Beans; |
| 63 | import br.gov.frameworkdemoiselle.util.NameQualifier; | 59 | import br.gov.frameworkdemoiselle.util.NameQualifier; |
| @@ -109,7 +105,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -109,7 +105,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 109 | } | 105 | } |
| 110 | } | 106 | } |
| 111 | 107 | ||
| 112 | - public void loadTempContexts(@Observes final AfterBeanDiscovery event) { | 108 | + /*public void loadTempContexts(@Observes final AfterBeanDiscovery event) { |
| 113 | // Caso este bootstrap rode antes do CoreBootstrap. Não há problemas em chamar este método várias vezes, ele | 109 | // Caso este bootstrap rode antes do CoreBootstrap. Não há problemas em chamar este método várias vezes, ele |
| 114 | // ignora chamadas adicionais. | 110 | // ignora chamadas adicionais. |
| 115 | ContextManager.initialize(event); | 111 | ContextManager.initialize(event); |
| @@ -119,7 +115,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -119,7 +115,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 119 | ContextManager.add(new ThreadLocalContext(SessionScoped.class), event); | 115 | ContextManager.add(new ThreadLocalContext(SessionScoped.class), event); |
| 120 | ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event); | 116 | ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event); |
| 121 | ContextManager.add(new ThreadLocalContext(RequestScoped.class), event); | 117 | ContextManager.add(new ThreadLocalContext(RequestScoped.class), event); |
| 122 | - } | 118 | + }*/ |
| 123 | 119 | ||
| 124 | @SuppressWarnings({ "unchecked", "rawtypes" }) | 120 | @SuppressWarnings({ "unchecked", "rawtypes" }) |
| 125 | protected synchronized void proccessEvent() { | 121 | protected synchronized void proccessEvent() { |
| @@ -127,12 +123,15 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -127,12 +123,15 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 127 | 123 | ||
| 128 | Collections.sort(processors); | 124 | Collections.sort(processors); |
| 129 | Exception failure = null; | 125 | Exception failure = null; |
| 126 | + | ||
| 127 | + RequestContext tempRequestContext = Beans.getReference(RequestContext.class); | ||
| 128 | + SessionContext tempSessionContext = Beans.getReference(SessionContext.class); | ||
| 129 | + ViewContext tempViewContext = Beans.getReference(ViewContext.class); | ||
| 130 | 130 | ||
| 131 | if (!registered) { | 131 | if (!registered) { |
| 132 | - ContextManager.activate(ThreadLocalContext.class, ViewScoped.class); | ||
| 133 | - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); | ||
| 134 | - ContextManager.activate(ThreadLocalContext.class, ConversationScoped.class); | ||
| 135 | - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); | 132 | + tempRequestContext.activate(); |
| 133 | + tempSessionContext.activate(); | ||
| 134 | + tempViewContext.activate(); | ||
| 136 | 135 | ||
| 137 | registered = true; | 136 | registered = true; |
| 138 | } | 137 | } |
| @@ -155,10 +154,9 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -155,10 +154,9 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
| 155 | } | 154 | } |
| 156 | 155 | ||
| 157 | if (processors.isEmpty()) { | 156 | if (processors.isEmpty()) { |
| 158 | - ContextManager.deactivate(ThreadLocalContext.class, ViewScoped.class); | ||
| 159 | - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); | ||
| 160 | - ContextManager.deactivate(ThreadLocalContext.class, ConversationScoped.class); | ||
| 161 | - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); | 157 | + tempRequestContext.deactivate(); |
| 158 | + tempSessionContext.deactivate(); | ||
| 159 | + tempViewContext.deactivate(); | ||
| 162 | } | 160 | } |
| 163 | 161 | ||
| 164 | if (failure != null) { | 162 | if (failure != null) { |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java
| @@ -39,7 +39,6 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; | @@ -39,7 +39,6 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; | ||
| 39 | import java.util.Locale; | 39 | import java.util.Locale; |
| 40 | 40 | ||
| 41 | import javax.enterprise.event.Observes; | 41 | import javax.enterprise.event.Observes; |
| 42 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 43 | import javax.enterprise.inject.spi.AfterDeploymentValidation; | 42 | import javax.enterprise.inject.spi.AfterDeploymentValidation; |
| 44 | import javax.enterprise.inject.spi.BeanManager; | 43 | import javax.enterprise.inject.spi.BeanManager; |
| 45 | import javax.enterprise.inject.spi.BeforeBeanDiscovery; | 44 | import javax.enterprise.inject.spi.BeforeBeanDiscovery; |
| @@ -48,9 +47,6 @@ import javax.enterprise.inject.spi.Extension; | @@ -48,9 +47,6 @@ import javax.enterprise.inject.spi.Extension; | ||
| 48 | 47 | ||
| 49 | import org.slf4j.Logger; | 48 | import org.slf4j.Logger; |
| 50 | 49 | ||
| 51 | -import br.gov.frameworkdemoiselle.annotation.StaticScoped; | ||
| 52 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 53 | -import br.gov.frameworkdemoiselle.internal.context.StaticContext; | ||
| 54 | import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | 50 | import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; |
| 55 | import br.gov.frameworkdemoiselle.util.Beans; | 51 | import br.gov.frameworkdemoiselle.util.Beans; |
| 56 | import br.gov.frameworkdemoiselle.util.ResourceBundle; | 52 | import br.gov.frameworkdemoiselle.util.ResourceBundle; |
| @@ -60,7 +56,7 @@ public class CoreBootstrap implements Extension { | @@ -60,7 +56,7 @@ public class CoreBootstrap implements Extension { | ||
| 60 | private Logger logger; | 56 | private Logger logger; |
| 61 | 57 | ||
| 62 | private transient ResourceBundle bundle; | 58 | private transient ResourceBundle bundle; |
| 63 | - | 59 | + |
| 64 | private Logger getLogger() { | 60 | private Logger getLogger() { |
| 65 | if (this.logger == null) { | 61 | if (this.logger == null) { |
| 66 | this.logger = LoggerProducer.create(CoreBootstrap.class); | 62 | this.logger = LoggerProducer.create(CoreBootstrap.class); |
| @@ -83,18 +79,7 @@ public class CoreBootstrap implements Extension { | @@ -83,18 +79,7 @@ public class CoreBootstrap implements Extension { | ||
| 83 | Beans.setBeanManager(beanManager); | 79 | Beans.setBeanManager(beanManager); |
| 84 | getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName())); | 80 | getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName())); |
| 85 | } | 81 | } |
| 86 | - | ||
| 87 | - public void initializeCustomContexts(@Observes final AfterBeanDiscovery event) { | ||
| 88 | - // StaticContext já é criado e gerenciado por esta chamada | ||
| 89 | - ContextManager.initialize(event); | ||
| 90 | - | ||
| 91 | - ContextManager.activate(StaticContext.class, StaticScoped.class); | ||
| 92 | - } | ||
| 93 | - | ||
| 94 | - public void terminateCustomContexts(@Observes final BeforeShutdown event) { | ||
| 95 | - ContextManager.shutdown(); | ||
| 96 | - } | ||
| 97 | - | 82 | + |
| 98 | public void takeOff(@Observes final AfterDeploymentValidation event) { | 83 | public void takeOff(@Observes final AfterDeploymentValidation event) { |
| 99 | getLogger().info(getBundle().getString("taking-off")); | 84 | getLogger().info(getBundle().getString("taking-off")); |
| 100 | } | 85 | } |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomContextBootstrap.java
0 → 100644
| @@ -0,0 +1,90 @@ | @@ -0,0 +1,90 @@ | ||
| 1 | +package br.gov.frameworkdemoiselle.internal.bootstrap; | ||
| 2 | + | ||
| 3 | +import java.util.ArrayList; | ||
| 4 | +import java.util.List; | ||
| 5 | + | ||
| 6 | +import javax.enterprise.event.Observes; | ||
| 7 | +import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 8 | +import javax.enterprise.inject.spi.AfterDeploymentValidation; | ||
| 9 | +import javax.enterprise.inject.spi.Extension; | ||
| 10 | + | ||
| 11 | +import br.gov.frameworkdemoiselle.context.CustomContext; | ||
| 12 | +import br.gov.frameworkdemoiselle.context.StaticContext; | ||
| 13 | +import br.gov.frameworkdemoiselle.internal.context.CustomContextProducer; | ||
| 14 | +import br.gov.frameworkdemoiselle.internal.context.RequestContextImpl; | ||
| 15 | +import br.gov.frameworkdemoiselle.internal.context.SessionContextImpl; | ||
| 16 | +import br.gov.frameworkdemoiselle.internal.context.StaticContextImpl; | ||
| 17 | +import br.gov.frameworkdemoiselle.internal.context.ThreadLocalViewContextImpl; | ||
| 18 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * This portable extension registers and starts custom contexts used by | ||
| 22 | + * the framework. | ||
| 23 | + * | ||
| 24 | + * @author serpro | ||
| 25 | + * | ||
| 26 | + */ | ||
| 27 | +public class CustomContextBootstrap implements Extension{ | ||
| 28 | + | ||
| 29 | + private List<CustomContext> contexts; | ||
| 30 | + | ||
| 31 | + /*private Logger logger; | ||
| 32 | + | ||
| 33 | + private transient ResourceBundle bundle; | ||
| 34 | + | ||
| 35 | + private Logger getLogger() { | ||
| 36 | + if (this.logger == null) { | ||
| 37 | + this.logger = LoggerProducer.create(CoreBootstrap.class); | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + return this.logger; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + private ResourceBundle getBundle() { | ||
| 44 | + if (bundle == null) { | ||
| 45 | + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault()); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + return bundle; | ||
| 49 | + }*/ | ||
| 50 | + | ||
| 51 | + public void initializeContexts(@Observes AfterBeanDiscovery event){ | ||
| 52 | + //Cadastra os contextos contidos no demoiselle-core | ||
| 53 | + if (contexts==null || contexts.isEmpty()){ | ||
| 54 | + CustomContext ctx; | ||
| 55 | + | ||
| 56 | + contexts = new ArrayList<CustomContext>(); | ||
| 57 | + | ||
| 58 | + ctx = new RequestContextImpl(); | ||
| 59 | + contexts.add(ctx); | ||
| 60 | + | ||
| 61 | + ctx = new SessionContextImpl(); | ||
| 62 | + contexts.add(ctx); | ||
| 63 | + | ||
| 64 | + ctx = new StaticContextImpl(); | ||
| 65 | + contexts.add(ctx); | ||
| 66 | + | ||
| 67 | + ctx = new ThreadLocalViewContextImpl(); | ||
| 68 | + contexts.add(ctx); | ||
| 69 | + | ||
| 70 | + for (CustomContext c : contexts){ | ||
| 71 | + event.addContext(c); | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + //Ativa um contexto para gerenciar o StaticScope, um escopo criado para gerenciar classes de configuração. | ||
| 76 | + for (CustomContext ctx : contexts){ | ||
| 77 | + if (ctx instanceof StaticContext){ | ||
| 78 | + StaticContext staticContext = (StaticContext)ctx; | ||
| 79 | + staticContext.activate(); | ||
| 80 | + break; | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + public void storeContexts(@Observes AfterDeploymentValidation event){ | ||
| 86 | + CustomContextProducer producer = Beans.getReference(CustomContextProducer.class); | ||
| 87 | + producer.addRegisteredContexts(contexts); | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ManagementBootstrap.java
| @@ -44,7 +44,6 @@ import java.util.Locale; | @@ -44,7 +44,6 @@ import java.util.Locale; | ||
| 44 | import java.util.Set; | 44 | import java.util.Set; |
| 45 | 45 | ||
| 46 | import javax.enterprise.event.Observes; | 46 | import javax.enterprise.event.Observes; |
| 47 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 48 | import javax.enterprise.inject.spi.AfterDeploymentValidation; | 47 | import javax.enterprise.inject.spi.AfterDeploymentValidation; |
| 49 | import javax.enterprise.inject.spi.AnnotatedType; | 48 | import javax.enterprise.inject.spi.AnnotatedType; |
| 50 | import javax.enterprise.inject.spi.Bean; | 49 | import javax.enterprise.inject.spi.Bean; |
| @@ -53,8 +52,6 @@ import javax.enterprise.inject.spi.Extension; | @@ -53,8 +52,6 @@ import javax.enterprise.inject.spi.Extension; | ||
| 53 | import javax.enterprise.inject.spi.ProcessAnnotatedType; | 52 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
| 54 | 53 | ||
| 55 | import br.gov.frameworkdemoiselle.DemoiselleException; | 54 | import br.gov.frameworkdemoiselle.DemoiselleException; |
| 56 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 57 | -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; | ||
| 58 | import br.gov.frameworkdemoiselle.internal.implementation.ManagedType; | 55 | import br.gov.frameworkdemoiselle.internal.implementation.ManagedType; |
| 59 | import br.gov.frameworkdemoiselle.internal.implementation.Management; | 56 | import br.gov.frameworkdemoiselle.internal.implementation.Management; |
| 60 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 57 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| @@ -76,10 +73,10 @@ public class ManagementBootstrap implements Extension { | @@ -76,10 +73,10 @@ public class ManagementBootstrap implements Extension { | ||
| 76 | } | 73 | } |
| 77 | } | 74 | } |
| 78 | 75 | ||
| 79 | - public void activateContexts(@Observes final AfterBeanDiscovery event) { | 76 | + /*public void activateContexts(@Observes final AfterBeanDiscovery event) { |
| 80 | ContextManager.initialize(event); | 77 | ContextManager.initialize(event); |
| 81 | ContextManager.add(new ManagedContext(), event); | 78 | ContextManager.add(new ManagedContext(), event); |
| 82 | - } | 79 | + }*/ |
| 83 | 80 | ||
| 84 | @SuppressWarnings("unchecked") | 81 | @SuppressWarnings("unchecked") |
| 85 | public void registerAvailableManagedTypes(@Observes final AfterDeploymentValidation event, BeanManager beanManager) { | 82 | public void registerAvailableManagedTypes(@Observes final AfterDeploymentValidation event, BeanManager beanManager) { |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java
| @@ -39,20 +39,34 @@ package br.gov.frameworkdemoiselle.internal.context; | @@ -39,20 +39,34 @@ package br.gov.frameworkdemoiselle.internal.context; | ||
| 39 | import java.lang.annotation.Annotation; | 39 | import java.lang.annotation.Annotation; |
| 40 | import java.util.Collections; | 40 | import java.util.Collections; |
| 41 | import java.util.HashMap; | 41 | import java.util.HashMap; |
| 42 | +import java.util.Locale; | ||
| 42 | import java.util.Map; | 43 | import java.util.Map; |
| 43 | 44 | ||
| 44 | import javax.enterprise.context.ContextNotActiveException; | 45 | import javax.enterprise.context.ContextNotActiveException; |
| 46 | +import javax.enterprise.context.spi.Context; | ||
| 45 | import javax.enterprise.context.spi.Contextual; | 47 | import javax.enterprise.context.spi.Contextual; |
| 46 | import javax.enterprise.context.spi.CreationalContext; | 48 | import javax.enterprise.context.spi.CreationalContext; |
| 47 | import javax.enterprise.inject.spi.Bean; | 49 | import javax.enterprise.inject.spi.Bean; |
| 50 | +import javax.enterprise.inject.spi.BeanManager; | ||
| 51 | + | ||
| 52 | +import org.slf4j.Logger; | ||
| 53 | + | ||
| 54 | +import br.gov.frameworkdemoiselle.context.CustomContext; | ||
| 55 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | ||
| 56 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 57 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
| 48 | 58 | ||
| 49 | public abstract class AbstractCustomContext implements CustomContext { | 59 | public abstract class AbstractCustomContext implements CustomContext { |
| 50 | 60 | ||
| 51 | private boolean active; | 61 | private boolean active; |
| 52 | 62 | ||
| 53 | private final Class<? extends Annotation> scope; | 63 | private final Class<? extends Annotation> scope; |
| 64 | + | ||
| 65 | + private Logger logger; | ||
| 66 | + | ||
| 67 | + private transient ResourceBundle bundle; | ||
| 54 | 68 | ||
| 55 | - public AbstractCustomContext(final Class<? extends Annotation> scope) { | 69 | + AbstractCustomContext(final Class<? extends Annotation> scope) { |
| 56 | this.scope = scope; | 70 | this.scope = scope; |
| 57 | this.active = false; | 71 | this.active = false; |
| 58 | } | 72 | } |
| @@ -97,14 +111,44 @@ public abstract class AbstractCustomContext implements CustomContext { | @@ -97,14 +111,44 @@ public abstract class AbstractCustomContext implements CustomContext { | ||
| 97 | return this.active; | 111 | return this.active; |
| 98 | } | 112 | } |
| 99 | 113 | ||
| 100 | - public void setActive(boolean active) { | ||
| 101 | - if (!active && this.active) { | ||
| 102 | - // Limpando contexto | 114 | + @Override |
| 115 | + public boolean activate() { | ||
| 116 | + if (!this.active){ | ||
| 117 | + BeanManager beanManager = Beans.getBeanManager(); | ||
| 118 | + if (beanManager!=null){ | ||
| 119 | + try{ | ||
| 120 | + Context ctx = beanManager.getContext(this.getScope()); | ||
| 121 | + if (ctx!=null){ | ||
| 122 | + getLogger().debug( getBundle().getString("custom-context-already-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() , ctx.getClass().getCanonicalName() ) ); | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + catch(ContextNotActiveException ce){ | ||
| 126 | + this.active = true; | ||
| 127 | + getLogger().debug( getBundle().getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) ); | ||
| 128 | + } | ||
| 129 | + } | ||
| 130 | + else{ | ||
| 131 | + this.active = true; | ||
| 132 | + getLogger().debug( getBundle().getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) ); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + return this.active; | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + @Override | ||
| 140 | + public void deactivate(){ | ||
| 141 | + if (this.active){ | ||
| 103 | if (isStoreInitialized()){ | 142 | if (isStoreInitialized()){ |
| 104 | getStore().clear(); | 143 | getStore().clear(); |
| 105 | } | 144 | } |
| 145 | + | ||
| 146 | + this.active = false; | ||
| 147 | + | ||
| 148 | + Logger logger = getLogger(); | ||
| 149 | + ResourceBundle bundle = getBundle(); | ||
| 150 | + logger.debug( bundle.getString("custom-context-was-deactivated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) ); | ||
| 106 | } | 151 | } |
| 107 | - this.active = active; | ||
| 108 | } | 152 | } |
| 109 | 153 | ||
| 110 | @Override | 154 | @Override |
| @@ -115,6 +159,22 @@ public abstract class AbstractCustomContext implements CustomContext { | @@ -115,6 +159,22 @@ public abstract class AbstractCustomContext implements CustomContext { | ||
| 115 | protected static Store createStore() { | 159 | protected static Store createStore() { |
| 116 | return new Store(); | 160 | return new Store(); |
| 117 | } | 161 | } |
| 162 | + | ||
| 163 | + private ResourceBundle getBundle(){ | ||
| 164 | + if (bundle==null){ | ||
| 165 | + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault()); | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + return bundle; | ||
| 169 | + } | ||
| 170 | + | ||
| 171 | + private Logger getLogger(){ | ||
| 172 | + if (logger==null){ | ||
| 173 | + logger = LoggerProducer.create(this.getClass()); | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + return logger; | ||
| 177 | + } | ||
| 118 | 178 | ||
| 119 | static class Store { | 179 | static class Store { |
| 120 | 180 |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java
0 → 100644
| @@ -0,0 +1,79 @@ | @@ -0,0 +1,79 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | + | ||
| 39 | +import java.lang.annotation.Annotation; | ||
| 40 | + | ||
| 41 | +import br.gov.frameworkdemoiselle.annotation.Priority; | ||
| 42 | +import br.gov.frameworkdemoiselle.annotation.StaticScoped; | ||
| 43 | +import br.gov.frameworkdemoiselle.configuration.Configuration; | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * | ||
| 47 | + * <p>This context has a unified static store that keeps all scoped beans available | ||
| 48 | + * to all threads of an application. It is intended to keep beans avaliable to | ||
| 49 | + * long lasting scopes (like the Session scope and Application scope) on environments | ||
| 50 | + * that lack those scopes by default (like desktop Swing applications).</p> | ||
| 51 | + * | ||
| 52 | + * <p>This context also keeps beans of the custom {@link StaticScoped} scope, like the beans | ||
| 53 | + * annotated with {@link Configuration}.</p> | ||
| 54 | + * | ||
| 55 | + * @author serpro | ||
| 56 | + * | ||
| 57 | + */ | ||
| 58 | +@Priority(Priority.MIN_PRIORITY) | ||
| 59 | +public abstract class AbstractStaticContext extends AbstractCustomContext { | ||
| 60 | + | ||
| 61 | + private final static Store store = createStore(); | ||
| 62 | + | ||
| 63 | + /** | ||
| 64 | + * Constructs this context to control the provided scope | ||
| 65 | + */ | ||
| 66 | + AbstractStaticContext(Class<? extends Annotation> scope) { | ||
| 67 | + super(scope); | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @Override | ||
| 71 | + protected Store getStore() { | ||
| 72 | + return store; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + @Override | ||
| 76 | + protected boolean isStoreInitialized() { | ||
| 77 | + return store!=null; | ||
| 78 | + } | ||
| 79 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractThreadLocalContext.java
0 → 100644
| @@ -0,0 +1,81 @@ | @@ -0,0 +1,81 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +/* | ||
| 38 | + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | + * <http://www.gnu.org/licenses/>. | ||
| 48 | + */ | ||
| 49 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | + | ||
| 51 | +import java.lang.annotation.Annotation; | ||
| 52 | + | ||
| 53 | +/** | ||
| 54 | + * This context keeps a separated store for beans for each running thread. It is intended | ||
| 55 | + * to keep beans of short lived scopes like the Request scope, on environments that lack | ||
| 56 | + * those scopes by default. | ||
| 57 | + * | ||
| 58 | + * @author serpro | ||
| 59 | + */ | ||
| 60 | +public abstract class AbstractThreadLocalContext extends AbstractCustomContext { | ||
| 61 | + | ||
| 62 | + private final ThreadLocal<Store> threadLocal = new ThreadLocal<Store>(); | ||
| 63 | + | ||
| 64 | + AbstractThreadLocalContext(final Class<? extends Annotation> scope) { | ||
| 65 | + super(scope); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @Override | ||
| 69 | + protected boolean isStoreInitialized() { | ||
| 70 | + return threadLocal.get()!=null; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + @Override | ||
| 74 | + protected Store getStore() { | ||
| 75 | + if (this.threadLocal.get() == null) { | ||
| 76 | + this.threadLocal.set(createStore()); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + return this.threadLocal.get(); | ||
| 80 | + } | ||
| 81 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java
| @@ -1,360 +0,0 @@ | @@ -1,360 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import java.lang.annotation.Annotation; | ||
| 40 | -import java.util.ArrayList; | ||
| 41 | -import java.util.Collections; | ||
| 42 | -import java.util.HashMap; | ||
| 43 | -import java.util.List; | ||
| 44 | -import java.util.Locale; | ||
| 45 | -import java.util.Map; | ||
| 46 | - | ||
| 47 | -import javax.enterprise.context.ContextNotActiveException; | ||
| 48 | -import javax.enterprise.context.spi.Context; | ||
| 49 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 50 | -import javax.enterprise.inject.spi.BeanManager; | ||
| 51 | - | ||
| 52 | -import org.slf4j.Logger; | ||
| 53 | - | ||
| 54 | -import br.gov.frameworkdemoiselle.DemoiselleException; | ||
| 55 | -import br.gov.frameworkdemoiselle.annotation.StaticScoped; | ||
| 56 | -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | ||
| 57 | -import br.gov.frameworkdemoiselle.util.Beans; | ||
| 58 | -import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
| 59 | - | ||
| 60 | -/** | ||
| 61 | - * <p> | ||
| 62 | - * Manage custom contexts relevant to Demoiselle operations. | ||
| 63 | - * </p> | ||
| 64 | - * <p> | ||
| 65 | - * When starting, the ContextManager must be initialized by calling {@link #initialize(AfterBeanDiscovery event)} inside | ||
| 66 | - * any methods observing the {@link AfterBeanDiscovery} event. Upon initialization a {@link StaticContext} will be | ||
| 67 | - * created to handle {@link StaticScoped} beans (but not activated, you must call | ||
| 68 | - * {@link #activate(Class customContextClass, Class scope)} to activate this context). | ||
| 69 | - * </p> | ||
| 70 | - * <p> | ||
| 71 | - * If an extension wants to manage another custom context, it must first call | ||
| 72 | - * {@link #add(CustomContext context, AfterBeanDiscovery event)} to add it's context to the list of managed contexts and | ||
| 73 | - * then call {@link #activate(Class customContextClass, Class scope)} whenever it wants to activate this added context | ||
| 74 | - * (contexts added through the {@link #add(CustomContext context, AfterBeanDiscovery event)} method are also not | ||
| 75 | - * activated upon adding). | ||
| 76 | - * </p> | ||
| 77 | - * | ||
| 78 | - * @author SERPRO | ||
| 79 | - */ | ||
| 80 | -public final class ContextManager { | ||
| 81 | - | ||
| 82 | - private static final Map<ClassLoader, List<CustomContextCounter>> contextsCache = Collections | ||
| 83 | - .synchronizedMap(new HashMap<ClassLoader, List<CustomContextCounter>>()); | ||
| 84 | - | ||
| 85 | - private static final Map<ClassLoader, Boolean> initializedCache = Collections | ||
| 86 | - .synchronizedMap(new HashMap<ClassLoader, Boolean>()); | ||
| 87 | - | ||
| 88 | - private ContextManager() { | ||
| 89 | - } | ||
| 90 | - | ||
| 91 | - private synchronized static List<CustomContextCounter> getContexts() { | ||
| 92 | - List<CustomContextCounter> contexts = contextsCache.get(getCurrentClassLoader()); | ||
| 93 | - | ||
| 94 | - if (contexts == null) { | ||
| 95 | - contexts = Collections.synchronizedList(new ArrayList<CustomContextCounter>()); | ||
| 96 | - contextsCache.put(getCurrentClassLoader(), contexts); | ||
| 97 | - } | ||
| 98 | - | ||
| 99 | - return contexts; | ||
| 100 | - } | ||
| 101 | - | ||
| 102 | - private synchronized static boolean isInitialized() { | ||
| 103 | - Boolean initialized = initializedCache.get(getCurrentClassLoader()); | ||
| 104 | - | ||
| 105 | - if (initialized == null) { | ||
| 106 | - initialized = false; | ||
| 107 | - initializedCache.put(getCurrentClassLoader(), initialized); | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - return initialized; | ||
| 111 | - } | ||
| 112 | - | ||
| 113 | - private static void setInitialized(boolean initialized) { | ||
| 114 | - initializedCache.put(getCurrentClassLoader(), initialized); | ||
| 115 | - } | ||
| 116 | - | ||
| 117 | - private static ClassLoader getCurrentClassLoader() { | ||
| 118 | - return Thread.currentThread().getContextClassLoader(); | ||
| 119 | - } | ||
| 120 | - | ||
| 121 | - /** | ||
| 122 | - * <p> | ||
| 123 | - * Initializes this manager and adds the {@link StaticContext} context to the list of managed contexts. Other | ||
| 124 | - * contexts must be added before they can be activated. | ||
| 125 | - * </p> | ||
| 126 | - * <p> | ||
| 127 | - * It's OK to call this method multiple times, it will be initialized only once. | ||
| 128 | - * </p> | ||
| 129 | - * | ||
| 130 | - * @param event | ||
| 131 | - * The CDI event indicating all beans have been discovered. | ||
| 132 | - */ | ||
| 133 | - public static void initialize(AfterBeanDiscovery event) { | ||
| 134 | - if (isInitialized()) { | ||
| 135 | - return; | ||
| 136 | - } | ||
| 137 | - | ||
| 138 | - add(new StaticContext(), event); | ||
| 139 | - setInitialized(true); | ||
| 140 | - } | ||
| 141 | - | ||
| 142 | - /** | ||
| 143 | - * <p> | ||
| 144 | - * Adds a context to the list of managed contexts. | ||
| 145 | - * </p> | ||
| 146 | - * <p> | ||
| 147 | - * A context added through this method will be deactivated before management can start. Only after calling | ||
| 148 | - * {@link #activate(Class customContextClass, Class scope)} the context will be activated. | ||
| 149 | - * </p> | ||
| 150 | - * <p> | ||
| 151 | - * Trying to add a context already managed will result in this method call being ignored. | ||
| 152 | - * </p> | ||
| 153 | - * | ||
| 154 | - * @param context | ||
| 155 | - * The context to be added | ||
| 156 | - * @param event | ||
| 157 | - * The CDI event indicating all beans have been discovered. | ||
| 158 | - */ | ||
| 159 | - public static void add(CustomContext context, AfterBeanDiscovery event) { | ||
| 160 | - for (CustomContextCounter contextCounter : getContexts()) { | ||
| 161 | - if (contextCounter.isSame(context.getClass(), context.getScope())) { | ||
| 162 | - | ||
| 163 | - ContextManager.getLogger().trace( | ||
| 164 | - ContextManager.getBundle().getString("bootstrap-context-already-managed", | ||
| 165 | - context.getClass().getCanonicalName(), context.getScope().getCanonicalName())); | ||
| 166 | - | ||
| 167 | - return; | ||
| 168 | - } | ||
| 169 | - } | ||
| 170 | - | ||
| 171 | - ContextManager.getLogger().trace( | ||
| 172 | - ContextManager.getBundle().getString("bootstrap-context-added", context.getClass().getCanonicalName(), | ||
| 173 | - context.getScope().getCanonicalName())); | ||
| 174 | - | ||
| 175 | - context.setActive(false); | ||
| 176 | - event.addContext(context); | ||
| 177 | - getContexts().add(new CustomContextCounter(context)); | ||
| 178 | - } | ||
| 179 | - | ||
| 180 | - /** | ||
| 181 | - * <p> | ||
| 182 | - * Activates a managed context. | ||
| 183 | - * </p> | ||
| 184 | - * <p> | ||
| 185 | - * To be activated, a context must fulfill the following requisites: | ||
| 186 | - * <ul> | ||
| 187 | - * <li>Must be managed by this class (be of type {@link StaticScoped} or be added with | ||
| 188 | - * {@link #add(CustomContext context, AfterBeanDiscovery event)})</li> | ||
| 189 | - * <li>Must be of a scope not already attached to another active context</li> | ||
| 190 | - * </ul> | ||
| 191 | - * </p> | ||
| 192 | - * | ||
| 193 | - * @param customContextClass | ||
| 194 | - * Type of context to activate | ||
| 195 | - * @param scope | ||
| 196 | - * The scope to activate this context for | ||
| 197 | - * @return <code>true</code> if there is a managed context of the provided type and scope and no other context is | ||
| 198 | - * active for the provided scope, <code>false</code> if there is a managed context of the provided type and | ||
| 199 | - * scope but another context is active for the provided scope. | ||
| 200 | - * @throws DemoiselleException | ||
| 201 | - * if there is no managed context of the provided type and scope. | ||
| 202 | - */ | ||
| 203 | - public static synchronized void activate(Class<? extends CustomContext> customContextClass, | ||
| 204 | - Class<? extends Annotation> scope) { | ||
| 205 | - if (!isInitialized()) { | ||
| 206 | - throw new DemoiselleException(getBundle().getString("custom-context-manager-not-initialized")); | ||
| 207 | - } | ||
| 208 | - | ||
| 209 | - for (CustomContextCounter context : getContexts()) { | ||
| 210 | - if (context.isSame(customContextClass, scope)) { | ||
| 211 | - context.activate(); | ||
| 212 | - return; | ||
| 213 | - } | ||
| 214 | - } | ||
| 215 | - | ||
| 216 | - throw new DemoiselleException(getBundle().getString("custom-context-not-found", | ||
| 217 | - customContextClass.getCanonicalName(), scope.getSimpleName())); | ||
| 218 | - } | ||
| 219 | - | ||
| 220 | - /** | ||
| 221 | - * <p> | ||
| 222 | - * Deactivates a managed context. | ||
| 223 | - * </p> | ||
| 224 | - * <p> | ||
| 225 | - * To be deactivated, a context must fulfill the following requisites: | ||
| 226 | - * <ul> | ||
| 227 | - * <li>Must be managed by this class (be of type {@link StaticScoped} or be added with | ||
| 228 | - * {@link #add(CustomContext context, AfterBeanDiscovery event)})</li> | ||
| 229 | - * <li>Must have been activated by a previous call to {@link #activate(Class customContextClass, Class scope)}</li> | ||
| 230 | - * <li>This previous call must have returned <code>true</code>. | ||
| 231 | - * </ul> | ||
| 232 | - * </p> | ||
| 233 | - * | ||
| 234 | - * @param customContextClass | ||
| 235 | - * Type of context to deactivate | ||
| 236 | - * @param scope | ||
| 237 | - * The scope the context controled when it was active | ||
| 238 | - * @return <code>true</code> if there was an active context of this type and scope and it was activated by a | ||
| 239 | - * previous call to {@link #activate(Class customContextClass, Class scope)} | ||
| 240 | - * @throws DemoiselleException | ||
| 241 | - * if there is no managed context of the provided type and scope. | ||
| 242 | - */ | ||
| 243 | - public static synchronized void deactivate(Class<? extends CustomContext> customContextClass, | ||
| 244 | - Class<? extends Annotation> scope) { | ||
| 245 | - if (!isInitialized()) { | ||
| 246 | - throw new DemoiselleException(getBundle().getString("custom-context-manager-not-initialized")); | ||
| 247 | - } | ||
| 248 | - | ||
| 249 | - for (CustomContextCounter context : getContexts()) { | ||
| 250 | - if (context.isSame(customContextClass, scope)) { | ||
| 251 | - context.deactivate(); | ||
| 252 | - return; | ||
| 253 | - } | ||
| 254 | - } | ||
| 255 | - | ||
| 256 | - throw new DemoiselleException(getBundle().getString("custom-context-not-found", | ||
| 257 | - customContextClass.getCanonicalName(), scope.getSimpleName())); | ||
| 258 | - } | ||
| 259 | - | ||
| 260 | - /** | ||
| 261 | - * <p> | ||
| 262 | - * This method should be called when the application is shutting down. | ||
| 263 | - * </p> | ||
| 264 | - */ | ||
| 265 | - public static synchronized void shutdown() { | ||
| 266 | - for (CustomContextCounter context : getContexts()) { | ||
| 267 | - context.shutdown(); | ||
| 268 | - } | ||
| 269 | - | ||
| 270 | - getContexts().clear(); | ||
| 271 | - setInitialized(false); | ||
| 272 | - } | ||
| 273 | - | ||
| 274 | - static Logger getLogger() { | ||
| 275 | - return LoggerProducer.create(ContextManager.class); | ||
| 276 | - } | ||
| 277 | - | ||
| 278 | - static ResourceBundle getBundle() { | ||
| 279 | - return new ResourceBundle("demoiselle-core-bundle", Locale.getDefault()); | ||
| 280 | - } | ||
| 281 | -} | ||
| 282 | - | ||
| 283 | -/** | ||
| 284 | - * Class that counts how many attemps to activate and deactivate this context received, avoiding cases where one client | ||
| 285 | - * activates given context and another one deactivates it, leaving the first client with no active context before | ||
| 286 | - * completion. | ||
| 287 | - * | ||
| 288 | - * @author serpro | ||
| 289 | - */ | ||
| 290 | -class CustomContextCounter { | ||
| 291 | - | ||
| 292 | - private CustomContext context; | ||
| 293 | - | ||
| 294 | - private int activationCounter = 0; | ||
| 295 | - | ||
| 296 | - public CustomContextCounter(CustomContext customContext) { | ||
| 297 | - this.context = customContext; | ||
| 298 | - } | ||
| 299 | - | ||
| 300 | - public boolean isSame(Class<? extends CustomContext> customContextClass, Class<? extends Annotation> scope) { | ||
| 301 | - if (context.getClass().getCanonicalName().equals(customContextClass.getCanonicalName()) | ||
| 302 | - && context.getScope().equals(scope)) { | ||
| 303 | - return true; | ||
| 304 | - } | ||
| 305 | - | ||
| 306 | - return false; | ||
| 307 | - } | ||
| 308 | - | ||
| 309 | - public CustomContext getInternalContext() { | ||
| 310 | - return this.context; | ||
| 311 | - } | ||
| 312 | - | ||
| 313 | - public void setInternalContext(CustomContext context) { | ||
| 314 | - this.context = context; | ||
| 315 | - } | ||
| 316 | - | ||
| 317 | - public synchronized void activate() { | ||
| 318 | - try { | ||
| 319 | - BeanManager beanManager = Beans.getReference(BeanManager.class); | ||
| 320 | - Context c = beanManager.getContext(context.getScope()); | ||
| 321 | - | ||
| 322 | - if (c == context) { | ||
| 323 | - activationCounter++; | ||
| 324 | - } else { | ||
| 325 | - ContextManager.getLogger().trace( | ||
| 326 | - ContextManager.getBundle().getString("custom-context-already-activated", | ||
| 327 | - context.getClass().getCanonicalName(), c.getScope().getCanonicalName(), | ||
| 328 | - c.getClass().getCanonicalName())); | ||
| 329 | - } | ||
| 330 | - } catch (ContextNotActiveException ce) { | ||
| 331 | - context.setActive(true); | ||
| 332 | - activationCounter++; | ||
| 333 | - ContextManager.getLogger().trace( | ||
| 334 | - ContextManager.getBundle().getString("custom-context-was-activated", | ||
| 335 | - context.getClass().getCanonicalName(), context.getScope().getCanonicalName())); | ||
| 336 | - } | ||
| 337 | - } | ||
| 338 | - | ||
| 339 | - public synchronized void deactivate() { | ||
| 340 | - try { | ||
| 341 | - Context c = Beans.getBeanManager().getContext(context.getScope()); | ||
| 342 | - if (c == context) { | ||
| 343 | - activationCounter--; | ||
| 344 | - if (activationCounter == 0) { | ||
| 345 | - context.setActive(false); | ||
| 346 | - ContextManager.getLogger().trace( | ||
| 347 | - ContextManager.getBundle().getString("custom-context-was-deactivated", | ||
| 348 | - context.getClass().getCanonicalName(), context.getScope().getCanonicalName())); | ||
| 349 | - } | ||
| 350 | - } | ||
| 351 | - } catch (ContextNotActiveException ce) { | ||
| 352 | - } | ||
| 353 | - } | ||
| 354 | - | ||
| 355 | - public synchronized void shutdown() { | ||
| 356 | - context.setActive(false); | ||
| 357 | - context = null; | ||
| 358 | - activationCounter = 0; | ||
| 359 | - } | ||
| 360 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java
| @@ -1,45 +0,0 @@ | @@ -1,45 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import javax.enterprise.context.spi.Context; | ||
| 40 | - | ||
| 41 | -public interface CustomContext extends Context { | ||
| 42 | - | ||
| 43 | - void setActive(boolean active); | ||
| 44 | - | ||
| 45 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java
0 → 100644
| @@ -0,0 +1,160 @@ | @@ -0,0 +1,160 @@ | ||
| 1 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 2 | + | ||
| 3 | +import java.util.ArrayList; | ||
| 4 | +import java.util.Collection; | ||
| 5 | +import java.util.List; | ||
| 6 | +import java.util.Locale; | ||
| 7 | + | ||
| 8 | +import javax.annotation.PreDestroy; | ||
| 9 | +import javax.enterprise.context.ApplicationScoped; | ||
| 10 | +import javax.enterprise.inject.Produces; | ||
| 11 | +import javax.enterprise.inject.spi.InjectionPoint; | ||
| 12 | + | ||
| 13 | +import org.slf4j.Logger; | ||
| 14 | + | ||
| 15 | +import br.gov.frameworkdemoiselle.context.CustomContext; | ||
| 16 | +import br.gov.frameworkdemoiselle.context.RequestContext; | ||
| 17 | +import br.gov.frameworkdemoiselle.context.SessionContext; | ||
| 18 | +import br.gov.frameworkdemoiselle.context.StaticContext; | ||
| 19 | +import br.gov.frameworkdemoiselle.context.ViewContext; | ||
| 20 | +import br.gov.frameworkdemoiselle.internal.bootstrap.CustomContextBootstrap; | ||
| 21 | +import br.gov.frameworkdemoiselle.internal.implementation.StrategySelector; | ||
| 22 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | ||
| 23 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * Produces instances of {@link CustomContext} to control contexts not active | ||
| 27 | + * by the container | ||
| 28 | + * | ||
| 29 | + * @author serpro | ||
| 30 | + * | ||
| 31 | + */ | ||
| 32 | +@ApplicationScoped | ||
| 33 | +public class CustomContextProducer { | ||
| 34 | + | ||
| 35 | + private Logger logger; | ||
| 36 | + | ||
| 37 | + private transient ResourceBundle bundle; | ||
| 38 | + | ||
| 39 | + private List<CustomContext> contexts = new ArrayList<CustomContext>(); | ||
| 40 | + | ||
| 41 | + /** | ||
| 42 | + * Store a list of contexts into this producer. The contexts must have | ||
| 43 | + * been registered into CDI by a portable extension, this method will not do this. | ||
| 44 | + * | ||
| 45 | + */ | ||
| 46 | + public void addRegisteredContexts(Collection<CustomContext> contexts){ | ||
| 47 | + for (CustomContext context : contexts){ | ||
| 48 | + addRegisteredContext(context); | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + /** | ||
| 53 | + * Store a context into this producer. The context must have | ||
| 54 | + * been registered into CDI by a portable extension, this method will not do this. | ||
| 55 | + * | ||
| 56 | + */ | ||
| 57 | + public void addRegisteredContext(CustomContext context){ | ||
| 58 | + Logger logger = getLogger(); | ||
| 59 | + ResourceBundle bundle = getBundle(); | ||
| 60 | + | ||
| 61 | + if (!contexts.contains(context)){ | ||
| 62 | + contexts.add(context); | ||
| 63 | + logger.debug( bundle.getString("bootstrap-context-added", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) ); | ||
| 64 | + } | ||
| 65 | + else{ | ||
| 66 | + logger.debug( bundle.getString("bootstrap-context-already-managed", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) ); | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + /** | ||
| 71 | + * Deactivates all registered contexts and clear the context collection | ||
| 72 | + */ | ||
| 73 | + @PreDestroy | ||
| 74 | + public void closeContexts(){ | ||
| 75 | + //Desativa todos os contextos registrados. | ||
| 76 | + for (CustomContext context : contexts){ | ||
| 77 | + context.deactivate(); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + contexts.clear(); | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @Produces | ||
| 84 | + public RequestContext getRequestContext(InjectionPoint ip , CustomContextBootstrap extension){ | ||
| 85 | + return getContext(ip, extension); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + @Produces | ||
| 89 | + public SessionContext getSessionContext(InjectionPoint ip , CustomContextBootstrap extension){ | ||
| 90 | + return getContext(ip, extension); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + @Produces | ||
| 94 | + public ViewContext getViewContext(InjectionPoint ip , CustomContextBootstrap extension){ | ||
| 95 | + return getContext(ip, extension); | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + @Produces | ||
| 99 | + public StaticContext getStaticContext(InjectionPoint ip , CustomContextBootstrap extension){ | ||
| 100 | + return getContext(ip, extension); | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + | ||
| 104 | + @SuppressWarnings("unchecked") | ||
| 105 | + private <T extends CustomContext> T getContext(InjectionPoint ip , CustomContextBootstrap extension){ | ||
| 106 | + T producedContext = null; | ||
| 107 | + | ||
| 108 | + if (ip!=null){ | ||
| 109 | + Class<T> beanClass = (Class<T>) ip.getType(); | ||
| 110 | + producedContext = (T) getContext(beanClass); | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + if (producedContext!=null){ | ||
| 114 | + getLogger().debug( getBundle().getString("custom-context-selected" , producedContext.getClass().getCanonicalName()) ); | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + return producedContext; | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + private CustomContext getContext(Class<? extends CustomContext> contextClass){ | ||
| 121 | + CustomContext producedContext = null; | ||
| 122 | + | ||
| 123 | + ArrayList<CustomContext> selectableContexts = new ArrayList<CustomContext>(); | ||
| 124 | + | ||
| 125 | + for (CustomContext context : contexts){ | ||
| 126 | + if ( contextClass.isAssignableFrom( context.getClass() ) ){ | ||
| 127 | + if (context.isActive()){ | ||
| 128 | + producedContext = context; | ||
| 129 | + break; | ||
| 130 | + } | ||
| 131 | + else{ | ||
| 132 | + selectableContexts.add(context); | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + if (producedContext==null && !selectableContexts.isEmpty()){ | ||
| 138 | + producedContext = StrategySelector.selectInstance(CustomContext.class, selectableContexts); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + return producedContext; | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + private Logger getLogger() { | ||
| 145 | + if (this.logger == null) { | ||
| 146 | + this.logger = LoggerProducer.create(this.getClass()); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + return this.logger; | ||
| 150 | + } | ||
| 151 | + | ||
| 152 | + private ResourceBundle getBundle() { | ||
| 153 | + if (bundle == null) { | ||
| 154 | + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault()); | ||
| 155 | + } | ||
| 156 | + | ||
| 157 | + return bundle; | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ManagedContext.java
| @@ -1,58 +0,0 @@ | @@ -1,58 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import javax.enterprise.context.RequestScoped; | ||
| 40 | - | ||
| 41 | -import br.gov.frameworkdemoiselle.stereotype.ManagementController; | ||
| 42 | - | ||
| 43 | -/** | ||
| 44 | - * Context that stores {@link RequestScoped} beans during client calls to {@link ManagementController} classes. This | ||
| 45 | - * context is only activated when no other context is active for {@link RequestScoped}. | ||
| 46 | - * | ||
| 47 | - * @author SERPRO | ||
| 48 | - */ | ||
| 49 | -public class ManagedContext extends ThreadLocalContext { | ||
| 50 | - | ||
| 51 | - /** | ||
| 52 | - * Constructs a new context. | ||
| 53 | - */ | ||
| 54 | - public ManagedContext() { | ||
| 55 | - super(RequestScoped.class); | ||
| 56 | - } | ||
| 57 | - | ||
| 58 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/RequestContextImpl.java
0 → 100644
| @@ -0,0 +1,71 @@ | @@ -0,0 +1,71 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +/* | ||
| 38 | + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | + * <http://www.gnu.org/licenses/>. | ||
| 48 | + */ | ||
| 49 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | + | ||
| 51 | +import javax.enterprise.context.RequestScoped; | ||
| 52 | +import javax.enterprise.inject.Alternative; | ||
| 53 | + | ||
| 54 | +import br.gov.frameworkdemoiselle.annotation.Priority; | ||
| 55 | +import br.gov.frameworkdemoiselle.context.RequestContext; | ||
| 56 | + | ||
| 57 | +/** | ||
| 58 | + * Custom request context that stores beans in a thread local store. | ||
| 59 | + * | ||
| 60 | + * @author serpro | ||
| 61 | + * | ||
| 62 | + */ | ||
| 63 | +@Priority(Priority.MIN_PRIORITY) | ||
| 64 | +@Alternative | ||
| 65 | +public class RequestContextImpl extends AbstractThreadLocalContext implements RequestContext { | ||
| 66 | + | ||
| 67 | + public RequestContextImpl() { | ||
| 68 | + super(RequestScoped.class); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/SessionContextImpl.java
0 → 100644
| @@ -0,0 +1,71 @@ | @@ -0,0 +1,71 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +/* | ||
| 38 | + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | + * <http://www.gnu.org/licenses/>. | ||
| 48 | + */ | ||
| 49 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | + | ||
| 51 | +import javax.enterprise.context.SessionScoped; | ||
| 52 | +import javax.enterprise.inject.Alternative; | ||
| 53 | + | ||
| 54 | +import br.gov.frameworkdemoiselle.annotation.Priority; | ||
| 55 | +import br.gov.frameworkdemoiselle.context.SessionContext; | ||
| 56 | + | ||
| 57 | + | ||
| 58 | +/** | ||
| 59 | + * | ||
| 60 | + * @author serpro | ||
| 61 | + * | ||
| 62 | + */ | ||
| 63 | +@Priority(Priority.MIN_PRIORITY) | ||
| 64 | +@Alternative | ||
| 65 | +public class SessionContextImpl extends AbstractStaticContext implements SessionContext { | ||
| 66 | + | ||
| 67 | + public SessionContextImpl() { | ||
| 68 | + super(SessionScoped.class); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java
| @@ -1,58 +0,0 @@ | @@ -1,58 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import br.gov.frameworkdemoiselle.annotation.StaticScoped; | ||
| 40 | - | ||
| 41 | -public class StaticContext extends AbstractCustomContext { | ||
| 42 | - | ||
| 43 | - private final static Store store = createStore(); | ||
| 44 | - | ||
| 45 | - public StaticContext() { | ||
| 46 | - super(StaticScoped.class); | ||
| 47 | - } | ||
| 48 | - | ||
| 49 | - @Override | ||
| 50 | - protected Store getStore() { | ||
| 51 | - return store; | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - @Override | ||
| 55 | - protected boolean isStoreInitialized() { | ||
| 56 | - return store!=null; | ||
| 57 | - } | ||
| 58 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContextImpl.java
0 → 100644
| @@ -0,0 +1,64 @@ | @@ -0,0 +1,64 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +/* | ||
| 38 | + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | + * <http://www.gnu.org/licenses/>. | ||
| 48 | + */ | ||
| 49 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | + | ||
| 51 | +import javax.enterprise.inject.Alternative; | ||
| 52 | + | ||
| 53 | +import br.gov.frameworkdemoiselle.annotation.Priority; | ||
| 54 | +import br.gov.frameworkdemoiselle.annotation.StaticScoped; | ||
| 55 | +import br.gov.frameworkdemoiselle.context.StaticContext; | ||
| 56 | + | ||
| 57 | +@Priority(Priority.MIN_PRIORITY) | ||
| 58 | +@Alternative | ||
| 59 | +public class StaticContextImpl extends AbstractStaticContext implements StaticContext { | ||
| 60 | + | ||
| 61 | + public StaticContextImpl() { | ||
| 62 | + super(StaticScoped.class); | ||
| 63 | + } | ||
| 64 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java
| @@ -1,79 +0,0 @@ | @@ -1,79 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -/* | ||
| 38 | - * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | - * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | - * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | - * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | - * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | - * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | - * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | - * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | - * <http://www.gnu.org/licenses/>. | ||
| 48 | - */ | ||
| 49 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | - | ||
| 51 | -import java.lang.annotation.Annotation; | ||
| 52 | - | ||
| 53 | -/** | ||
| 54 | - * Base context that has a separated store for each thread | ||
| 55 | - * | ||
| 56 | - * @author SERPRO | ||
| 57 | - */ | ||
| 58 | -public class ThreadLocalContext extends AbstractCustomContext { | ||
| 59 | - | ||
| 60 | - private final ThreadLocal<Store> threadLocal = new ThreadLocal<Store>(); | ||
| 61 | - | ||
| 62 | - public ThreadLocalContext(final Class<? extends Annotation> scope) { | ||
| 63 | - super(scope); | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - @Override | ||
| 67 | - protected boolean isStoreInitialized() { | ||
| 68 | - return threadLocal.get()!=null; | ||
| 69 | - } | ||
| 70 | - | ||
| 71 | - @Override | ||
| 72 | - protected Store getStore() { | ||
| 73 | - if (this.threadLocal.get() == null) { | ||
| 74 | - this.threadLocal.set(createStore()); | ||
| 75 | - } | ||
| 76 | - | ||
| 77 | - return this.threadLocal.get(); | ||
| 78 | - } | ||
| 79 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalViewContextImpl.java
0 → 100644
| @@ -0,0 +1,65 @@ | @@ -0,0 +1,65 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +/* | ||
| 38 | + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the | ||
| 39 | + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE | ||
| 40 | + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is | ||
| 41 | + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part | ||
| 42 | + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the | ||
| 43 | + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework | ||
| 44 | + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 45 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You | ||
| 46 | + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see | ||
| 47 | + * <http://www.gnu.org/licenses/>. | ||
| 48 | + */ | ||
| 49 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 50 | + | ||
| 51 | +import javax.enterprise.inject.Alternative; | ||
| 52 | + | ||
| 53 | +import br.gov.frameworkdemoiselle.annotation.Priority; | ||
| 54 | +import br.gov.frameworkdemoiselle.annotation.ViewScoped; | ||
| 55 | +import br.gov.frameworkdemoiselle.context.ViewContext; | ||
| 56 | + | ||
| 57 | +@Priority(Priority.MIN_PRIORITY) | ||
| 58 | +@Alternative | ||
| 59 | +public class ThreadLocalViewContextImpl extends AbstractThreadLocalContext implements ViewContext { | ||
| 60 | + | ||
| 61 | + public ThreadLocalViewContextImpl() { | ||
| 62 | + super(ViewScoped.class); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | +} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/Management.java
| @@ -44,7 +44,6 @@ import java.util.List; | @@ -44,7 +44,6 @@ import java.util.List; | ||
| 44 | import java.util.Set; | 44 | import java.util.Set; |
| 45 | 45 | ||
| 46 | import javax.enterprise.context.ApplicationScoped; | 46 | import javax.enterprise.context.ApplicationScoped; |
| 47 | -import javax.enterprise.context.RequestScoped; | ||
| 48 | import javax.inject.Inject; | 47 | import javax.inject.Inject; |
| 49 | import javax.validation.ConstraintViolation; | 48 | import javax.validation.ConstraintViolation; |
| 50 | import javax.validation.ConstraintViolationException; | 49 | import javax.validation.ConstraintViolationException; |
| @@ -56,8 +55,10 @@ import org.slf4j.Logger; | @@ -56,8 +55,10 @@ import org.slf4j.Logger; | ||
| 56 | 55 | ||
| 57 | import br.gov.frameworkdemoiselle.annotation.ManagedProperty; | 56 | import br.gov.frameworkdemoiselle.annotation.ManagedProperty; |
| 58 | import br.gov.frameworkdemoiselle.annotation.Name; | 57 | import br.gov.frameworkdemoiselle.annotation.Name; |
| 59 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 60 | -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; | 58 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 59 | +import br.gov.frameworkdemoiselle.context.SessionContext; | ||
| 60 | +import br.gov.frameworkdemoiselle.context.ViewContext; | ||
| 61 | +import br.gov.frameworkdemoiselle.internal.implementation.ManagedType; | ||
| 61 | import br.gov.frameworkdemoiselle.internal.implementation.ManagedType.MethodDetail; | 62 | import br.gov.frameworkdemoiselle.internal.implementation.ManagedType.MethodDetail; |
| 62 | import br.gov.frameworkdemoiselle.management.AttributeChangeNotification; | 63 | import br.gov.frameworkdemoiselle.management.AttributeChangeNotification; |
| 63 | import br.gov.frameworkdemoiselle.management.ManagedAttributeNotFoundException; | 64 | import br.gov.frameworkdemoiselle.management.ManagedAttributeNotFoundException; |
| @@ -301,36 +302,72 @@ public class Management implements Serializable { | @@ -301,36 +302,72 @@ public class Management implements Serializable { | ||
| 301 | } | 302 | } |
| 302 | 303 | ||
| 303 | private void activateContexts(Class<?> managedType) { | 304 | private void activateContexts(Class<?> managedType) { |
| 304 | - logger.debug(bundle.getString("management-debug-starting-custom-context", | ||
| 305 | - ManagedContext.class.getCanonicalName(), managedType.getCanonicalName())); | 305 | + |
| 306 | + RequestContext requestContext = Beans.getReference(RequestContext.class); | ||
| 307 | + ViewContext viewContext = Beans.getReference(ViewContext.class); | ||
| 308 | + SessionContext sessionContext = Beans.getReference(SessionContext.class); | ||
| 309 | + | ||
| 310 | + if (!requestContext.isActive()){ | ||
| 311 | + logger.debug(bundle.getString("management-debug-starting-custom-context", | ||
| 312 | + requestContext.getClass().getCanonicalName(), managedType.getCanonicalName())); | ||
| 313 | + | ||
| 314 | + requestContext.activate(); | ||
| 315 | + } | ||
| 316 | + | ||
| 317 | + if (!viewContext.isActive()){ | ||
| 318 | + logger.debug(bundle.getString("management-debug-starting-custom-context", | ||
| 319 | + viewContext.getClass().getCanonicalName(), managedType.getCanonicalName())); | ||
| 320 | + | ||
| 321 | + viewContext.activate(); | ||
| 322 | + } | ||
| 306 | 323 | ||
| 307 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 324 | + if (!sessionContext.isActive()){ |
| 325 | + logger.debug(bundle.getString("management-debug-starting-custom-context", | ||
| 326 | + sessionContext.getClass().getCanonicalName(), managedType.getCanonicalName())); | ||
| 327 | + | ||
| 328 | + sessionContext.activate(); | ||
| 329 | + } | ||
| 308 | } | 330 | } |
| 309 | 331 | ||
| 310 | private void deactivateContexts(Class<?> managedType) { | 332 | private void deactivateContexts(Class<?> managedType) { |
| 311 | - logger.debug(bundle.getString("management-debug-stoping-custom-context", | ||
| 312 | - ManagedContext.class.getCanonicalName(), managedType.getCanonicalName())); | 333 | + RequestContext requestContext = Beans.getReference(RequestContext.class); |
| 334 | + ViewContext viewContext = Beans.getReference(ViewContext.class); | ||
| 335 | + SessionContext sessionContext = Beans.getReference(SessionContext.class); | ||
| 336 | + | ||
| 337 | + if (requestContext.isActive()){ | ||
| 338 | + logger.debug(bundle.getString("management-debug-stoping-custom-context", | ||
| 339 | + requestContext.getClass().getCanonicalName(), managedType.getCanonicalName())); | ||
| 340 | + | ||
| 341 | + requestContext.deactivate(); | ||
| 342 | + } | ||
| 343 | + | ||
| 344 | + if (!viewContext.isActive()){ | ||
| 345 | + logger.debug(bundle.getString("management-debug-stoping-custom-context", | ||
| 346 | + viewContext.getClass().getCanonicalName(), managedType.getCanonicalName())); | ||
| 347 | + | ||
| 348 | + viewContext.deactivate(); | ||
| 349 | + } | ||
| 313 | 350 | ||
| 314 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 351 | + if (!sessionContext.isActive()){ |
| 352 | + logger.debug(bundle.getString("management-debug-stoping-custom-context", | ||
| 353 | + sessionContext.getClass().getCanonicalName(), managedType.getCanonicalName())); | ||
| 354 | + | ||
| 355 | + sessionContext.deactivate(); | ||
| 356 | + } | ||
| 315 | } | 357 | } |
| 316 | 358 | ||
| 317 | public void shutdown(Collection<Class<? extends ManagementExtension>> monitoringExtensions) { | 359 | public void shutdown(Collection<Class<? extends ManagementExtension>> monitoringExtensions) { |
| 318 | - | ||
| 319 | for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) { | 360 | for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) { |
| 320 | 361 | ||
| 321 | ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass); | 362 | ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass); |
| 322 | - | ||
| 323 | monitoringExtension.shutdown(this.getManagedTypes()); | 363 | monitoringExtension.shutdown(this.getManagedTypes()); |
| 324 | - | ||
| 325 | logger.debug(bundle.getString("management-debug-removing-management-extension", monitoringExtension | 364 | logger.debug(bundle.getString("management-debug-removing-management-extension", monitoringExtension |
| 326 | .getClass().getCanonicalName())); | 365 | .getClass().getCanonicalName())); |
| 327 | 366 | ||
| 328 | } | 367 | } |
| 329 | - | ||
| 330 | } | 368 | } |
| 331 | 369 | ||
| 332 | public void initialize(Collection<Class<? extends ManagementExtension>> monitoringExtensions) { | 370 | public void initialize(Collection<Class<? extends ManagementExtension>> monitoringExtensions) { |
| 333 | - | ||
| 334 | for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) { | 371 | for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) { |
| 335 | ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass); | 372 | ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass); |
| 336 | 373 | ||
| @@ -339,7 +376,6 @@ public class Management implements Serializable { | @@ -339,7 +376,6 @@ public class Management implements Serializable { | ||
| 339 | 376 | ||
| 340 | monitoringExtension.initialize(this.getManagedTypes()); | 377 | monitoringExtension.initialize(this.getManagedTypes()); |
| 341 | } | 378 | } |
| 342 | - | ||
| 343 | } | 379 | } |
| 344 | 380 | ||
| 345 | private Validator getDefaultValidator() { | 381 | private Validator getDefaultValidator() { |
impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
| 1 | br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap | 1 | br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap |
| 2 | +br.gov.frameworkdemoiselle.internal.bootstrap.CustomContextBootstrap | ||
| 2 | br.gov.frameworkdemoiselle.internal.bootstrap.ConfigurationBootstrap | 3 | br.gov.frameworkdemoiselle.internal.bootstrap.ConfigurationBootstrap |
| 3 | br.gov.frameworkdemoiselle.internal.bootstrap.ManagementBootstrap | 4 | br.gov.frameworkdemoiselle.internal.bootstrap.ManagementBootstrap |
| 4 | br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap | 5 | br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap |
impl/core/src/main/resources/demoiselle-core-bundle.properties
| @@ -68,8 +68,7 @@ configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0} | @@ -68,8 +68,7 @@ configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0} | ||
| 68 | 68 | ||
| 69 | transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties | 69 | transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties |
| 70 | executing-all=Executando todos os \: {0} | 70 | executing-all=Executando todos os \: {0} |
| 71 | -custom-context-was-registered=O contexto {0} foi registrado | ||
| 72 | -custom-context-was-unregistered=O contexto {0} foi removido | 71 | +custom-context-selected=Produzindo inst\u00E2ncia do contexto {0} |
| 73 | custom-context-was-activated=O contexto {0} foi ativado para o escopo {1} | 72 | custom-context-was-activated=O contexto {0} foi ativado para o escopo {1} |
| 74 | custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1} | 73 | custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1} |
| 75 | custom-context-already-activated=N\u00E3o foi poss\u00EDvel ativar o contexto {0}, o escopo {1} j\u00E1 est\u00E1 ativo no contexto {2} | 74 | custom-context-already-activated=N\u00E3o foi poss\u00EDvel ativar o contexto {0}, o escopo {1} j\u00E1 est\u00E1 ativo no contexto {2} |
impl/core/src/test/java/management/validation/ValidationTest.java
| 1 | package management.validation; | 1 | package management.validation; |
| 2 | 2 | ||
| 3 | +import javax.validation.ConstraintViolationException; | ||
| 4 | + | ||
| 3 | import management.testclasses.DummyManagedClass; | 5 | import management.testclasses.DummyManagedClass; |
| 4 | import management.testclasses.DummyManagementExtension; | 6 | import management.testclasses.DummyManagementExtension; |
| 5 | import management.testclasses.DummyValidator; | 7 | import management.testclasses.DummyValidator; |
| @@ -14,7 +16,6 @@ import org.junit.Test; | @@ -14,7 +16,6 @@ import org.junit.Test; | ||
| 14 | import org.junit.runner.RunWith; | 16 | import org.junit.runner.RunWith; |
| 15 | 17 | ||
| 16 | import test.Tests; | 18 | import test.Tests; |
| 17 | -import br.gov.frameworkdemoiselle.DemoiselleException; | ||
| 18 | import br.gov.frameworkdemoiselle.util.Beans; | 19 | import br.gov.frameworkdemoiselle.util.Beans; |
| 19 | 20 | ||
| 20 | @RunWith(Arquillian.class) | 21 | @RunWith(Arquillian.class) |
| @@ -52,8 +53,8 @@ public class ValidationTest { | @@ -52,8 +53,8 @@ public class ValidationTest { | ||
| 52 | store.setProperty(DummyManagedClass.class, "id", (Integer) null); | 53 | store.setProperty(DummyManagedClass.class, "id", (Integer) null); |
| 53 | 54 | ||
| 54 | Assert.fail(); | 55 | Assert.fail(); |
| 55 | - } catch (DemoiselleException de) { | ||
| 56 | - // Classes de gerenciamento disparam Demoiselle Exception quando uma validação falha | 56 | + } catch (ConstraintViolationException ce) { |
| 57 | + // Classes de gerenciamento disparam ConstraintViolationException quando uma validação falha | ||
| 57 | } | 58 | } |
| 58 | } | 59 | } |
| 59 | 60 | ||
| @@ -72,7 +73,7 @@ public class ValidationTest { | @@ -72,7 +73,7 @@ public class ValidationTest { | ||
| 72 | store.setProperty(DummyManagedClass.class, "gender", "J"); | 73 | store.setProperty(DummyManagedClass.class, "gender", "J"); |
| 73 | 74 | ||
| 74 | Assert.fail(); | 75 | Assert.fail(); |
| 75 | - } catch (DemoiselleException e) { | 76 | + } catch (ConstraintViolationException e) { |
| 76 | Assert.assertTrue(e.getMessage().contains("Test Message")); | 77 | Assert.assertTrue(e.getMessage().contains("Test Message")); |
| 77 | } | 78 | } |
| 78 | 79 |
impl/core/src/test/java/message/MessageContextTest.java
| @@ -39,7 +39,6 @@ package message; | @@ -39,7 +39,6 @@ package message; | ||
| 39 | import static junit.framework.Assert.assertEquals; | 39 | import static junit.framework.Assert.assertEquals; |
| 40 | import static junit.framework.Assert.assertTrue; | 40 | import static junit.framework.Assert.assertTrue; |
| 41 | 41 | ||
| 42 | -import javax.enterprise.context.RequestScoped; | ||
| 43 | import javax.inject.Inject; | 42 | import javax.inject.Inject; |
| 44 | 43 | ||
| 45 | import junit.framework.Assert; | 44 | import junit.framework.Assert; |
| @@ -51,8 +50,7 @@ import org.junit.Test; | @@ -51,8 +50,7 @@ import org.junit.Test; | ||
| 51 | import org.junit.runner.RunWith; | 50 | import org.junit.runner.RunWith; |
| 52 | 51 | ||
| 53 | import test.Tests; | 52 | import test.Tests; |
| 54 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 55 | -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; | 53 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 56 | import br.gov.frameworkdemoiselle.message.DefaultMessage; | 54 | import br.gov.frameworkdemoiselle.message.DefaultMessage; |
| 57 | import br.gov.frameworkdemoiselle.message.Message; | 55 | import br.gov.frameworkdemoiselle.message.Message; |
| 58 | import br.gov.frameworkdemoiselle.message.MessageContext; | 56 | import br.gov.frameworkdemoiselle.message.MessageContext; |
| @@ -80,78 +78,92 @@ public class MessageContextTest { | @@ -80,78 +78,92 @@ public class MessageContextTest { | ||
| 80 | 78 | ||
| 81 | @Test | 79 | @Test |
| 82 | public void testAddMessageWithoutParams() { | 80 | public void testAddMessageWithoutParams() { |
| 83 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 81 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 82 | + | ||
| 83 | + context.activate(); | ||
| 84 | Message message = new DefaultMessage("Menssage without param"); | 84 | Message message = new DefaultMessage("Menssage without param"); |
| 85 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 85 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 86 | 86 | ||
| 87 | messageContext.add(message); | 87 | messageContext.add(message); |
| 88 | assertEquals(appender.getMessages().size(), 1); | 88 | assertEquals(appender.getMessages().size(), 1); |
| 89 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 89 | + context.deactivate(); |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | @Test | 92 | @Test |
| 93 | public void testAddMessageWithoutParamsIfSeverityIsInfo() { | 93 | public void testAddMessageWithoutParamsIfSeverityIsInfo() { |
| 94 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 94 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 95 | + | ||
| 96 | + context.activate(); | ||
| 95 | Message message = new DefaultMessage("Menssage without param"); | 97 | Message message = new DefaultMessage("Menssage without param"); |
| 96 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 98 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 97 | 99 | ||
| 98 | messageContext.add(message); | 100 | messageContext.add(message); |
| 99 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO); | 101 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO); |
| 100 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 102 | + context.deactivate(); |
| 101 | } | 103 | } |
| 102 | 104 | ||
| 103 | @Test | 105 | @Test |
| 104 | public void testAddMessageWitSeverityInfo() { | 106 | public void testAddMessageWitSeverityInfo() { |
| 105 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 107 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 108 | + | ||
| 109 | + context.activate(); | ||
| 106 | Message message = new DefaultMessage("Menssage without param", SeverityType.INFO); | 110 | Message message = new DefaultMessage("Menssage without param", SeverityType.INFO); |
| 107 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 111 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 108 | 112 | ||
| 109 | messageContext.add(message); | 113 | messageContext.add(message); |
| 110 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO); | 114 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO); |
| 111 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 115 | + context.deactivate(); |
| 112 | } | 116 | } |
| 113 | 117 | ||
| 114 | @Test | 118 | @Test |
| 115 | public void testAddMessageWitSeverityWarn() { | 119 | public void testAddMessageWitSeverityWarn() { |
| 116 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 120 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 121 | + | ||
| 122 | + context.activate(); | ||
| 117 | Message message = new DefaultMessage("Menssage without param", SeverityType.WARN); | 123 | Message message = new DefaultMessage("Menssage without param", SeverityType.WARN); |
| 118 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 124 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 119 | 125 | ||
| 120 | messageContext.add(message); | 126 | messageContext.add(message); |
| 121 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.WARN); | 127 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.WARN); |
| 122 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 128 | + context.deactivate(); |
| 123 | } | 129 | } |
| 124 | 130 | ||
| 125 | @Test | 131 | @Test |
| 126 | public void testAddMessageWitSeverityErro() { | 132 | public void testAddMessageWitSeverityErro() { |
| 127 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 133 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 134 | + | ||
| 135 | + context.activate(); | ||
| 128 | Message message = new DefaultMessage("Menssage without param", SeverityType.ERROR); | 136 | Message message = new DefaultMessage("Menssage without param", SeverityType.ERROR); |
| 129 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 137 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 130 | 138 | ||
| 131 | messageContext.add(message); | 139 | messageContext.add(message); |
| 132 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.ERROR); | 140 | assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.ERROR); |
| 133 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 141 | + context.deactivate(); |
| 134 | } | 142 | } |
| 135 | 143 | ||
| 136 | @Test | 144 | @Test |
| 137 | public void testRecoverStringMessageWithParams() { | 145 | public void testRecoverStringMessageWithParams() { |
| 138 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 146 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 147 | + | ||
| 148 | + context.activate(); | ||
| 139 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 149 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 140 | 150 | ||
| 141 | messageContext.add("Message with {0} param", 1); | 151 | messageContext.add("Message with {0} param", 1); |
| 142 | assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param")); | 152 | assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param")); |
| 143 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 153 | + context.deactivate(); |
| 144 | } | 154 | } |
| 145 | 155 | ||
| 146 | @Test | 156 | @Test |
| 147 | public void testRecoverMessageWithParams() { | 157 | public void testRecoverMessageWithParams() { |
| 148 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 158 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 159 | + | ||
| 160 | + context.activate(); | ||
| 149 | Message message = new DefaultMessage("Message with {0} param"); | 161 | Message message = new DefaultMessage("Message with {0} param"); |
| 150 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); | 162 | DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); |
| 151 | 163 | ||
| 152 | messageContext.add(message, 1); | 164 | messageContext.add(message, 1); |
| 153 | assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param")); | 165 | assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param")); |
| 154 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 166 | + context.deactivate(); |
| 155 | } | 167 | } |
| 156 | 168 | ||
| 157 | @Test | 169 | @Test |
| @@ -164,21 +176,25 @@ public class MessageContextTest { | @@ -164,21 +176,25 @@ public class MessageContextTest { | ||
| 164 | 176 | ||
| 165 | @Test | 177 | @Test |
| 166 | public void testMessageParsedText() { | 178 | public void testMessageParsedText() { |
| 167 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 179 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 180 | + | ||
| 181 | + context.activate(); | ||
| 168 | Message MESSAGE_PARSED = new DefaultMessage("{MESSAGE_PARSED}"); | 182 | Message MESSAGE_PARSED = new DefaultMessage("{MESSAGE_PARSED}"); |
| 169 | String expected = "Message parsed"; | 183 | String expected = "Message parsed"; |
| 170 | String value = MESSAGE_PARSED.getText(); | 184 | String value = MESSAGE_PARSED.getText(); |
| 171 | Assert.assertEquals(expected, value); | 185 | Assert.assertEquals(expected, value); |
| 172 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 186 | + context.deactivate(); |
| 173 | } | 187 | } |
| 174 | 188 | ||
| 175 | @Test | 189 | @Test |
| 176 | public void testMessageIsNull() { | 190 | public void testMessageIsNull() { |
| 177 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 191 | + RequestContext context = Beans.getReference(RequestContext.class); |
| 192 | + | ||
| 193 | + context.activate(); | ||
| 178 | Message NULL_MESSAGE = new DefaultMessage(null); | 194 | Message NULL_MESSAGE = new DefaultMessage(null); |
| 179 | String expected = null; | 195 | String expected = null; |
| 180 | String value = NULL_MESSAGE.getText(); | 196 | String value = NULL_MESSAGE.getText(); |
| 181 | Assert.assertEquals(expected, value); | 197 | Assert.assertEquals(expected, value); |
| 182 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 198 | + context.deactivate(); |
| 183 | } | 199 | } |
| 184 | } | 200 | } |
impl/core/src/test/java/pagination/PaginationContextBasicTest.java
| @@ -38,7 +38,6 @@ package pagination; | @@ -38,7 +38,6 @@ package pagination; | ||
| 38 | 38 | ||
| 39 | import static junit.framework.Assert.assertEquals; | 39 | import static junit.framework.Assert.assertEquals; |
| 40 | 40 | ||
| 41 | -import javax.enterprise.context.SessionScoped; | ||
| 42 | import javax.inject.Inject; | 41 | import javax.inject.Inject; |
| 43 | 42 | ||
| 44 | import org.jboss.arquillian.container.test.api.Deployment; | 43 | import org.jboss.arquillian.container.test.api.Deployment; |
| @@ -51,11 +50,11 @@ import org.junit.runner.RunWith; | @@ -51,11 +50,11 @@ import org.junit.runner.RunWith; | ||
| 51 | 50 | ||
| 52 | import test.Tests; | 51 | import test.Tests; |
| 53 | import transaction.defaultstrategy.TransactionDefaultTest; | 52 | import transaction.defaultstrategy.TransactionDefaultTest; |
| 53 | +import br.gov.frameworkdemoiselle.context.SessionContext; | ||
| 54 | import br.gov.frameworkdemoiselle.internal.configuration.PaginationConfig; | 54 | import br.gov.frameworkdemoiselle.internal.configuration.PaginationConfig; |
| 55 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 56 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | ||
| 57 | import br.gov.frameworkdemoiselle.pagination.Pagination; | 55 | import br.gov.frameworkdemoiselle.pagination.Pagination; |
| 58 | import br.gov.frameworkdemoiselle.pagination.PaginationContext; | 56 | import br.gov.frameworkdemoiselle.pagination.PaginationContext; |
| 57 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 59 | 58 | ||
| 60 | @RunWith(Arquillian.class) | 59 | @RunWith(Arquillian.class) |
| 61 | public class PaginationContextBasicTest { | 60 | public class PaginationContextBasicTest { |
| @@ -96,13 +95,15 @@ public class PaginationContextBasicTest { | @@ -96,13 +95,15 @@ public class PaginationContextBasicTest { | ||
| 96 | 95 | ||
| 97 | @Before | 96 | @Before |
| 98 | public void activeContext() { | 97 | public void activeContext() { |
| 99 | - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); | 98 | + SessionContext context = Beans.getReference(SessionContext.class); |
| 99 | + context.activate(); | ||
| 100 | pagination = paginationContext.getPagination(DummyEntity.class, true); | 100 | pagination = paginationContext.getPagination(DummyEntity.class, true); |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | @After | 103 | @After |
| 104 | public void deactiveContext() { | 104 | public void deactiveContext() { |
| 105 | - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); | 105 | + SessionContext context = Beans.getReference(SessionContext.class); |
| 106 | + context.deactivate(); | ||
| 106 | } | 107 | } |
| 107 | 108 | ||
| 108 | @Test | 109 | @Test |
impl/core/src/test/java/pagination/PaginationContextCache.java
| @@ -38,7 +38,6 @@ package pagination; | @@ -38,7 +38,6 @@ package pagination; | ||
| 38 | 38 | ||
| 39 | import static org.junit.Assert.assertEquals; | 39 | import static org.junit.Assert.assertEquals; |
| 40 | 40 | ||
| 41 | -import javax.enterprise.context.SessionScoped; | ||
| 42 | import javax.inject.Inject; | 41 | import javax.inject.Inject; |
| 43 | 42 | ||
| 44 | import org.jboss.arquillian.container.test.api.Deployment; | 43 | import org.jboss.arquillian.container.test.api.Deployment; |
| @@ -51,10 +50,10 @@ import org.junit.runner.RunWith; | @@ -51,10 +50,10 @@ import org.junit.runner.RunWith; | ||
| 51 | 50 | ||
| 52 | import test.Tests; | 51 | import test.Tests; |
| 53 | import transaction.defaultstrategy.TransactionDefaultTest; | 52 | import transaction.defaultstrategy.TransactionDefaultTest; |
| 54 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 55 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 53 | +import br.gov.frameworkdemoiselle.context.SessionContext; |
| 56 | import br.gov.frameworkdemoiselle.pagination.Pagination; | 54 | import br.gov.frameworkdemoiselle.pagination.Pagination; |
| 57 | import br.gov.frameworkdemoiselle.pagination.PaginationContext; | 55 | import br.gov.frameworkdemoiselle.pagination.PaginationContext; |
| 56 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 58 | 57 | ||
| 59 | @RunWith(Arquillian.class) | 58 | @RunWith(Arquillian.class) |
| 60 | public class PaginationContextCache { | 59 | public class PaginationContextCache { |
| @@ -74,12 +73,14 @@ public class PaginationContextCache { | @@ -74,12 +73,14 @@ public class PaginationContextCache { | ||
| 74 | 73 | ||
| 75 | @Before | 74 | @Before |
| 76 | public void activeContext() { | 75 | public void activeContext() { |
| 77 | - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); | 76 | + SessionContext context = Beans.getReference(SessionContext.class); |
| 77 | + context.activate(); | ||
| 78 | } | 78 | } |
| 79 | 79 | ||
| 80 | @After | 80 | @After |
| 81 | public void deactiveContext() { | 81 | public void deactiveContext() { |
| 82 | - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); | 82 | + SessionContext context = Beans.getReference(SessionContext.class); |
| 83 | + context.deactivate(); | ||
| 83 | } | 84 | } |
| 84 | 85 | ||
| 85 | @Test | 86 | @Test |
impl/core/src/test/java/pagination/PaginationContextNullTest.java
| @@ -38,7 +38,6 @@ package pagination; | @@ -38,7 +38,6 @@ package pagination; | ||
| 38 | 38 | ||
| 39 | import static org.junit.Assert.assertNull; | 39 | import static org.junit.Assert.assertNull; |
| 40 | 40 | ||
| 41 | -import javax.enterprise.context.SessionScoped; | ||
| 42 | import javax.inject.Inject; | 41 | import javax.inject.Inject; |
| 43 | 42 | ||
| 44 | import org.jboss.arquillian.container.test.api.Deployment; | 43 | import org.jboss.arquillian.container.test.api.Deployment; |
| @@ -51,10 +50,10 @@ import org.junit.runner.RunWith; | @@ -51,10 +50,10 @@ import org.junit.runner.RunWith; | ||
| 51 | 50 | ||
| 52 | import test.Tests; | 51 | import test.Tests; |
| 53 | import transaction.defaultstrategy.TransactionDefaultTest; | 52 | import transaction.defaultstrategy.TransactionDefaultTest; |
| 54 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 55 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 53 | +import br.gov.frameworkdemoiselle.context.SessionContext; |
| 56 | import br.gov.frameworkdemoiselle.pagination.Pagination; | 54 | import br.gov.frameworkdemoiselle.pagination.Pagination; |
| 57 | import br.gov.frameworkdemoiselle.pagination.PaginationContext; | 55 | import br.gov.frameworkdemoiselle.pagination.PaginationContext; |
| 56 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 58 | 57 | ||
| 59 | @RunWith(Arquillian.class) | 58 | @RunWith(Arquillian.class) |
| 60 | public class PaginationContextNullTest { | 59 | public class PaginationContextNullTest { |
| @@ -72,12 +71,14 @@ public class PaginationContextNullTest { | @@ -72,12 +71,14 @@ public class PaginationContextNullTest { | ||
| 72 | 71 | ||
| 73 | @Before | 72 | @Before |
| 74 | public void activeContext() { | 73 | public void activeContext() { |
| 75 | - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); | 74 | + SessionContext context = Beans.getReference(SessionContext.class); |
| 75 | + context.activate(); | ||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | @After | 78 | @After |
| 79 | public void deactiveContext() { | 79 | public void deactiveContext() { |
| 80 | - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); | 80 | + SessionContext context = Beans.getReference(SessionContext.class); |
| 81 | + context.deactivate(); | ||
| 81 | } | 82 | } |
| 82 | 83 | ||
| 83 | @Test | 84 | @Test |
impl/core/src/test/java/security/athentication/credentials/AcceptOrDenyCredentialsTest.java
| @@ -36,7 +36,6 @@ | @@ -36,7 +36,6 @@ | ||
| 36 | */ | 36 | */ |
| 37 | package security.athentication.credentials; | 37 | package security.athentication.credentials; |
| 38 | 38 | ||
| 39 | -import javax.enterprise.context.RequestScoped; | ||
| 40 | import javax.inject.Inject; | 39 | import javax.inject.Inject; |
| 41 | 40 | ||
| 42 | import junit.framework.Assert; | 41 | import junit.framework.Assert; |
| @@ -48,8 +47,7 @@ import org.junit.Test; | @@ -48,8 +47,7 @@ import org.junit.Test; | ||
| 48 | import org.junit.runner.RunWith; | 47 | import org.junit.runner.RunWith; |
| 49 | 48 | ||
| 50 | import test.Tests; | 49 | import test.Tests; |
| 51 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 52 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 50 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 53 | import br.gov.frameworkdemoiselle.security.AuthenticationException; | 51 | import br.gov.frameworkdemoiselle.security.AuthenticationException; |
| 54 | import br.gov.frameworkdemoiselle.security.SecurityContext; | 52 | import br.gov.frameworkdemoiselle.security.SecurityContext; |
| 55 | import br.gov.frameworkdemoiselle.util.Beans; | 53 | import br.gov.frameworkdemoiselle.util.Beans; |
| @@ -71,7 +69,8 @@ public class AcceptOrDenyCredentialsTest { | @@ -71,7 +69,8 @@ public class AcceptOrDenyCredentialsTest { | ||
| 71 | 69 | ||
| 72 | @Test | 70 | @Test |
| 73 | public void denyWrongCredentials() { | 71 | public void denyWrongCredentials() { |
| 74 | - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); | 72 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 73 | + ctx.activate(); | ||
| 75 | 74 | ||
| 76 | Credentials credentials = Beans.getReference(Credentials.class); | 75 | Credentials credentials = Beans.getReference(Credentials.class); |
| 77 | credentials.setLogin("wronglogin"); | 76 | credentials.setLogin("wronglogin"); |
| @@ -84,14 +83,15 @@ public class AcceptOrDenyCredentialsTest { | @@ -84,14 +83,15 @@ public class AcceptOrDenyCredentialsTest { | ||
| 84 | //Erro esperado | 83 | //Erro esperado |
| 85 | } | 84 | } |
| 86 | finally{ | 85 | finally{ |
| 87 | - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); | 86 | + ctx.deactivate(); |
| 88 | } | 87 | } |
| 89 | 88 | ||
| 90 | } | 89 | } |
| 91 | 90 | ||
| 92 | @Test | 91 | @Test |
| 93 | public void acceptRightCredentials() { | 92 | public void acceptRightCredentials() { |
| 94 | - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); | 93 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 94 | + ctx.activate(); | ||
| 95 | 95 | ||
| 96 | Credentials credentials = Beans.getReference(Credentials.class); | 96 | Credentials credentials = Beans.getReference(Credentials.class); |
| 97 | credentials.setLogin("demoiselle"); | 97 | credentials.setLogin("demoiselle"); |
| @@ -103,7 +103,7 @@ public class AcceptOrDenyCredentialsTest { | @@ -103,7 +103,7 @@ public class AcceptOrDenyCredentialsTest { | ||
| 103 | Assert.fail("Authenticator negou credenciais corretas"); | 103 | Assert.fail("Authenticator negou credenciais corretas"); |
| 104 | } | 104 | } |
| 105 | finally{ | 105 | finally{ |
| 106 | - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); | 106 | + ctx.deactivate(); |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | } | 109 | } |
impl/core/src/test/java/security/athentication/custom/CustomAuthenticatorTest.java
| @@ -42,7 +42,6 @@ import static org.junit.Assert.assertNotNull; | @@ -42,7 +42,6 @@ import static org.junit.Assert.assertNotNull; | ||
| 42 | import static org.junit.Assert.assertNull; | 42 | import static org.junit.Assert.assertNull; |
| 43 | import static org.junit.Assert.assertTrue; | 43 | import static org.junit.Assert.assertTrue; |
| 44 | 44 | ||
| 45 | -import javax.enterprise.context.RequestScoped; | ||
| 46 | import javax.inject.Inject; | 45 | import javax.inject.Inject; |
| 47 | 46 | ||
| 48 | import org.jboss.arquillian.container.test.api.Deployment; | 47 | import org.jboss.arquillian.container.test.api.Deployment; |
| @@ -52,9 +51,9 @@ import org.junit.Test; | @@ -52,9 +51,9 @@ import org.junit.Test; | ||
| 52 | import org.junit.runner.RunWith; | 51 | import org.junit.runner.RunWith; |
| 53 | 52 | ||
| 54 | import test.Tests; | 53 | import test.Tests; |
| 55 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 56 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 54 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 57 | import br.gov.frameworkdemoiselle.security.SecurityContext; | 55 | import br.gov.frameworkdemoiselle.security.SecurityContext; |
| 56 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 58 | import configuration.resource.ConfigurationResourceTest; | 57 | import configuration.resource.ConfigurationResourceTest; |
| 59 | 58 | ||
| 60 | @RunWith(Arquillian.class) | 59 | @RunWith(Arquillian.class) |
| @@ -82,25 +81,27 @@ public class CustomAuthenticatorTest { | @@ -82,25 +81,27 @@ public class CustomAuthenticatorTest { | ||
| 82 | 81 | ||
| 83 | @Test | 82 | @Test |
| 84 | public void loginProcess() { | 83 | public void loginProcess() { |
| 85 | - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); | 84 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 85 | + ctx.activate(); | ||
| 86 | 86 | ||
| 87 | context.login(); | 87 | context.login(); |
| 88 | assertTrue(context.isLoggedIn()); | 88 | assertTrue(context.isLoggedIn()); |
| 89 | assertNotNull(observer.getEvent()); | 89 | assertNotNull(observer.getEvent()); |
| 90 | assertEquals("demoiselle", context.getUser().getId()); | 90 | assertEquals("demoiselle", context.getUser().getId()); |
| 91 | 91 | ||
| 92 | - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); | 92 | + ctx.deactivate(); |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | @Test | 95 | @Test |
| 96 | public void logoutProcess() { | 96 | public void logoutProcess() { |
| 97 | - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); | 97 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 98 | + ctx.activate(); | ||
| 98 | 99 | ||
| 99 | context.login(); | 100 | context.login(); |
| 100 | context.logout(); | 101 | context.logout(); |
| 101 | assertFalse(context.isLoggedIn()); | 102 | assertFalse(context.isLoggedIn()); |
| 102 | assertNull(context.getUser()); | 103 | assertNull(context.getUser()); |
| 103 | 104 | ||
| 104 | - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); | 105 | + ctx.deactivate(); |
| 105 | } | 106 | } |
| 106 | } | 107 | } |
impl/core/src/test/java/template/TemplateTest.java
| @@ -43,7 +43,6 @@ import static junit.framework.Assert.assertNull; | @@ -43,7 +43,6 @@ import static junit.framework.Assert.assertNull; | ||
| 43 | 43 | ||
| 44 | import java.util.List; | 44 | import java.util.List; |
| 45 | 45 | ||
| 46 | -import javax.enterprise.context.RequestScoped; | ||
| 47 | import javax.inject.Inject; | 46 | import javax.inject.Inject; |
| 48 | 47 | ||
| 49 | import org.jboss.arquillian.container.test.api.Deployment; | 48 | import org.jboss.arquillian.container.test.api.Deployment; |
| @@ -55,8 +54,8 @@ import org.junit.Test; | @@ -55,8 +54,8 @@ import org.junit.Test; | ||
| 55 | import org.junit.runner.RunWith; | 54 | import org.junit.runner.RunWith; |
| 56 | 55 | ||
| 57 | import test.Tests; | 56 | import test.Tests; |
| 58 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 59 | -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; | 57 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 58 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 60 | 59 | ||
| 61 | @RunWith(Arquillian.class) | 60 | @RunWith(Arquillian.class) |
| 62 | public class TemplateTest { | 61 | public class TemplateTest { |
| @@ -83,7 +82,8 @@ public class TemplateTest { | @@ -83,7 +82,8 @@ public class TemplateTest { | ||
| 83 | @Before | 82 | @Before |
| 84 | public void initialize() { | 83 | public void initialize() { |
| 85 | 84 | ||
| 86 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 85 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 86 | + ctx.activate(); | ||
| 87 | 87 | ||
| 88 | this.crudImpl.resetEntities(); | 88 | this.crudImpl.resetEntities(); |
| 89 | 89 | ||
| @@ -91,9 +91,8 @@ public class TemplateTest { | @@ -91,9 +91,8 @@ public class TemplateTest { | ||
| 91 | 91 | ||
| 92 | @After | 92 | @After |
| 93 | public void finalize() { | 93 | public void finalize() { |
| 94 | - | ||
| 95 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | ||
| 96 | - | 94 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 95 | + ctx.deactivate(); | ||
| 97 | } | 96 | } |
| 98 | 97 | ||
| 99 | @Test | 98 | @Test |
impl/core/src/test/java/transaction/rollback/TransactionRollbackTest.java
| @@ -40,7 +40,6 @@ import static junit.framework.Assert.assertFalse; | @@ -40,7 +40,6 @@ import static junit.framework.Assert.assertFalse; | ||
| 40 | import static junit.framework.Assert.assertTrue; | 40 | import static junit.framework.Assert.assertTrue; |
| 41 | import static org.junit.Assert.fail; | 41 | import static org.junit.Assert.fail; |
| 42 | 42 | ||
| 43 | -import javax.enterprise.context.RequestScoped; | ||
| 44 | import javax.inject.Inject; | 43 | import javax.inject.Inject; |
| 45 | 44 | ||
| 46 | import org.jboss.arquillian.container.test.api.Deployment; | 45 | import org.jboss.arquillian.container.test.api.Deployment; |
| @@ -52,9 +51,8 @@ import org.junit.Test; | @@ -52,9 +51,8 @@ import org.junit.Test; | ||
| 52 | import org.junit.runner.RunWith; | 51 | import org.junit.runner.RunWith; |
| 53 | 52 | ||
| 54 | import test.Tests; | 53 | import test.Tests; |
| 55 | - | ||
| 56 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 57 | -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; | 54 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 55 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 58 | 56 | ||
| 59 | @RunWith(Arquillian.class) | 57 | @RunWith(Arquillian.class) |
| 60 | public class TransactionRollbackTest { | 58 | public class TransactionRollbackTest { |
| @@ -76,12 +74,14 @@ public class TransactionRollbackTest { | @@ -76,12 +74,14 @@ public class TransactionRollbackTest { | ||
| 76 | 74 | ||
| 77 | @Before | 75 | @Before |
| 78 | public void activeContext() { | 76 | public void activeContext() { |
| 79 | - ContextManager.activate(ManagedContext.class, RequestScoped.class); | 77 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 78 | + ctx.activate(); | ||
| 80 | } | 79 | } |
| 81 | 80 | ||
| 82 | @After | 81 | @After |
| 83 | public void deactiveContext() { | 82 | public void deactiveContext() { |
| 84 | - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); | 83 | + RequestContext ctx = Beans.getReference(RequestContext.class); |
| 84 | + ctx.deactivate(); | ||
| 85 | } | 85 | } |
| 86 | 86 | ||
| 87 | @Test | 87 | @Test |
impl/extension/jmx/src/main/resources/META-INF/beans.xml
| 1 | -<?xml version="1.0" encoding="UTF-8"?> | 1 | +<!-- |
| 2 | + Demoiselle Framework | ||
| 3 | + Copyright (C) 2010 SERPRO | ||
| 4 | + ============================================================================ | ||
| 5 | + This file is part of Demoiselle Framework. | ||
| 6 | + | ||
| 7 | + Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + as published by the Free Software Foundation. | ||
| 10 | + | ||
| 11 | + This program is distributed in the hope that it will be useful, | ||
| 12 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + GNU General Public License for more details. | ||
| 15 | + | ||
| 16 | + You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + ============================================================================ | ||
| 21 | + Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + | ||
| 23 | + O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + do Software Livre (FSF). | ||
| 26 | + | ||
| 27 | + Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + para maiores detalhes. | ||
| 31 | + | ||
| 32 | + Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | +--> | ||
| 2 | <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 37 | <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| 3 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> | 38 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> |
| 4 | -</beans> | ||
| 5 | \ No newline at end of file | 39 | \ No newline at end of file |
| 40 | + | ||
| 41 | +</beans> |
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/annotation/PersistenceScoped.java
0 → 100644
| @@ -0,0 +1,56 @@ | @@ -0,0 +1,56 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +package br.gov.frameworkdemoiselle.annotation; | ||
| 38 | + | ||
| 39 | +import static java.lang.annotation.ElementType.FIELD; | ||
| 40 | +import static java.lang.annotation.ElementType.METHOD; | ||
| 41 | +import static java.lang.annotation.ElementType.TYPE; | ||
| 42 | +import static java.lang.annotation.RetentionPolicy.RUNTIME; | ||
| 43 | + | ||
| 44 | +import java.lang.annotation.Inherited; | ||
| 45 | +import java.lang.annotation.Retention; | ||
| 46 | +import java.lang.annotation.Target; | ||
| 47 | + | ||
| 48 | +import javax.enterprise.context.NormalScope; | ||
| 49 | + | ||
| 50 | +@Inherited | ||
| 51 | +@Target({ METHOD, TYPE, FIELD }) | ||
| 52 | +@Retention(RUNTIME) | ||
| 53 | +@NormalScope | ||
| 54 | +public @interface PersistenceScoped { | ||
| 55 | + | ||
| 56 | +} |
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/EntityManagerConfig.java
| @@ -52,7 +52,7 @@ import br.gov.frameworkdemoiselle.util.Strings; | @@ -52,7 +52,7 @@ import br.gov.frameworkdemoiselle.util.Strings; | ||
| 52 | public class EntityManagerConfig implements Serializable { | 52 | public class EntityManagerConfig implements Serializable { |
| 53 | 53 | ||
| 54 | private static final long serialVersionUID = 1L; | 54 | private static final long serialVersionUID = 1L; |
| 55 | - | 55 | + |
| 56 | /** | 56 | /** |
| 57 | * @deprecated | 57 | * @deprecated |
| 58 | */ | 58 | */ |
| @@ -62,6 +62,9 @@ public class EntityManagerConfig implements Serializable { | @@ -62,6 +62,9 @@ public class EntityManagerConfig implements Serializable { | ||
| 62 | 62 | ||
| 63 | @Name("default.unit.name") | 63 | @Name("default.unit.name") |
| 64 | private String defaultPersistenceUnitName; | 64 | private String defaultPersistenceUnitName; |
| 65 | + | ||
| 66 | + @Name("entitymanager.scope") | ||
| 67 | + private String entityManagerScope = "request"; | ||
| 65 | 68 | ||
| 66 | /** | 69 | /** |
| 67 | * Getter for persistence unit name. | 70 | * Getter for persistence unit name. |
| @@ -92,4 +95,16 @@ public class EntityManagerConfig implements Serializable { | @@ -92,4 +95,16 @@ public class EntityManagerConfig implements Serializable { | ||
| 92 | 95 | ||
| 93 | return defaultPersistenceUnitName; | 96 | return defaultPersistenceUnitName; |
| 94 | } | 97 | } |
| 98 | + | ||
| 99 | + | ||
| 100 | + public String getEntityManagerScope() { | ||
| 101 | + return entityManagerScope; | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + | ||
| 105 | + public void setEntityManagerScope(String entityManagerScope) { | ||
| 106 | + this.entityManagerScope = entityManagerScope; | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + | ||
| 95 | } | 110 | } |
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/context/PersistenceContext.java
0 → 100644
| @@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
| 1 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 2 | + | ||
| 3 | +import java.lang.annotation.Annotation; | ||
| 4 | + | ||
| 5 | + | ||
| 6 | +public class PersistenceContext extends AbstractThreadLocalContext { | ||
| 7 | + | ||
| 8 | + public PersistenceContext(Class<? extends Annotation> scope) { | ||
| 9 | + super(scope); | ||
| 10 | + } | ||
| 11 | + | ||
| 12 | +} |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java
| @@ -41,30 +41,37 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; | @@ -41,30 +41,37 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 41 | import javax.enterprise.inject.spi.AfterDeploymentValidation; | 41 | import javax.enterprise.inject.spi.AfterDeploymentValidation; |
| 42 | import javax.enterprise.inject.spi.Extension; | 42 | import javax.enterprise.inject.spi.Extension; |
| 43 | 43 | ||
| 44 | -import br.gov.frameworkdemoiselle.annotation.ViewScoped; | ||
| 45 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 46 | -import br.gov.frameworkdemoiselle.internal.context.ViewContext; | 44 | +import br.gov.frameworkdemoiselle.context.ViewContext; |
| 45 | +import br.gov.frameworkdemoiselle.internal.context.CustomContextProducer; | ||
| 46 | +import br.gov.frameworkdemoiselle.internal.context.FacesViewContextImpl; | ||
| 47 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 47 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 48 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 48 | 49 | ||
| 49 | public class JsfBootstrap implements Extension { | 50 | public class JsfBootstrap implements Extension { |
| 50 | 51 | ||
| 51 | //private List<CustomContext> customContexts = new ArrayList<CustomContext>(); | 52 | //private List<CustomContext> customContexts = new ArrayList<CustomContext>(); |
| 52 | 53 | ||
| 53 | //private AfterBeanDiscovery afterBeanDiscoveryEvent; | 54 | //private AfterBeanDiscovery afterBeanDiscoveryEvent; |
| 54 | - | ||
| 55 | - public void storeContexts(@Observes final AfterBeanDiscovery event) { | ||
| 56 | - //Registra o ViewContext para controlar o escopo ViewScoped. | ||
| 57 | - ContextManager.initialize(event); | ||
| 58 | - ContextManager.add(new ViewContext(), event); | 55 | + |
| 56 | + private FacesViewContextImpl context; | ||
| 57 | + | ||
| 58 | + public void createCustomContext(@Observes AfterBeanDiscovery event){ | ||
| 59 | + context = new FacesViewContextImpl(); | ||
| 60 | + event.addContext(context); | ||
| 59 | } | 61 | } |
| 60 | 62 | ||
| 61 | public void addContexts(@Observes final AfterDeploymentValidation event) { | 63 | public void addContexts(@Observes final AfterDeploymentValidation event) { |
| 64 | + CustomContextProducer producer = Beans.getReference(CustomContextProducer.class); | ||
| 65 | + producer.addRegisteredContext(context); | ||
| 66 | + | ||
| 62 | //Ativa o ViewContext | 67 | //Ativa o ViewContext |
| 63 | - ContextManager.activate(ViewContext.class, ViewScoped.class); | 68 | + ViewContext ctx = Beans.getReference(FacesViewContextImpl.class); |
| 69 | + ctx.activate(); | ||
| 64 | } | 70 | } |
| 65 | 71 | ||
| 66 | public void removeContexts(@Observes AfterShutdownProccess event) { | 72 | public void removeContexts(@Observes AfterShutdownProccess event) { |
| 67 | //Desativa o ViewContext | 73 | //Desativa o ViewContext |
| 68 | - ContextManager.deactivate(ViewContext.class, ViewScoped.class); | 74 | + ViewContext ctx = Beans.getReference(FacesViewContextImpl.class); |
| 75 | + ctx.deactivate(); | ||
| 69 | } | 76 | } |
| 70 | } | 77 | } |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java
0 → 100644
| @@ -0,0 +1,81 @@ | @@ -0,0 +1,81 @@ | ||
| 1 | +/* | ||
| 2 | + * Demoiselle Framework | ||
| 3 | + * Copyright (C) 2010 SERPRO | ||
| 4 | + * ---------------------------------------------------------------------------- | ||
| 5 | + * This file is part of Demoiselle Framework. | ||
| 6 | + * | ||
| 7 | + * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | + * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | + * as published by the Free Software Foundation. | ||
| 10 | + * | ||
| 11 | + * This program is distributed in the hope that it will be useful, | ||
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | + * GNU General Public License for more details. | ||
| 15 | + * | ||
| 16 | + * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | + * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | + * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | + * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | + * ---------------------------------------------------------------------------- | ||
| 21 | + * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | + * | ||
| 23 | + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | + * do Software Livre (FSF). | ||
| 26 | + * | ||
| 27 | + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | + * para maiores detalhes. | ||
| 31 | + * | ||
| 32 | + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | + * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | + */ | ||
| 37 | +package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | + | ||
| 39 | +import java.util.Map; | ||
| 40 | + | ||
| 41 | +import javax.faces.component.UIViewRoot; | ||
| 42 | +import javax.faces.context.FacesContext; | ||
| 43 | + | ||
| 44 | +import br.gov.frameworkdemoiselle.annotation.Priority; | ||
| 45 | +import br.gov.frameworkdemoiselle.annotation.ViewScoped; | ||
| 46 | +import br.gov.frameworkdemoiselle.context.ViewContext; | ||
| 47 | +import br.gov.frameworkdemoiselle.util.Faces; | ||
| 48 | + | ||
| 49 | +/** | ||
| 50 | + * | ||
| 51 | + * This {@link ViewContext} implementation uses a map provided | ||
| 52 | + * by {@link UIViewRoot#getViewMap()} as a store. Any beans stored on | ||
| 53 | + * this store are kept as long as the view is still active. | ||
| 54 | + * | ||
| 55 | + * @author serpro | ||
| 56 | + * | ||
| 57 | + */ | ||
| 58 | +@Priority(Priority.L2_PRIORITY) | ||
| 59 | +public class FacesViewContextImpl extends AbstractCustomContext implements ViewContext { | ||
| 60 | + | ||
| 61 | + public FacesViewContextImpl() { | ||
| 62 | + super(ViewScoped.class); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + @Override | ||
| 66 | + protected boolean isStoreInitialized() { | ||
| 67 | + return FacesContext.getCurrentInstance()!=null; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + @Override | ||
| 71 | + protected Store getStore() { | ||
| 72 | + Map<String, Object> viewMap = Faces.getViewMap(); | ||
| 73 | + String key = Store.class.getName(); | ||
| 74 | + | ||
| 75 | + if (!viewMap.containsKey(key)) { | ||
| 76 | + viewMap.put(key, createStore()); | ||
| 77 | + } | ||
| 78 | + | ||
| 79 | + return (Store) viewMap.get(key); | ||
| 80 | + } | ||
| 81 | +} |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java
| @@ -1,68 +0,0 @@ | @@ -1,68 +0,0 @@ | ||
| 1 | -/* | ||
| 2 | - * Demoiselle Framework | ||
| 3 | - * Copyright (C) 2010 SERPRO | ||
| 4 | - * ---------------------------------------------------------------------------- | ||
| 5 | - * This file is part of Demoiselle Framework. | ||
| 6 | - * | ||
| 7 | - * Demoiselle Framework is free software; you can redistribute it and/or | ||
| 8 | - * modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 9 | - * as published by the Free Software Foundation. | ||
| 10 | - * | ||
| 11 | - * This program is distributed in the hope that it will be useful, | ||
| 12 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | - * GNU General Public License for more details. | ||
| 15 | - * | ||
| 16 | - * You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 17 | - * along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 18 | - * or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 19 | - * Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 20 | - * ---------------------------------------------------------------------------- | ||
| 21 | - * Este arquivo é parte do Framework Demoiselle. | ||
| 22 | - * | ||
| 23 | - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 24 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 25 | - * do Software Livre (FSF). | ||
| 26 | - * | ||
| 27 | - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 28 | - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 29 | - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 30 | - * para maiores detalhes. | ||
| 31 | - * | ||
| 32 | - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 33 | - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 34 | - * ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 35 | - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 36 | - */ | ||
| 37 | -package br.gov.frameworkdemoiselle.internal.context; | ||
| 38 | - | ||
| 39 | -import java.util.Map; | ||
| 40 | - | ||
| 41 | -import javax.faces.context.FacesContext; | ||
| 42 | - | ||
| 43 | -import br.gov.frameworkdemoiselle.annotation.ViewScoped; | ||
| 44 | -import br.gov.frameworkdemoiselle.util.Faces; | ||
| 45 | - | ||
| 46 | -public class ViewContext extends AbstractCustomContext { | ||
| 47 | - | ||
| 48 | - public ViewContext() { | ||
| 49 | - super(ViewScoped.class); | ||
| 50 | - } | ||
| 51 | - | ||
| 52 | - @Override | ||
| 53 | - protected boolean isStoreInitialized() { | ||
| 54 | - return FacesContext.getCurrentInstance()!=null; | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - @Override | ||
| 58 | - protected Store getStore() { | ||
| 59 | - Map<String, Object> viewMap = Faces.getViewMap(); | ||
| 60 | - String key = Store.class.getName(); | ||
| 61 | - | ||
| 62 | - if (!viewMap.containsKey(key)) { | ||
| 63 | - viewMap.put(key, createStore()); | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - return (Store) viewMap.get(key); | ||
| 67 | - } | ||
| 68 | -} |
impl/extension/jsf/src/test/java/test/Tests.java
| @@ -50,7 +50,7 @@ import br.gov.frameworkdemoiselle.annotation.Redirect; | @@ -50,7 +50,7 @@ import br.gov.frameworkdemoiselle.annotation.Redirect; | ||
| 50 | import br.gov.frameworkdemoiselle.internal.bootstrap.JsfBootstrap; | 50 | import br.gov.frameworkdemoiselle.internal.bootstrap.JsfBootstrap; |
| 51 | import br.gov.frameworkdemoiselle.internal.configuration.ExceptionHandlerConfig; | 51 | import br.gov.frameworkdemoiselle.internal.configuration.ExceptionHandlerConfig; |
| 52 | import br.gov.frameworkdemoiselle.internal.configuration.JsfSecurityConfig; | 52 | import br.gov.frameworkdemoiselle.internal.configuration.JsfSecurityConfig; |
| 53 | -import br.gov.frameworkdemoiselle.internal.context.ViewContext; | 53 | +import br.gov.frameworkdemoiselle.internal.context.FacesViewContextImpl; |
| 54 | import br.gov.frameworkdemoiselle.internal.implementation.AbstractExceptionHandler; | 54 | import br.gov.frameworkdemoiselle.internal.implementation.AbstractExceptionHandler; |
| 55 | import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandler; | 55 | import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandler; |
| 56 | import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandlerFactory; | 56 | import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandlerFactory; |
| @@ -103,7 +103,7 @@ public final class Tests { | @@ -103,7 +103,7 @@ public final class Tests { | ||
| 103 | .addClass(FileRenderer.class) | 103 | .addClass(FileRenderer.class) |
| 104 | .addClass(JsfSecurityConfig.class) | 104 | .addClass(JsfSecurityConfig.class) |
| 105 | .addClass(ExceptionHandlerConfig.class) | 105 | .addClass(ExceptionHandlerConfig.class) |
| 106 | - .addClass(ViewContext.class) | 106 | + .addClass(FacesViewContextImpl.class) |
| 107 | .addClass(AuthorizationExceptionHandlerFactory.class) | 107 | .addClass(AuthorizationExceptionHandlerFactory.class) |
| 108 | .addClass(ApplicationExceptionHandler.class) | 108 | .addClass(ApplicationExceptionHandler.class) |
| 109 | .addClass(FileRendererImpl.class) | 109 | .addClass(FileRendererImpl.class) |
impl/extension/jta/pom.xml
| @@ -71,6 +71,12 @@ | @@ -71,6 +71,12 @@ | ||
| 71 | <groupId>javax.transaction</groupId> | 71 | <groupId>javax.transaction</groupId> |
| 72 | <artifactId>jta</artifactId> | 72 | <artifactId>jta</artifactId> |
| 73 | </dependency> | 73 | </dependency> |
| 74 | + | ||
| 75 | + <dependency> | ||
| 76 | + <groupId>org.hibernate</groupId> | ||
| 77 | + <artifactId>hibernate-entitymanager</artifactId> | ||
| 78 | + <scope>test</scope> | ||
| 79 | + </dependency> | ||
| 74 | </dependencies> | 80 | </dependencies> |
| 75 | 81 | ||
| 76 | <repositories> | 82 | <repositories> |
impl/extension/jta/src/test/java/jtatransaction/interceptor/InterceptorJTATransactionTest.java
| @@ -6,7 +6,7 @@ import static junit.framework.Assert.assertNull; | @@ -6,7 +6,7 @@ import static junit.framework.Assert.assertNull; | ||
| 6 | 6 | ||
| 7 | import javax.persistence.EntityManager; | 7 | import javax.persistence.EntityManager; |
| 8 | import javax.persistence.PersistenceContext; | 8 | import javax.persistence.PersistenceContext; |
| 9 | -import javax.persistence.TransactionRequiredException; | 9 | +import javax.transaction.TransactionRequiredException; |
| 10 | 10 | ||
| 11 | import org.jboss.arquillian.container.test.api.Deployment; | 11 | import org.jboss.arquillian.container.test.api.Deployment; |
| 12 | import org.jboss.arquillian.junit.Arquillian; | 12 | import org.jboss.arquillian.junit.Arquillian; |
impl/extension/jta/src/test/resources/.arquillian-glassfish-embedded.profile
0 → 100644
impl/extension/jta/src/test/resources/.glassfish.profile
impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java
| @@ -36,41 +36,35 @@ | @@ -36,41 +36,35 @@ | ||
| 36 | */ | 36 | */ |
| 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
| 38 | 38 | ||
| 39 | -import javax.enterprise.context.ConversationScoped; | ||
| 40 | -import javax.enterprise.context.RequestScoped; | ||
| 41 | -import javax.enterprise.context.SessionScoped; | ||
| 42 | import javax.enterprise.event.Observes; | 39 | import javax.enterprise.event.Observes; |
| 43 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | ||
| 44 | import javax.enterprise.inject.spi.AfterDeploymentValidation; | 40 | import javax.enterprise.inject.spi.AfterDeploymentValidation; |
| 45 | import javax.enterprise.inject.spi.Extension; | 41 | import javax.enterprise.inject.spi.Extension; |
| 46 | 42 | ||
| 47 | -import br.gov.frameworkdemoiselle.annotation.ViewScoped; | ||
| 48 | -import br.gov.frameworkdemoiselle.internal.context.ContextManager; | ||
| 49 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | 43 | +import br.gov.frameworkdemoiselle.context.RequestContext; |
| 44 | +import br.gov.frameworkdemoiselle.context.SessionContext; | ||
| 45 | +import br.gov.frameworkdemoiselle.context.ViewContext; | ||
| 50 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | 46 | import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; |
| 47 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 51 | 48 | ||
| 52 | public class SeBootstrap implements Extension { | 49 | public class SeBootstrap implements Extension { |
| 53 | 50 | ||
| 54 | - public void storeContexts(@Observes final AfterBeanDiscovery event) { | ||
| 55 | - ContextManager.initialize(event); | ||
| 56 | - | ||
| 57 | - ContextManager.add(new ThreadLocalContext(ViewScoped.class), event); | ||
| 58 | - ContextManager.add(new ThreadLocalContext(SessionScoped.class), event); | ||
| 59 | - ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event); | ||
| 60 | - ContextManager.add(new ThreadLocalContext(RequestScoped.class), event); | ||
| 61 | - } | ||
| 62 | - | ||
| 63 | public void addContexts(@Observes final AfterDeploymentValidation event) { | 51 | public void addContexts(@Observes final AfterDeploymentValidation event) { |
| 64 | - ContextManager.activate(ThreadLocalContext.class, ViewScoped.class); | ||
| 65 | - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); | ||
| 66 | - ContextManager.activate(ThreadLocalContext.class, ConversationScoped.class); | ||
| 67 | - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); | 52 | + RequestContext requestContext = Beans.getReference(RequestContext.class); |
| 53 | + SessionContext sessionContext = Beans.getReference(SessionContext.class); | ||
| 54 | + ViewContext viewContext = Beans.getReference(ViewContext.class); | ||
| 55 | + | ||
| 56 | + requestContext.activate(); | ||
| 57 | + sessionContext.activate(); | ||
| 58 | + viewContext.activate(); | ||
| 68 | } | 59 | } |
| 69 | 60 | ||
| 70 | public void removeContexts(@Observes AfterShutdownProccess event) { | 61 | public void removeContexts(@Observes AfterShutdownProccess event) { |
| 71 | - ContextManager.deactivate(ThreadLocalContext.class, ViewScoped.class); | ||
| 72 | - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); | ||
| 73 | - ContextManager.deactivate(ThreadLocalContext.class, ConversationScoped.class); | ||
| 74 | - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); | 62 | + RequestContext requestContext = Beans.getReference(RequestContext.class); |
| 63 | + SessionContext sessionContext = Beans.getReference(SessionContext.class); | ||
| 64 | + ViewContext viewContext = Beans.getReference(ViewContext.class); | ||
| 65 | + | ||
| 66 | + requestContext.deactivate(); | ||
| 67 | + sessionContext.deactivate(); | ||
| 68 | + viewContext.deactivate(); | ||
| 75 | } | 69 | } |
| 76 | } | 70 | } |