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 extends I> 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 extends I> 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 extends Annotation> 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