From 310bb0d4f4c3c75482ee59b7fd1c4c8220f34731 Mon Sep 17 00:00:00 2001 From: Cleverson Sacramento Date: Wed, 5 Sep 2012 14:11:26 -0300 Subject: [PATCH] Remoção do AbstractBootstrap e refatoração em todos os Bootstraps --- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java | 77 ----------------------------------------------------------------------------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java | 41 +++++++++++++++++++++++++++++++++-------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java | 26 ++++++++++++++++++++------ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java | 13 +++++++++++++ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java | 13 +++++++++++++ impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java | 45 ++++++++++++++++++++++++++++++++++----------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------- impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java | 4 +++- impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java | 213 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/context/ContextsTest.java | 66 ++++++++++++++++++++++++++++++++++-------------------------------- impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java | 32 +++++++++++++++++++++++++++++--- impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/FacesBootstrapTest.java | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------ impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java | 40 ++++++++++++++++++++++++++++++++++------ 13 files changed, 344 insertions(+), 457 deletions(-) delete mode 100644 impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java delete mode 100644 impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java deleted file mode 100644 index ef4c160..0000000 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Demoiselle Framework - * Copyright (C) 2010 SERPRO - * ---------------------------------------------------------------------------- - * This file is part of Demoiselle Framework. - * - * Demoiselle Framework is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License version 3 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License version 3 - * along with this program; if not, see - * or write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301, USA. - * ---------------------------------------------------------------------------- - * Este arquivo é parte do Framework Demoiselle. - * - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação - * do Software Livre (FSF). - * - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português - * para maiores detalhes. - * - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título - * "LICENCA.txt", junto com esse programa. Se não, acesse - * ou escreva para a Fundação do Software Livre (FSF) Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. - */ -package br.gov.frameworkdemoiselle.internal.bootstrap; - -import java.util.Locale; - -import javax.enterprise.inject.spi.AfterBeanDiscovery; -import javax.enterprise.inject.spi.Extension; - -import org.slf4j.Logger; - -import br.gov.frameworkdemoiselle.internal.context.Contexts; -import br.gov.frameworkdemoiselle.internal.context.CustomContext; -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; -import br.gov.frameworkdemoiselle.util.ResourceBundle; - -public abstract class AbstractBootstrap implements Extension { - - protected static ResourceBundle getBundle() { - return getBundle("demoiselle-core-bundle"); - } - - protected static ResourceBundle getBundle(String baseName) { - return ResourceBundleProducer.create(baseName, Locale.getDefault()); - } - - protected static Logger getLogger() { - return LoggerProducer.create(AbstractBootstrap.class); - } - - protected static void addContext(final CustomContext context, final AfterBeanDiscovery event) { - Contexts.add(context, event); - getLogger() - .trace(getBundle().getString("custom-context-was-registered", context.getScope().getCanonicalName())); - } - - protected static void disableContext(final CustomContext context) { - Contexts.remove(context); - getLogger() - .trace(getBundle().getString("custom-context-was-registered", context.getScope().getCanonicalName())); - } -} diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java index aa07123..ed3b036 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java @@ -41,6 +41,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Locale; import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.RequestScoped; @@ -49,31 +50,56 @@ import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedType; +import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; +import org.slf4j.Logger; + import br.gov.frameworkdemoiselle.DemoiselleException; import br.gov.frameworkdemoiselle.annotation.ViewScoped; import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; +import br.gov.frameworkdemoiselle.internal.context.Contexts; import br.gov.frameworkdemoiselle.internal.context.CustomContext; import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; import br.gov.frameworkdemoiselle.util.Reflections; +import br.gov.frameworkdemoiselle.util.ResourceBundle; -public abstract class AbstractLifecycleBootstrap extends AbstractBootstrap { +public abstract class AbstractLifecycleBootstrap implements Extension { private Class annotationClass; @SuppressWarnings("rawtypes") - private final List processors = Collections + private List processors = Collections .synchronizedList(new ArrayList()); - private final List tempContexts = new ArrayList(); + private List tempContexts = new ArrayList(); private AfterBeanDiscovery afterBeanDiscoveryEvent; private boolean registered = false; - // protected abstract AnnotatedMethodProcessor newProcessorInstance(AnnotatedMethod annotatedMethod); + private static Logger logger; + + private static ResourceBundle bundle; + + protected static Logger getLogger() { + if (logger == null) { + logger = LoggerProducer.create(AbstractLifecycleBootstrap.class); + } + + return logger; + } + + protected static ResourceBundle getBundle() { + if (bundle == null) { + bundle = ResourceBundleProducer.create("demoiselle-core-bundle", Locale.getDefault()); + } + + return bundle; + } protected AnnotatedMethodProcessor newProcessorInstance(AnnotatedMethod annotatedMethod) { return new AnnotatedMethodProcessor(annotatedMethod); @@ -111,15 +137,14 @@ public abstract class AbstractLifecycleBootstrap extends A @SuppressWarnings({ "unchecked", "rawtypes" }) protected synchronized void proccessEvent() { - getLogger().debug( - getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName())); + getLogger().debug(getBundle().getString("executing-all", annotationClass.getSimpleName())); Collections.sort(processors); Throwable failure = null; if (!registered) { for (CustomContext tempContext : tempContexts) { - addContext(tempContext, afterBeanDiscoveryEvent); + Contexts.add(tempContext, afterBeanDiscoveryEvent); } registered = true; @@ -153,7 +178,7 @@ public abstract class AbstractLifecycleBootstrap extends A private void unloadTempContexts() { for (CustomContext tempContext : tempContexts) { - disableContext(tempContext); + Contexts.remove(tempContext); } } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java index 13c90a5..915a6d9 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java @@ -6,17 +6,31 @@ import java.util.List; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AnnotatedType; +import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; +import org.slf4j.Logger; + +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; import br.gov.frameworkdemoiselle.util.Reflections; -public class AbstractStrategyBootstrap extends AbstractBootstrap { +public class AbstractStrategyBootstrap implements Extension { + + private Class strategyClass; + + private List> cache; - private Class strategyClass; + private static Logger logger; - private List> cache; + protected static Logger getLogger() { + if (logger == null) { + logger = LoggerProducer.create(AbstractStrategyBootstrap.class); + } + + return logger; + } - protected Class getStrategyClass() { + protected Class getStrategyClass() { if (this.strategyClass == null) { this.strategyClass = Reflections.getGenericTypeArgument(this.getClass(), 0); } @@ -24,9 +38,9 @@ public class AbstractStrategyBootstrap extends AbstractBootstrap { return this.strategyClass; } - public List> getCache() { + public List> getCache() { if (this.cache == null) { - this.cache = Collections.synchronizedList(new ArrayList>()); + this.cache = Collections.synchronizedList(new ArrayList>()); } return this.cache; diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java index f674723..15e8d49 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java @@ -36,7 +36,20 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; +import org.slf4j.Logger; + +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; import br.gov.frameworkdemoiselle.security.Authenticator; public class AuthenticatorBootstrap extends AbstractStrategyBootstrap { + + private static Logger logger; + + protected static Logger getLogger() { + if (logger == null) { + logger = LoggerProducer.create(AuthenticatorBootstrap.class); + } + + return logger; + } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java index 11fa1b2..7d7a8ea 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java @@ -36,7 +36,20 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; +import org.slf4j.Logger; + +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; import br.gov.frameworkdemoiselle.security.Authorizer; public class AuthorizerBootstrap extends AbstractStrategyBootstrap { + + private static Logger logger; + + protected static Logger getLogger() { + if (logger == null) { + logger = LoggerProducer.create(AuthorizerBootstrap.class); + } + + return logger; + } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java index 2937890..c044ce7 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java @@ -37,6 +37,7 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; import java.util.HashMap; +import java.util.Locale; import java.util.Map; import javax.enterprise.event.Observes; @@ -45,18 +46,41 @@ import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.BeforeBeanDiscovery; import javax.enterprise.inject.spi.BeforeShutdown; +import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; import org.slf4j.Logger; +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; import br.gov.frameworkdemoiselle.util.Beans; +import br.gov.frameworkdemoiselle.util.ResourceBundle; -//TODO Inter [NQ]: verificar o melhor nome para todas as classes desta natureza. -public class CoreBootstrap extends AbstractBootstrap { +public class CoreBootstrap implements Extension { - private static final Map, AnnotatedType> beans = new HashMap, AnnotatedType>(); + private final Map, AnnotatedType> beans = new HashMap, AnnotatedType>(); - public static boolean isAnnotatedType(Class type) { + private static Logger logger; + + private static ResourceBundle bundle; + + private static Logger getLogger() { + if (logger == null) { + logger = LoggerProducer.create(CoreBootstrap.class); + } + + return logger; + } + + private static ResourceBundle getBundle() { + if (bundle == null) { + bundle = ResourceBundleProducer.create("demoiselle-core-bundle", Locale.getDefault()); + } + + return bundle; + } + + public boolean isAnnotatedType(Class type) { return beans.containsKey(type); } @@ -64,13 +88,12 @@ public class CoreBootstrap extends AbstractBootstrap { String description; Logger log = getLogger(); - description = getBundle("demoiselle-core-bundle").getString("engine-on"); + description = getBundle().getString("engine-on"); log.info(description); Beans.setBeanManager(beanManager); - description = getBundle("demoiselle-core-bundle").getString("setting-up-bean-manager", - Beans.class.getCanonicalName()); + description = getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName()); log.info(description); } @@ -78,15 +101,15 @@ public class CoreBootstrap extends AbstractBootstrap { beans.put(event.getAnnotatedType().getJavaClass(), event.getAnnotatedType()); } - public static void takeOff(@Observes final AfterDeploymentValidation event) { - String description = getBundle("demoiselle-core-bundle").getString("taking-off"); + public void takeOff(@Observes final AfterDeploymentValidation event) { + String description = getBundle().getString("taking-off"); Logger log = getLogger(); log.info(description); } - public static void engineOff(@Observes final BeforeShutdown event) { - String description = getBundle("demoiselle-core-bundle").getString("engine-off"); + public void engineOff(@Observes final BeforeShutdown event) { + String description = getBundle().getString("engine-off"); Logger log = getLogger(); log.info(description); diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java index ba51b14..e12c750 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java @@ -39,25 +39,58 @@ package br.gov.frameworkdemoiselle.internal.context; import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.List; import javax.enterprise.inject.spi.AfterBeanDiscovery; +import org.slf4j.Logger; + +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; +import br.gov.frameworkdemoiselle.util.ResourceBundle; + public class Contexts { - private static List activeContexts; + private static List activeContexts = Collections.synchronizedList(new ArrayList()); + + private static List inactiveContexts = Collections.synchronizedList(new ArrayList()); + + private static Logger logger; + + private static ResourceBundle bundle; + + private static Logger getLogger() { + if (logger == null) { + logger = LoggerProducer.create(Contexts.class); + } + + return logger; + } + + private static ResourceBundle getBundle() { + if (bundle == null) { + bundle = ResourceBundleProducer.create("demoiselle-core-bundle"); + } - private static List inactiveContexts; + return bundle; + } - public static void add(CustomContext context, AfterBeanDiscovery event) { + private Contexts() { + } + + public static synchronized void add(CustomContext context, AfterBeanDiscovery event) { Class scope = context.getScope(); - if (get(scope, getActiveContexts()) != null) { - getInactiveContexts().add(context); + getLogger() + .trace(getBundle().getString("custom-context-was-registered", context.getScope().getCanonicalName())); + + if (get(scope, activeContexts) != null) { + inactiveContexts.add(context); context.setActive(false); } else { - getActiveContexts().add(context); + activeContexts.add(context); context.setActive(true); } @@ -79,45 +112,43 @@ public class Contexts { return result; } - public static void remove(CustomContext context) { - if (getActiveContexts().contains(context)) { - getActiveContexts().remove(context); + public static synchronized void remove(CustomContext context) { + getLogger().trace( + getBundle().getString("custom-context-was-unregistered", context.getScope().getCanonicalName())); + + if (activeContexts.contains(context)) { + activeContexts.remove(context); context.setActive(false); - CustomContext inactive = get(context.getScope(), getInactiveContexts()); + CustomContext inactive = get(context.getScope(), inactiveContexts); if (inactive != null) { - getActiveContexts().add(inactive); + activeContexts.add(inactive); inactive.setActive(true); - getInactiveContexts().remove(inactive); + inactiveContexts.remove(inactive); } - } else if (getInactiveContexts().contains(context)) { - getInactiveContexts().remove(context); + } else if (inactiveContexts.contains(context)) { + inactiveContexts.remove(context); } } - public static void clear() { - for (CustomContext context : getActiveContexts()) { + public static synchronized void clear() { + CustomContext context; + for (Iterator iter = activeContexts.iterator(); iter.hasNext();) { + context = iter.next(); context.setActive(false); + iter.remove(); } - activeContexts = null; - inactiveContexts = null; + activeContexts.clear(); + inactiveContexts.clear(); } - public static List getActiveContexts() { - if (activeContexts == null) { - activeContexts = Collections.synchronizedList(new ArrayList()); - } - + public static synchronized List getActiveContexts() { return activeContexts; } - public static List getInactiveContexts() { - if (inactiveContexts == null) { - inactiveContexts = Collections.synchronizedList(new ArrayList()); - } - + public static synchronized List getInactiveContexts() { return inactiveContexts; } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java index 461caaf..5b0659a 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java @@ -54,6 +54,7 @@ import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap; import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; import br.gov.frameworkdemoiselle.stereotype.Controller; +import br.gov.frameworkdemoiselle.util.Beans; import br.gov.frameworkdemoiselle.util.ResourceBundle; @Interceptor @@ -89,8 +90,9 @@ public class ExceptionHandlerInterceptor implements Serializable { private final Class getType(final InvocationContext ic) { Class type = ic.getTarget().getClass(); + CoreBootstrap bootstrap = Beans.getReference(CoreBootstrap.class); - if (!CoreBootstrap.isAnnotatedType(type)) { + if (!bootstrap.isAnnotatedType(type)) { type = type.getSuperclass(); getLogger().debug( getBundle().getString("proxy-detected", ic.getTarget().getClass(), diff --git a/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java b/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java deleted file mode 100644 index cf4258b..0000000 --- a/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Demoiselle Framework - * Copyright (C) 2010 SERPRO - * ---------------------------------------------------------------------------- - * This file is part of Demoiselle Framework. - * - * Demoiselle Framework is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License version 3 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License version 3 - * along with this program; if not, see - * or write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301, USA. - * ---------------------------------------------------------------------------- - * Este arquivo é parte do Framework Demoiselle. - * - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação - * do Software Livre (FSF). - * - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português - * para maiores detalhes. - * - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título - * "LICENCA.txt", junto com esse programa. Se não, acesse - * ou escreva para a Fundação do Software Livre (FSF) Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. - */ -package br.gov.frameworkdemoiselle.internal.bootstrap; - -import static org.easymock.EasyMock.expect; -import static org.powermock.api.easymock.PowerMock.mockStatic; -import static org.powermock.api.easymock.PowerMock.replayAll; -import static org.powermock.api.easymock.PowerMock.verifyAll; - -import javax.enterprise.inject.spi.AfterBeanDiscovery; -import javax.inject.Scope; - -import org.easymock.EasyMock; -import org.junit.After; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.api.easymock.PowerMock; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.slf4j.Logger; - -import br.gov.frameworkdemoiselle.internal.context.Contexts; -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({ LoggerProducer.class, Contexts.class }) -public class AbstractBootstrapTest { - - @After - public void afterTests() { - for(int x=0; x < Contexts.getActiveContexts().size(); x++) - Contexts.getActiveContexts().remove(x); - - for(int x=0; x < Contexts.getInactiveContexts().size(); x++) - Contexts.getInactiveContexts().remove(x); - } - - @Test - @SuppressWarnings({ "unchecked"}) - public void testAddContextThatIsNotActive() { - mockStatic(LoggerProducer.class); - Logger logger = PowerMock.createMock(Logger.class); - logger.trace(EasyMock.anyObject(String.class)); - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger); - replayAll(logger, LoggerProducer.class); - - ThreadLocalContext context = new ThreadLocalContext(Scope.class); - - AbstractBootstrap.addContext(context, null); - - Assert.assertTrue(context.isActive()); - Assert.assertEquals(1, Contexts.getActiveContexts().size()); - } - - @Test - @SuppressWarnings({ "unchecked"}) - public void testAddContextThatIsActive() { - mockStatic(LoggerProducer.class); - Logger logger = PowerMock.createMock(Logger.class); - logger.trace(EasyMock.anyObject(String.class)); - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger); - replayAll(logger, LoggerProducer.class); - - ThreadLocalContext context = new ThreadLocalContext(Scope.class); - Contexts.getActiveContexts().add(context); - - AbstractBootstrap.addContext(context, null); - - Assert.assertFalse(context.isActive()); - Assert.assertEquals(1, Contexts.getInactiveContexts().size()); - } - - @Test - @SuppressWarnings({ "unchecked"}) - public void testAddContextThatEventIsNotNull() { - mockStatic(LoggerProducer.class); - Logger logger = PowerMock.createMock(Logger.class); - logger.trace(EasyMock.anyObject(String.class)); - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger); - AfterBeanDiscovery event = PowerMock.createMock(AfterBeanDiscovery.class); - - ThreadLocalContext context = new ThreadLocalContext(Scope.class); - event.addContext(context); - - replayAll(logger, LoggerProducer.class); - - - AbstractBootstrap.addContext(context, event); - - Assert.assertTrue(context.isActive()); - Assert.assertEquals(1, Contexts.getActiveContexts().size()); - - verifyAll(); - } - - @Test - @SuppressWarnings({ "unchecked"}) - public void testDisableContextIsActive() { - mockStatic(LoggerProducer.class); - Logger logger = PowerMock.createMock(Logger.class); - logger.trace(EasyMock.anyObject(String.class)); - logger.trace(EasyMock.anyObject(String.class)); - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes(); - - ThreadLocalContext context = new ThreadLocalContext(Scope.class); - - replayAll(logger, LoggerProducer.class); - - - AbstractBootstrap.addContext(context, null); - - Assert.assertTrue(context.isActive()); - Assert.assertEquals(1, Contexts.getActiveContexts().size()); - - AbstractBootstrap.disableContext(context); - - Assert.assertFalse(context.isActive()); - Assert.assertEquals(0, Contexts.getActiveContexts().size()); - - } - - @Test - @SuppressWarnings({ "unchecked"}) - public void testDisableContextIsNotActive() { - mockStatic(LoggerProducer.class); - Logger logger = PowerMock.createMock(Logger.class); - logger.trace(EasyMock.anyObject(String.class)); - logger.trace(EasyMock.anyObject(String.class)); - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes(); - - ThreadLocalContext context = new ThreadLocalContext(Scope.class); - - replayAll(logger, LoggerProducer.class); - - Contexts.getInactiveContexts().add(context); - Assert.assertEquals(1, Contexts.getInactiveContexts().size()); - - AbstractBootstrap.disableContext(context); - - Assert.assertEquals(0, Contexts.getInactiveContexts().size()); - - } - - @Test - @SuppressWarnings({ "unchecked"}) - public void testDisableContextIsActiveAndExistTheSameScopeInTheInactives() { - mockStatic(LoggerProducer.class); - Logger logger = PowerMock.createMock(Logger.class); - logger.trace(EasyMock.anyObject(String.class)); - logger.trace(EasyMock.anyObject(String.class)); - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes(); - - ThreadLocalContext context = new ThreadLocalContext(Scope.class); - - replayAll(logger, LoggerProducer.class); - - AbstractBootstrap.addContext(context, null); - - ThreadLocalContext context2 = new ThreadLocalContext(Scope.class); - context2.setActive(false); - Contexts.getInactiveContexts().add(context2); - - Assert.assertTrue(context.isActive()); - Assert.assertEquals(1, Contexts.getActiveContexts().size()); - - Assert.assertFalse(context2.isActive()); - Assert.assertEquals(1, Contexts.getInactiveContexts().size()); - - AbstractBootstrap.disableContext(context); - - Assert.assertFalse(context.isActive()); - Assert.assertTrue(context2.isActive()); - Assert.assertEquals(1, Contexts.getActiveContexts().size()); - Assert.assertEquals(0, Contexts.getInactiveContexts().size()); - - } -} diff --git a/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/context/ContextsTest.java b/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/context/ContextsTest.java index 2ffda48..3337b31 100644 --- a/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/context/ContextsTest.java +++ b/impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/context/ContextsTest.java @@ -1,24 +1,41 @@ /* - * Demoiselle Framework Copyright (C) 2010 SERPRO - * ---------------------------------------------------------------------------- This file is part of Demoiselle - * Framework. Demoiselle Framework is free software; you can redistribute it and/or modify it under the terms of the GNU - * Lesser General Public License version 3 as published by the Free Software Foundation. This program is distributed in - * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a - * copy of the GNU Lesser General Public License version 3 along with this program; if not, see - * or write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. ---------------------------------------------------------------------------- Este arquivo - * é parte do Framework Demoiselle. O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação do Software Livre (FSF). Este - * programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de - * ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português para - * maiores detalhes. Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título "LICENCA.txt", junto com esse - * programa. Se não, acesse ou escreva para a Fundação do Software Livre (FSF) Inc., 51 - * Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. + * Demoiselle Framework + * Copyright (C) 2010 SERPRO + * ---------------------------------------------------------------------------- + * This file is part of Demoiselle Framework. + * + * Demoiselle Framework is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License version 3 + * along with this program; if not, see + * or write to the Free Software Foundation, Inc., 51 Franklin Street, + * Fifth Floor, Boston, MA 02110-1301, USA. + * ---------------------------------------------------------------------------- + * Este arquivo é parte do Framework Demoiselle. + * + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação + * do Software Livre (FSF). + * + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português + * para maiores detalhes. + * + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título + * "LICENCA.txt", junto com esse programa. Se não, acesse + * ou escreva para a Fundação do Software Livre (FSF) Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. */ package br.gov.frameworkdemoiselle.internal.context; -import org.junit.Ignore; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; @@ -34,9 +51,7 @@ import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped; import javax.enterprise.inject.spi.AfterBeanDiscovery; -import org.junit.Assert; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import br.gov.frameworkdemoiselle.annotation.ViewScoped; @@ -45,11 +60,6 @@ public class ContextsTest { private AfterBeanDiscovery event; - @BeforeClass - public static void setUpClass() throws Exception { - // TODO AfterBeanDiscovery event = ??? mock ??? - } - @Before public void setUp() throws Exception { Contexts.clear(); @@ -194,12 +204,4 @@ public class ContextsTest { Contexts.add(context, event); assertEquals(1, Contexts.getActiveContexts().size()); } - - // Only to get 100% on coverage report - @Test - public void testCreateNew() { - Contexts context = new Contexts(); - Assert.assertNotNull(context); - } - } diff --git a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java index 13c286c..77b3492 100644 --- a/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java +++ b/impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java @@ -36,14 +36,40 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; +import java.util.ArrayList; +import java.util.List; + import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; +import javax.enterprise.inject.spi.AfterDeploymentValidation; +import javax.enterprise.inject.spi.Extension; +import br.gov.frameworkdemoiselle.internal.context.Contexts; +import br.gov.frameworkdemoiselle.internal.context.CustomContext; import br.gov.frameworkdemoiselle.internal.context.ViewContext; +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; + +public class JsfBootstrap implements Extension { + + private List tempContexts = new ArrayList(); + + private AfterBeanDiscovery afterBeanDiscoveryEvent; -public class JsfBootstrap extends AbstractBootstrap { + public void storeContexts(@Observes final AfterBeanDiscovery event) { + tempContexts.add(new ViewContext()); + + afterBeanDiscoveryEvent = event; + } + + public void addContexts(@Observes final AfterDeploymentValidation event) { + for (CustomContext tempContext : tempContexts) { + Contexts.add(tempContext, afterBeanDiscoveryEvent); + } + } - public void loadContexts(@Observes final AfterBeanDiscovery event) { - addContext(new ViewContext(), event); + public void removeContexts(@Observes AfterShutdownProccess event) { + for (CustomContext tempContext : tempContexts) { + Contexts.remove(tempContext); + } } } diff --git a/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/FacesBootstrapTest.java b/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/FacesBootstrapTest.java index 01160ef..401df82 100644 --- a/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/FacesBootstrapTest.java +++ b/impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/FacesBootstrapTest.java @@ -1,72 +1,72 @@ -/* - * Demoiselle Framework - * Copyright (C) 2010 SERPRO - * ---------------------------------------------------------------------------- - * This file is part of Demoiselle Framework. - * - * Demoiselle Framework is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License version 3 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License version 3 - * along with this program; if not, see - * or write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301, USA. - * ---------------------------------------------------------------------------- - * Este arquivo é parte do Framework Demoiselle. - * - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação - * do Software Livre (FSF). - * - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português - * para maiores detalhes. - * - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título - * "LICENCA.txt", junto com esse programa. Se não, acesse - * ou escreva para a Fundação do Software Livre (FSF) Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. - */ -package br.gov.frameworkdemoiselle.internal.bootstrap; -import org.junit.Ignore; -import static org.powermock.api.easymock.PowerMock.createMock; -import static org.powermock.api.easymock.PowerMock.replay; -import static org.powermock.api.easymock.PowerMock.verifyAll; - -import javax.enterprise.inject.spi.AfterBeanDiscovery; - -import org.easymock.EasyMock; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.powermock.modules.junit4.PowerMockRunner; - -import br.gov.frameworkdemoiselle.internal.context.ViewContext; -@Ignore -@RunWith(PowerMockRunner.class) -public class FacesBootstrapTest { - - private JsfBootstrap bootstrap; - - @Before - public void before() { - bootstrap = new JsfBootstrap(); - } - - @Test - public void testLoadContexts() { - AfterBeanDiscovery event = createMock(AfterBeanDiscovery.class); - event.addContext(EasyMock.anyObject(ViewContext.class)); - replay(event); - bootstrap.loadContexts(event); - verifyAll(); - } - -} +///* +// * Demoiselle Framework +// * Copyright (C) 2010 SERPRO +// * ---------------------------------------------------------------------------- +// * This file is part of Demoiselle Framework. +// * +// * Demoiselle Framework is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public License version 3 +// * as published by the Free Software Foundation. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public License version 3 +// * along with this program; if not, see +// * or write to the Free Software Foundation, Inc., 51 Franklin Street, +// * Fifth Floor, Boston, MA 02110-1301, USA. +// * ---------------------------------------------------------------------------- +// * Este arquivo é parte do Framework Demoiselle. +// * +// * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou +// * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação +// * do Software Livre (FSF). +// * +// * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA +// * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou +// * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português +// * para maiores detalhes. +// * +// * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título +// * "LICENCA.txt", junto com esse programa. Se não, acesse +// * ou escreva para a Fundação do Software Livre (FSF) Inc., +// * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. +// */ +//package br.gov.frameworkdemoiselle.internal.bootstrap; +//import org.junit.Ignore; +//import static org.powermock.api.easymock.PowerMock.createMock; +//import static org.powermock.api.easymock.PowerMock.replay; +//import static org.powermock.api.easymock.PowerMock.verifyAll; +// +//import javax.enterprise.inject.spi.AfterBeanDiscovery; +// +//import org.easymock.EasyMock; +//import org.junit.Before; +//import org.junit.Test; +//import org.junit.runner.RunWith; +//import org.powermock.modules.junit4.PowerMockRunner; +// +//import br.gov.frameworkdemoiselle.internal.context.ViewContext; +//@Ignore +//@RunWith(PowerMockRunner.class) +//public class FacesBootstrapTest { +// +// private JsfBootstrap bootstrap; +// +// @Before +// public void before() { +// bootstrap = new JsfBootstrap(); +// } +// +// @Test +// public void testLoadContexts() { +// AfterBeanDiscovery event = createMock(AfterBeanDiscovery.class); +// event.addContext(EasyMock.anyObject(ViewContext.class)); +// replay(event); +// bootstrap.loadContexts(event); +// verifyAll(); +// } +// +//} diff --git a/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java b/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java index 82ed588..e5634ed 100644 --- a/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java +++ b/impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java @@ -36,19 +36,47 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; +import java.util.ArrayList; +import java.util.List; + +import javax.enterprise.context.ConversationScoped; import javax.enterprise.context.RequestScoped; import javax.enterprise.context.SessionScoped; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterBeanDiscovery; +import javax.enterprise.inject.spi.AfterDeploymentValidation; +import javax.enterprise.inject.spi.Extension; import br.gov.frameworkdemoiselle.annotation.ViewScoped; +import br.gov.frameworkdemoiselle.internal.context.Contexts; +import br.gov.frameworkdemoiselle.internal.context.CustomContext; import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; + +public class SeBootstrap implements Extension { + + private List tempContexts = new ArrayList(); + + private AfterBeanDiscovery afterBeanDiscoveryEvent; -public class SeBootstrap extends AbstractBootstrap { + public void storeContexts(@Observes final AfterBeanDiscovery event) { + tempContexts.add(new ThreadLocalContext(ViewScoped.class)); + tempContexts.add(new ThreadLocalContext(SessionScoped.class)); + tempContexts.add(new ThreadLocalContext(ConversationScoped.class)); + tempContexts.add(new ThreadLocalContext(RequestScoped.class)); + + afterBeanDiscoveryEvent = event; + } + + public void addContexts(@Observes final AfterDeploymentValidation event) { + for (CustomContext tempContext : tempContexts) { + Contexts.add(tempContext, afterBeanDiscoveryEvent); + } + } - public void loadContext(@Observes final AfterBeanDiscovery event) { - addContext(new ThreadLocalContext(RequestScoped.class), event); - addContext(new ThreadLocalContext(SessionScoped.class), event); - addContext(new ThreadLocalContext(ViewScoped.class), event); + public void removeContexts(@Observes AfterShutdownProccess event) { + for (CustomContext tempContext : tempContexts) { + Contexts.remove(tempContext); + } } -} \ No newline at end of file +} -- libgit2 0.21.2