Commit 310bb0d4f4c3c75482ee59b7fd1c4c8220f34731
1 parent
04aa1987
Exists in
master
Remoção do AbstractBootstrap e refatoração em todos os Bootstraps
Showing
13 changed files
with
344 additions
and
457 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrap.java
... | ... | @@ -1,77 +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.bootstrap; | |
38 | - | |
39 | -import java.util.Locale; | |
40 | - | |
41 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | |
42 | -import javax.enterprise.inject.spi.Extension; | |
43 | - | |
44 | -import org.slf4j.Logger; | |
45 | - | |
46 | -import br.gov.frameworkdemoiselle.internal.context.Contexts; | |
47 | -import br.gov.frameworkdemoiselle.internal.context.CustomContext; | |
48 | -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
49 | -import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; | |
50 | -import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
51 | - | |
52 | -public abstract class AbstractBootstrap implements Extension { | |
53 | - | |
54 | - protected static ResourceBundle getBundle() { | |
55 | - return getBundle("demoiselle-core-bundle"); | |
56 | - } | |
57 | - | |
58 | - protected static ResourceBundle getBundle(String baseName) { | |
59 | - return ResourceBundleProducer.create(baseName, Locale.getDefault()); | |
60 | - } | |
61 | - | |
62 | - protected static Logger getLogger() { | |
63 | - return LoggerProducer.create(AbstractBootstrap.class); | |
64 | - } | |
65 | - | |
66 | - protected static void addContext(final CustomContext context, final AfterBeanDiscovery event) { | |
67 | - Contexts.add(context, event); | |
68 | - getLogger() | |
69 | - .trace(getBundle().getString("custom-context-was-registered", context.getScope().getCanonicalName())); | |
70 | - } | |
71 | - | |
72 | - protected static void disableContext(final CustomContext context) { | |
73 | - Contexts.remove(context); | |
74 | - getLogger() | |
75 | - .trace(getBundle().getString("custom-context-was-registered", context.getScope().getCanonicalName())); | |
76 | - } | |
77 | -} |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
... | ... | @@ -41,6 +41,7 @@ import java.util.ArrayList; |
41 | 41 | import java.util.Collections; |
42 | 42 | import java.util.Iterator; |
43 | 43 | import java.util.List; |
44 | +import java.util.Locale; | |
44 | 45 | |
45 | 46 | import javax.enterprise.context.ConversationScoped; |
46 | 47 | import javax.enterprise.context.RequestScoped; |
... | ... | @@ -49,31 +50,56 @@ import javax.enterprise.event.Observes; |
49 | 50 | import javax.enterprise.inject.spi.AfterBeanDiscovery; |
50 | 51 | import javax.enterprise.inject.spi.AnnotatedMethod; |
51 | 52 | import javax.enterprise.inject.spi.AnnotatedType; |
53 | +import javax.enterprise.inject.spi.Extension; | |
52 | 54 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
53 | 55 | |
56 | +import org.slf4j.Logger; | |
57 | + | |
54 | 58 | import br.gov.frameworkdemoiselle.DemoiselleException; |
55 | 59 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
56 | 60 | import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; |
61 | +import br.gov.frameworkdemoiselle.internal.context.Contexts; | |
57 | 62 | import br.gov.frameworkdemoiselle.internal.context.CustomContext; |
58 | 63 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; |
59 | 64 | import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; |
65 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
66 | +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; | |
60 | 67 | import br.gov.frameworkdemoiselle.util.Reflections; |
68 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
61 | 69 | |
62 | -public abstract class AbstractLifecycleBootstrap<A extends Annotation> extends AbstractBootstrap { | |
70 | +public abstract class AbstractLifecycleBootstrap<A extends Annotation> implements Extension { | |
63 | 71 | |
64 | 72 | private Class<A> annotationClass; |
65 | 73 | |
66 | 74 | @SuppressWarnings("rawtypes") |
67 | - private final List<AnnotatedMethodProcessor> processors = Collections | |
75 | + private List<AnnotatedMethodProcessor> processors = Collections | |
68 | 76 | .synchronizedList(new ArrayList<AnnotatedMethodProcessor>()); |
69 | 77 | |
70 | - private final List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | |
78 | + private List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | |
71 | 79 | |
72 | 80 | private AfterBeanDiscovery afterBeanDiscoveryEvent; |
73 | 81 | |
74 | 82 | private boolean registered = false; |
75 | 83 | |
76 | - // protected abstract <T> AnnotatedMethodProcessor<T> newProcessorInstance(AnnotatedMethod<T> annotatedMethod); | |
84 | + private static Logger logger; | |
85 | + | |
86 | + private static ResourceBundle bundle; | |
87 | + | |
88 | + protected static Logger getLogger() { | |
89 | + if (logger == null) { | |
90 | + logger = LoggerProducer.create(AbstractLifecycleBootstrap.class); | |
91 | + } | |
92 | + | |
93 | + return logger; | |
94 | + } | |
95 | + | |
96 | + protected static ResourceBundle getBundle() { | |
97 | + if (bundle == null) { | |
98 | + bundle = ResourceBundleProducer.create("demoiselle-core-bundle", Locale.getDefault()); | |
99 | + } | |
100 | + | |
101 | + return bundle; | |
102 | + } | |
77 | 103 | |
78 | 104 | protected <T> AnnotatedMethodProcessor<T> newProcessorInstance(AnnotatedMethod<T> annotatedMethod) { |
79 | 105 | return new AnnotatedMethodProcessor<T>(annotatedMethod); |
... | ... | @@ -111,15 +137,14 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> extends A |
111 | 137 | |
112 | 138 | @SuppressWarnings({ "unchecked", "rawtypes" }) |
113 | 139 | protected synchronized void proccessEvent() { |
114 | - getLogger().debug( | |
115 | - getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName())); | |
140 | + getLogger().debug(getBundle().getString("executing-all", annotationClass.getSimpleName())); | |
116 | 141 | |
117 | 142 | Collections.sort(processors); |
118 | 143 | Throwable failure = null; |
119 | 144 | |
120 | 145 | if (!registered) { |
121 | 146 | for (CustomContext tempContext : tempContexts) { |
122 | - addContext(tempContext, afterBeanDiscoveryEvent); | |
147 | + Contexts.add(tempContext, afterBeanDiscoveryEvent); | |
123 | 148 | } |
124 | 149 | |
125 | 150 | registered = true; |
... | ... | @@ -153,7 +178,7 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> extends A |
153 | 178 | |
154 | 179 | private void unloadTempContexts() { |
155 | 180 | for (CustomContext tempContext : tempContexts) { |
156 | - disableContext(tempContext); | |
181 | + Contexts.remove(tempContext); | |
157 | 182 | } |
158 | 183 | } |
159 | 184 | } | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java
... | ... | @@ -6,17 +6,31 @@ import java.util.List; |
6 | 6 | |
7 | 7 | import javax.enterprise.event.Observes; |
8 | 8 | import javax.enterprise.inject.spi.AnnotatedType; |
9 | +import javax.enterprise.inject.spi.Extension; | |
9 | 10 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
10 | 11 | |
12 | +import org.slf4j.Logger; | |
13 | + | |
14 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
11 | 15 | import br.gov.frameworkdemoiselle.util.Reflections; |
12 | 16 | |
13 | -public class AbstractStrategyBootstrap<I> extends AbstractBootstrap { | |
17 | +public class AbstractStrategyBootstrap<I> implements Extension { | |
18 | + | |
19 | + private Class<? extends I> strategyClass; | |
20 | + | |
21 | + private List<Class<? extends I>> cache; | |
14 | 22 | |
15 | - private Class<I> strategyClass; | |
23 | + private static Logger logger; | |
16 | 24 | |
17 | - private List<Class<I>> cache; | |
25 | + protected static Logger getLogger() { | |
26 | + if (logger == null) { | |
27 | + logger = LoggerProducer.create(AbstractStrategyBootstrap.class); | |
28 | + } | |
29 | + | |
30 | + return logger; | |
31 | + } | |
18 | 32 | |
19 | - protected Class<I> getStrategyClass() { | |
33 | + protected Class<? extends I> getStrategyClass() { | |
20 | 34 | if (this.strategyClass == null) { |
21 | 35 | this.strategyClass = Reflections.getGenericTypeArgument(this.getClass(), 0); |
22 | 36 | } |
... | ... | @@ -24,9 +38,9 @@ public class AbstractStrategyBootstrap<I> extends AbstractBootstrap { |
24 | 38 | return this.strategyClass; |
25 | 39 | } |
26 | 40 | |
27 | - public List<Class<I>> getCache() { | |
41 | + public List<Class<? extends I>> getCache() { | |
28 | 42 | if (this.cache == null) { |
29 | - this.cache = Collections.synchronizedList(new ArrayList<Class<I>>()); | |
43 | + this.cache = Collections.synchronizedList(new ArrayList<Class<? extends I>>()); | |
30 | 44 | } |
31 | 45 | |
32 | 46 | return this.cache; | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthenticatorBootstrap.java
... | ... | @@ -36,7 +36,20 @@ |
36 | 36 | */ |
37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
38 | 38 | |
39 | +import org.slf4j.Logger; | |
40 | + | |
41 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
39 | 42 | import br.gov.frameworkdemoiselle.security.Authenticator; |
40 | 43 | |
41 | 44 | public class AuthenticatorBootstrap extends AbstractStrategyBootstrap<Authenticator> { |
45 | + | |
46 | + private static Logger logger; | |
47 | + | |
48 | + protected static Logger getLogger() { | |
49 | + if (logger == null) { | |
50 | + logger = LoggerProducer.create(AuthenticatorBootstrap.class); | |
51 | + } | |
52 | + | |
53 | + return logger; | |
54 | + } | |
42 | 55 | } | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AuthorizerBootstrap.java
... | ... | @@ -36,7 +36,20 @@ |
36 | 36 | */ |
37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
38 | 38 | |
39 | +import org.slf4j.Logger; | |
40 | + | |
41 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
39 | 42 | import br.gov.frameworkdemoiselle.security.Authorizer; |
40 | 43 | |
41 | 44 | public class AuthorizerBootstrap extends AbstractStrategyBootstrap<Authorizer> { |
45 | + | |
46 | + private static Logger logger; | |
47 | + | |
48 | + protected static Logger getLogger() { | |
49 | + if (logger == null) { | |
50 | + logger = LoggerProducer.create(AuthorizerBootstrap.class); | |
51 | + } | |
52 | + | |
53 | + return logger; | |
54 | + } | |
42 | 55 | } | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java
... | ... | @@ -37,6 +37,7 @@ |
37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
38 | 38 | |
39 | 39 | import java.util.HashMap; |
40 | +import java.util.Locale; | |
40 | 41 | import java.util.Map; |
41 | 42 | |
42 | 43 | import javax.enterprise.event.Observes; |
... | ... | @@ -45,18 +46,41 @@ import javax.enterprise.inject.spi.AnnotatedType; |
45 | 46 | import javax.enterprise.inject.spi.BeanManager; |
46 | 47 | import javax.enterprise.inject.spi.BeforeBeanDiscovery; |
47 | 48 | import javax.enterprise.inject.spi.BeforeShutdown; |
49 | +import javax.enterprise.inject.spi.Extension; | |
48 | 50 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
49 | 51 | |
50 | 52 | import org.slf4j.Logger; |
51 | 53 | |
54 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
55 | +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; | |
52 | 56 | import br.gov.frameworkdemoiselle.util.Beans; |
57 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
53 | 58 | |
54 | -//TODO Inter [NQ]: verificar o melhor nome para todas as classes desta natureza. | |
55 | -public class CoreBootstrap extends AbstractBootstrap { | |
59 | +public class CoreBootstrap implements Extension { | |
56 | 60 | |
57 | - private static final Map<Class<?>, AnnotatedType<?>> beans = new HashMap<Class<?>, AnnotatedType<?>>(); | |
61 | + private final Map<Class<?>, AnnotatedType<?>> beans = new HashMap<Class<?>, AnnotatedType<?>>(); | |
58 | 62 | |
59 | - public static boolean isAnnotatedType(Class<?> type) { | |
63 | + private static Logger logger; | |
64 | + | |
65 | + private static ResourceBundle bundle; | |
66 | + | |
67 | + private static Logger getLogger() { | |
68 | + if (logger == null) { | |
69 | + logger = LoggerProducer.create(CoreBootstrap.class); | |
70 | + } | |
71 | + | |
72 | + return logger; | |
73 | + } | |
74 | + | |
75 | + private static ResourceBundle getBundle() { | |
76 | + if (bundle == null) { | |
77 | + bundle = ResourceBundleProducer.create("demoiselle-core-bundle", Locale.getDefault()); | |
78 | + } | |
79 | + | |
80 | + return bundle; | |
81 | + } | |
82 | + | |
83 | + public boolean isAnnotatedType(Class<?> type) { | |
60 | 84 | return beans.containsKey(type); |
61 | 85 | } |
62 | 86 | |
... | ... | @@ -64,13 +88,12 @@ public class CoreBootstrap extends AbstractBootstrap { |
64 | 88 | String description; |
65 | 89 | Logger log = getLogger(); |
66 | 90 | |
67 | - description = getBundle("demoiselle-core-bundle").getString("engine-on"); | |
91 | + description = getBundle().getString("engine-on"); | |
68 | 92 | log.info(description); |
69 | 93 | |
70 | 94 | Beans.setBeanManager(beanManager); |
71 | 95 | |
72 | - description = getBundle("demoiselle-core-bundle").getString("setting-up-bean-manager", | |
73 | - Beans.class.getCanonicalName()); | |
96 | + description = getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName()); | |
74 | 97 | log.info(description); |
75 | 98 | } |
76 | 99 | |
... | ... | @@ -78,15 +101,15 @@ public class CoreBootstrap extends AbstractBootstrap { |
78 | 101 | beans.put(event.getAnnotatedType().getJavaClass(), event.getAnnotatedType()); |
79 | 102 | } |
80 | 103 | |
81 | - public static void takeOff(@Observes final AfterDeploymentValidation event) { | |
82 | - String description = getBundle("demoiselle-core-bundle").getString("taking-off"); | |
104 | + public void takeOff(@Observes final AfterDeploymentValidation event) { | |
105 | + String description = getBundle().getString("taking-off"); | |
83 | 106 | |
84 | 107 | Logger log = getLogger(); |
85 | 108 | log.info(description); |
86 | 109 | } |
87 | 110 | |
88 | - public static void engineOff(@Observes final BeforeShutdown event) { | |
89 | - String description = getBundle("demoiselle-core-bundle").getString("engine-off"); | |
111 | + public void engineOff(@Observes final BeforeShutdown event) { | |
112 | + String description = getBundle().getString("engine-off"); | |
90 | 113 | |
91 | 114 | Logger log = getLogger(); |
92 | 115 | log.info(description); | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/Contexts.java
... | ... | @@ -39,25 +39,58 @@ package br.gov.frameworkdemoiselle.internal.context; |
39 | 39 | import java.lang.annotation.Annotation; |
40 | 40 | import java.util.ArrayList; |
41 | 41 | import java.util.Collections; |
42 | +import java.util.Iterator; | |
42 | 43 | import java.util.List; |
43 | 44 | |
44 | 45 | import javax.enterprise.inject.spi.AfterBeanDiscovery; |
45 | 46 | |
47 | +import org.slf4j.Logger; | |
48 | + | |
49 | +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
50 | +import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; | |
51 | +import br.gov.frameworkdemoiselle.util.ResourceBundle; | |
52 | + | |
46 | 53 | public class Contexts { |
47 | 54 | |
48 | - private static List<CustomContext> activeContexts; | |
55 | + private static List<CustomContext> activeContexts = Collections.synchronizedList(new ArrayList<CustomContext>()); | |
56 | + | |
57 | + private static List<CustomContext> inactiveContexts = Collections.synchronizedList(new ArrayList<CustomContext>()); | |
58 | + | |
59 | + private static Logger logger; | |
60 | + | |
61 | + private static ResourceBundle bundle; | |
62 | + | |
63 | + private static Logger getLogger() { | |
64 | + if (logger == null) { | |
65 | + logger = LoggerProducer.create(Contexts.class); | |
66 | + } | |
67 | + | |
68 | + return logger; | |
69 | + } | |
70 | + | |
71 | + private static ResourceBundle getBundle() { | |
72 | + if (bundle == null) { | |
73 | + bundle = ResourceBundleProducer.create("demoiselle-core-bundle"); | |
74 | + } | |
49 | 75 | |
50 | - private static List<CustomContext> inactiveContexts; | |
76 | + return bundle; | |
77 | + } | |
51 | 78 | |
52 | - public static void add(CustomContext context, AfterBeanDiscovery event) { | |
79 | + private Contexts() { | |
80 | + } | |
81 | + | |
82 | + public static synchronized void add(CustomContext context, AfterBeanDiscovery event) { | |
53 | 83 | Class<? extends Annotation> scope = context.getScope(); |
54 | 84 | |
55 | - if (get(scope, getActiveContexts()) != null) { | |
56 | - getInactiveContexts().add(context); | |
85 | + getLogger() | |
86 | + .trace(getBundle().getString("custom-context-was-registered", context.getScope().getCanonicalName())); | |
87 | + | |
88 | + if (get(scope, activeContexts) != null) { | |
89 | + inactiveContexts.add(context); | |
57 | 90 | context.setActive(false); |
58 | 91 | |
59 | 92 | } else { |
60 | - getActiveContexts().add(context); | |
93 | + activeContexts.add(context); | |
61 | 94 | context.setActive(true); |
62 | 95 | } |
63 | 96 | |
... | ... | @@ -79,45 +112,43 @@ public class Contexts { |
79 | 112 | return result; |
80 | 113 | } |
81 | 114 | |
82 | - public static void remove(CustomContext context) { | |
83 | - if (getActiveContexts().contains(context)) { | |
84 | - getActiveContexts().remove(context); | |
115 | + public static synchronized void remove(CustomContext context) { | |
116 | + getLogger().trace( | |
117 | + getBundle().getString("custom-context-was-unregistered", context.getScope().getCanonicalName())); | |
118 | + | |
119 | + if (activeContexts.contains(context)) { | |
120 | + activeContexts.remove(context); | |
85 | 121 | context.setActive(false); |
86 | 122 | |
87 | - CustomContext inactive = get(context.getScope(), getInactiveContexts()); | |
123 | + CustomContext inactive = get(context.getScope(), inactiveContexts); | |
88 | 124 | if (inactive != null) { |
89 | - getActiveContexts().add(inactive); | |
125 | + activeContexts.add(inactive); | |
90 | 126 | inactive.setActive(true); |
91 | - getInactiveContexts().remove(inactive); | |
127 | + inactiveContexts.remove(inactive); | |
92 | 128 | } |
93 | 129 | |
94 | - } else if (getInactiveContexts().contains(context)) { | |
95 | - getInactiveContexts().remove(context); | |
130 | + } else if (inactiveContexts.contains(context)) { | |
131 | + inactiveContexts.remove(context); | |
96 | 132 | } |
97 | 133 | } |
98 | 134 | |
99 | - public static void clear() { | |
100 | - for (CustomContext context : getActiveContexts()) { | |
135 | + public static synchronized void clear() { | |
136 | + CustomContext context; | |
137 | + for (Iterator<CustomContext> iter = activeContexts.iterator(); iter.hasNext();) { | |
138 | + context = iter.next(); | |
101 | 139 | context.setActive(false); |
140 | + iter.remove(); | |
102 | 141 | } |
103 | 142 | |
104 | - activeContexts = null; | |
105 | - inactiveContexts = null; | |
143 | + activeContexts.clear(); | |
144 | + inactiveContexts.clear(); | |
106 | 145 | } |
107 | 146 | |
108 | - public static List<CustomContext> getActiveContexts() { | |
109 | - if (activeContexts == null) { | |
110 | - activeContexts = Collections.synchronizedList(new ArrayList<CustomContext>()); | |
111 | - } | |
112 | - | |
147 | + public static synchronized List<CustomContext> getActiveContexts() { | |
113 | 148 | return activeContexts; |
114 | 149 | } |
115 | 150 | |
116 | - public static List<CustomContext> getInactiveContexts() { | |
117 | - if (inactiveContexts == null) { | |
118 | - inactiveContexts = Collections.synchronizedList(new ArrayList<CustomContext>()); | |
119 | - } | |
120 | - | |
151 | + public static synchronized List<CustomContext> getInactiveContexts() { | |
121 | 152 | return inactiveContexts; |
122 | 153 | } |
123 | 154 | } | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/interceptor/ExceptionHandlerInterceptor.java
... | ... | @@ -54,6 +54,7 @@ import br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap; |
54 | 54 | import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; |
55 | 55 | import br.gov.frameworkdemoiselle.internal.producer.ResourceBundleProducer; |
56 | 56 | import br.gov.frameworkdemoiselle.stereotype.Controller; |
57 | +import br.gov.frameworkdemoiselle.util.Beans; | |
57 | 58 | import br.gov.frameworkdemoiselle.util.ResourceBundle; |
58 | 59 | |
59 | 60 | @Interceptor |
... | ... | @@ -89,8 +90,9 @@ public class ExceptionHandlerInterceptor implements Serializable { |
89 | 90 | |
90 | 91 | private final Class<?> getType(final InvocationContext ic) { |
91 | 92 | Class<?> type = ic.getTarget().getClass(); |
93 | + CoreBootstrap bootstrap = Beans.getReference(CoreBootstrap.class); | |
92 | 94 | |
93 | - if (!CoreBootstrap.isAnnotatedType(type)) { | |
95 | + if (!bootstrap.isAnnotatedType(type)) { | |
94 | 96 | type = type.getSuperclass(); |
95 | 97 | getLogger().debug( |
96 | 98 | getBundle().getString("proxy-detected", ic.getTarget().getClass(), | ... | ... |
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractBootstrapTest.java
... | ... | @@ -1,213 +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.bootstrap; | |
38 | - | |
39 | -import static org.easymock.EasyMock.expect; | |
40 | -import static org.powermock.api.easymock.PowerMock.mockStatic; | |
41 | -import static org.powermock.api.easymock.PowerMock.replayAll; | |
42 | -import static org.powermock.api.easymock.PowerMock.verifyAll; | |
43 | - | |
44 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | |
45 | -import javax.inject.Scope; | |
46 | - | |
47 | -import org.easymock.EasyMock; | |
48 | -import org.junit.After; | |
49 | -import org.junit.Assert; | |
50 | -import org.junit.Test; | |
51 | -import org.junit.runner.RunWith; | |
52 | -import org.powermock.api.easymock.PowerMock; | |
53 | -import org.powermock.core.classloader.annotations.PrepareForTest; | |
54 | -import org.powermock.modules.junit4.PowerMockRunner; | |
55 | -import org.slf4j.Logger; | |
56 | - | |
57 | -import br.gov.frameworkdemoiselle.internal.context.Contexts; | |
58 | -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; | |
59 | -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; | |
60 | - | |
61 | -@RunWith(PowerMockRunner.class) | |
62 | -@PrepareForTest({ LoggerProducer.class, Contexts.class }) | |
63 | -public class AbstractBootstrapTest { | |
64 | - | |
65 | - @After | |
66 | - public void afterTests() { | |
67 | - for(int x=0; x < Contexts.getActiveContexts().size(); x++) | |
68 | - Contexts.getActiveContexts().remove(x); | |
69 | - | |
70 | - for(int x=0; x < Contexts.getInactiveContexts().size(); x++) | |
71 | - Contexts.getInactiveContexts().remove(x); | |
72 | - } | |
73 | - | |
74 | - @Test | |
75 | - @SuppressWarnings({ "unchecked"}) | |
76 | - public void testAddContextThatIsNotActive() { | |
77 | - mockStatic(LoggerProducer.class); | |
78 | - Logger logger = PowerMock.createMock(Logger.class); | |
79 | - logger.trace(EasyMock.anyObject(String.class)); | |
80 | - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger); | |
81 | - replayAll(logger, LoggerProducer.class); | |
82 | - | |
83 | - ThreadLocalContext context = new ThreadLocalContext(Scope.class); | |
84 | - | |
85 | - AbstractBootstrap.addContext(context, null); | |
86 | - | |
87 | - Assert.assertTrue(context.isActive()); | |
88 | - Assert.assertEquals(1, Contexts.getActiveContexts().size()); | |
89 | - } | |
90 | - | |
91 | - @Test | |
92 | - @SuppressWarnings({ "unchecked"}) | |
93 | - public void testAddContextThatIsActive() { | |
94 | - mockStatic(LoggerProducer.class); | |
95 | - Logger logger = PowerMock.createMock(Logger.class); | |
96 | - logger.trace(EasyMock.anyObject(String.class)); | |
97 | - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger); | |
98 | - replayAll(logger, LoggerProducer.class); | |
99 | - | |
100 | - ThreadLocalContext context = new ThreadLocalContext(Scope.class); | |
101 | - Contexts.getActiveContexts().add(context); | |
102 | - | |
103 | - AbstractBootstrap.addContext(context, null); | |
104 | - | |
105 | - Assert.assertFalse(context.isActive()); | |
106 | - Assert.assertEquals(1, Contexts.getInactiveContexts().size()); | |
107 | - } | |
108 | - | |
109 | - @Test | |
110 | - @SuppressWarnings({ "unchecked"}) | |
111 | - public void testAddContextThatEventIsNotNull() { | |
112 | - mockStatic(LoggerProducer.class); | |
113 | - Logger logger = PowerMock.createMock(Logger.class); | |
114 | - logger.trace(EasyMock.anyObject(String.class)); | |
115 | - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger); | |
116 | - AfterBeanDiscovery event = PowerMock.createMock(AfterBeanDiscovery.class); | |
117 | - | |
118 | - ThreadLocalContext context = new ThreadLocalContext(Scope.class); | |
119 | - event.addContext(context); | |
120 | - | |
121 | - replayAll(logger, LoggerProducer.class); | |
122 | - | |
123 | - | |
124 | - AbstractBootstrap.addContext(context, event); | |
125 | - | |
126 | - Assert.assertTrue(context.isActive()); | |
127 | - Assert.assertEquals(1, Contexts.getActiveContexts().size()); | |
128 | - | |
129 | - verifyAll(); | |
130 | - } | |
131 | - | |
132 | - @Test | |
133 | - @SuppressWarnings({ "unchecked"}) | |
134 | - public void testDisableContextIsActive() { | |
135 | - mockStatic(LoggerProducer.class); | |
136 | - Logger logger = PowerMock.createMock(Logger.class); | |
137 | - logger.trace(EasyMock.anyObject(String.class)); | |
138 | - logger.trace(EasyMock.anyObject(String.class)); | |
139 | - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes(); | |
140 | - | |
141 | - ThreadLocalContext context = new ThreadLocalContext(Scope.class); | |
142 | - | |
143 | - replayAll(logger, LoggerProducer.class); | |
144 | - | |
145 | - | |
146 | - AbstractBootstrap.addContext(context, null); | |
147 | - | |
148 | - Assert.assertTrue(context.isActive()); | |
149 | - Assert.assertEquals(1, Contexts.getActiveContexts().size()); | |
150 | - | |
151 | - AbstractBootstrap.disableContext(context); | |
152 | - | |
153 | - Assert.assertFalse(context.isActive()); | |
154 | - Assert.assertEquals(0, Contexts.getActiveContexts().size()); | |
155 | - | |
156 | - } | |
157 | - | |
158 | - @Test | |
159 | - @SuppressWarnings({ "unchecked"}) | |
160 | - public void testDisableContextIsNotActive() { | |
161 | - mockStatic(LoggerProducer.class); | |
162 | - Logger logger = PowerMock.createMock(Logger.class); | |
163 | - logger.trace(EasyMock.anyObject(String.class)); | |
164 | - logger.trace(EasyMock.anyObject(String.class)); | |
165 | - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes(); | |
166 | - | |
167 | - ThreadLocalContext context = new ThreadLocalContext(Scope.class); | |
168 | - | |
169 | - replayAll(logger, LoggerProducer.class); | |
170 | - | |
171 | - Contexts.getInactiveContexts().add(context); | |
172 | - Assert.assertEquals(1, Contexts.getInactiveContexts().size()); | |
173 | - | |
174 | - AbstractBootstrap.disableContext(context); | |
175 | - | |
176 | - Assert.assertEquals(0, Contexts.getInactiveContexts().size()); | |
177 | - | |
178 | - } | |
179 | - | |
180 | - @Test | |
181 | - @SuppressWarnings({ "unchecked"}) | |
182 | - public void testDisableContextIsActiveAndExistTheSameScopeInTheInactives() { | |
183 | - mockStatic(LoggerProducer.class); | |
184 | - Logger logger = PowerMock.createMock(Logger.class); | |
185 | - logger.trace(EasyMock.anyObject(String.class)); | |
186 | - logger.trace(EasyMock.anyObject(String.class)); | |
187 | - expect(LoggerProducer.create(EasyMock.anyObject(Class.class))).andReturn(logger).anyTimes(); | |
188 | - | |
189 | - ThreadLocalContext context = new ThreadLocalContext(Scope.class); | |
190 | - | |
191 | - replayAll(logger, LoggerProducer.class); | |
192 | - | |
193 | - AbstractBootstrap.addContext(context, null); | |
194 | - | |
195 | - ThreadLocalContext context2 = new ThreadLocalContext(Scope.class); | |
196 | - context2.setActive(false); | |
197 | - Contexts.getInactiveContexts().add(context2); | |
198 | - | |
199 | - Assert.assertTrue(context.isActive()); | |
200 | - Assert.assertEquals(1, Contexts.getActiveContexts().size()); | |
201 | - | |
202 | - Assert.assertFalse(context2.isActive()); | |
203 | - Assert.assertEquals(1, Contexts.getInactiveContexts().size()); | |
204 | - | |
205 | - AbstractBootstrap.disableContext(context); | |
206 | - | |
207 | - Assert.assertFalse(context.isActive()); | |
208 | - Assert.assertTrue(context2.isActive()); | |
209 | - Assert.assertEquals(1, Contexts.getActiveContexts().size()); | |
210 | - Assert.assertEquals(0, Contexts.getInactiveContexts().size()); | |
211 | - | |
212 | - } | |
213 | -} |
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/context/ContextsTest.java
1 | 1 | /* |
2 | - * Demoiselle Framework Copyright (C) 2010 SERPRO | |
3 | - * ---------------------------------------------------------------------------- This file is part of Demoiselle | |
4 | - * Framework. Demoiselle Framework is free software; you can redistribute it and/or modify it under the terms of the GNU | |
5 | - * Lesser General Public License version 3 as published by the Free Software Foundation. This program is distributed in | |
6 | - * the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
7 | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a | |
8 | - * copy of the GNU Lesser General Public License version 3 along with this program; if not, see | |
9 | - * <http://www.gnu.org/licenses/> or write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | |
10 | - * Boston, MA 02110-1301, USA. ---------------------------------------------------------------------------- Este arquivo | |
11 | - * é parte do Framework Demoiselle. O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | |
12 | - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação do Software Livre (FSF). Este | |
13 | - * programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem uma garantia implícita de | |
14 | - * ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português para | |
15 | - * maiores detalhes. Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título "LICENCA.txt", junto com esse | |
16 | - * programa. Se não, acesse <http://www.gnu.org/licenses/> ou escreva para a Fundação do Software Livre (FSF) Inc., 51 | |
17 | - * Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | |
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. | |
18 | 36 | */ |
19 | 37 | package br.gov.frameworkdemoiselle.internal.context; |
20 | 38 | |
21 | -import org.junit.Ignore; | |
22 | 39 | import static org.easymock.EasyMock.createMock; |
23 | 40 | import static org.easymock.EasyMock.expectLastCall; |
24 | 41 | import static org.easymock.EasyMock.replay; |
... | ... | @@ -34,9 +51,7 @@ import javax.enterprise.context.RequestScoped; |
34 | 51 | import javax.enterprise.context.SessionScoped; |
35 | 52 | import javax.enterprise.inject.spi.AfterBeanDiscovery; |
36 | 53 | |
37 | -import org.junit.Assert; | |
38 | 54 | import org.junit.Before; |
39 | -import org.junit.BeforeClass; | |
40 | 55 | import org.junit.Test; |
41 | 56 | |
42 | 57 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
... | ... | @@ -45,11 +60,6 @@ public class ContextsTest { |
45 | 60 | |
46 | 61 | private AfterBeanDiscovery event; |
47 | 62 | |
48 | - @BeforeClass | |
49 | - public static void setUpClass() throws Exception { | |
50 | - // TODO AfterBeanDiscovery event = ??? mock ??? | |
51 | - } | |
52 | - | |
53 | 63 | @Before |
54 | 64 | public void setUp() throws Exception { |
55 | 65 | Contexts.clear(); |
... | ... | @@ -194,12 +204,4 @@ public class ContextsTest { |
194 | 204 | Contexts.add(context, event); |
195 | 205 | assertEquals(1, Contexts.getActiveContexts().size()); |
196 | 206 | } |
197 | - | |
198 | - // Only to get 100% on coverage report | |
199 | - @Test | |
200 | - public void testCreateNew() { | |
201 | - Contexts context = new Contexts(); | |
202 | - Assert.assertNotNull(context); | |
203 | - } | |
204 | - | |
205 | 207 | } | ... | ... |
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java
... | ... | @@ -36,14 +36,40 @@ |
36 | 36 | */ |
37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
38 | 38 | |
39 | +import java.util.ArrayList; | |
40 | +import java.util.List; | |
41 | + | |
39 | 42 | import javax.enterprise.event.Observes; |
40 | 43 | import javax.enterprise.inject.spi.AfterBeanDiscovery; |
44 | +import javax.enterprise.inject.spi.AfterDeploymentValidation; | |
45 | +import javax.enterprise.inject.spi.Extension; | |
41 | 46 | |
47 | +import br.gov.frameworkdemoiselle.internal.context.Contexts; | |
48 | +import br.gov.frameworkdemoiselle.internal.context.CustomContext; | |
42 | 49 | import br.gov.frameworkdemoiselle.internal.context.ViewContext; |
50 | +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | |
51 | + | |
52 | +public class JsfBootstrap implements Extension { | |
53 | + | |
54 | + private List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | |
55 | + | |
56 | + private AfterBeanDiscovery afterBeanDiscoveryEvent; | |
43 | 57 | |
44 | -public class JsfBootstrap extends AbstractBootstrap { | |
58 | + public void storeContexts(@Observes final AfterBeanDiscovery event) { | |
59 | + tempContexts.add(new ViewContext()); | |
60 | + | |
61 | + afterBeanDiscoveryEvent = event; | |
62 | + } | |
63 | + | |
64 | + public void addContexts(@Observes final AfterDeploymentValidation event) { | |
65 | + for (CustomContext tempContext : tempContexts) { | |
66 | + Contexts.add(tempContext, afterBeanDiscoveryEvent); | |
67 | + } | |
68 | + } | |
45 | 69 | |
46 | - public void loadContexts(@Observes final AfterBeanDiscovery event) { | |
47 | - addContext(new ViewContext(), event); | |
70 | + public void removeContexts(@Observes AfterShutdownProccess event) { | |
71 | + for (CustomContext tempContext : tempContexts) { | |
72 | + Contexts.remove(tempContext); | |
73 | + } | |
48 | 74 | } |
49 | 75 | } | ... | ... |
impl/extension/jsf/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/FacesBootstrapTest.java
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.bootstrap; | |
38 | -import org.junit.Ignore; | |
39 | -import static org.powermock.api.easymock.PowerMock.createMock; | |
40 | -import static org.powermock.api.easymock.PowerMock.replay; | |
41 | -import static org.powermock.api.easymock.PowerMock.verifyAll; | |
42 | - | |
43 | -import javax.enterprise.inject.spi.AfterBeanDiscovery; | |
44 | - | |
45 | -import org.easymock.EasyMock; | |
46 | -import org.junit.Before; | |
47 | -import org.junit.Test; | |
48 | -import org.junit.runner.RunWith; | |
49 | -import org.powermock.modules.junit4.PowerMockRunner; | |
50 | - | |
51 | -import br.gov.frameworkdemoiselle.internal.context.ViewContext; | |
52 | -@Ignore | |
53 | -@RunWith(PowerMockRunner.class) | |
54 | -public class FacesBootstrapTest { | |
55 | - | |
56 | - private JsfBootstrap bootstrap; | |
57 | - | |
58 | - @Before | |
59 | - public void before() { | |
60 | - bootstrap = new JsfBootstrap(); | |
61 | - } | |
62 | - | |
63 | - @Test | |
64 | - public void testLoadContexts() { | |
65 | - AfterBeanDiscovery event = createMock(AfterBeanDiscovery.class); | |
66 | - event.addContext(EasyMock.anyObject(ViewContext.class)); | |
67 | - replay(event); | |
68 | - bootstrap.loadContexts(event); | |
69 | - verifyAll(); | |
70 | - } | |
71 | - | |
72 | -} | |
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.bootstrap; | |
38 | +//import org.junit.Ignore; | |
39 | +//import static org.powermock.api.easymock.PowerMock.createMock; | |
40 | +//import static org.powermock.api.easymock.PowerMock.replay; | |
41 | +//import static org.powermock.api.easymock.PowerMock.verifyAll; | |
42 | +// | |
43 | +//import javax.enterprise.inject.spi.AfterBeanDiscovery; | |
44 | +// | |
45 | +//import org.easymock.EasyMock; | |
46 | +//import org.junit.Before; | |
47 | +//import org.junit.Test; | |
48 | +//import org.junit.runner.RunWith; | |
49 | +//import org.powermock.modules.junit4.PowerMockRunner; | |
50 | +// | |
51 | +//import br.gov.frameworkdemoiselle.internal.context.ViewContext; | |
52 | +//@Ignore | |
53 | +//@RunWith(PowerMockRunner.class) | |
54 | +//public class FacesBootstrapTest { | |
55 | +// | |
56 | +// private JsfBootstrap bootstrap; | |
57 | +// | |
58 | +// @Before | |
59 | +// public void before() { | |
60 | +// bootstrap = new JsfBootstrap(); | |
61 | +// } | |
62 | +// | |
63 | +// @Test | |
64 | +// public void testLoadContexts() { | |
65 | +// AfterBeanDiscovery event = createMock(AfterBeanDiscovery.class); | |
66 | +// event.addContext(EasyMock.anyObject(ViewContext.class)); | |
67 | +// replay(event); | |
68 | +// bootstrap.loadContexts(event); | |
69 | +// verifyAll(); | |
70 | +// } | |
71 | +// | |
72 | +//} | ... | ... |
impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java
... | ... | @@ -36,19 +36,47 @@ |
36 | 36 | */ |
37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
38 | 38 | |
39 | +import java.util.ArrayList; | |
40 | +import java.util.List; | |
41 | + | |
42 | +import javax.enterprise.context.ConversationScoped; | |
39 | 43 | import javax.enterprise.context.RequestScoped; |
40 | 44 | import javax.enterprise.context.SessionScoped; |
41 | 45 | import javax.enterprise.event.Observes; |
42 | 46 | import javax.enterprise.inject.spi.AfterBeanDiscovery; |
47 | +import javax.enterprise.inject.spi.AfterDeploymentValidation; | |
48 | +import javax.enterprise.inject.spi.Extension; | |
43 | 49 | |
44 | 50 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
51 | +import br.gov.frameworkdemoiselle.internal.context.Contexts; | |
52 | +import br.gov.frameworkdemoiselle.internal.context.CustomContext; | |
45 | 53 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; |
54 | +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | |
55 | + | |
56 | +public class SeBootstrap implements Extension { | |
57 | + | |
58 | + private List<CustomContext> tempContexts = new ArrayList<CustomContext>(); | |
59 | + | |
60 | + private AfterBeanDiscovery afterBeanDiscoveryEvent; | |
46 | 61 | |
47 | -public class SeBootstrap extends AbstractBootstrap { | |
62 | + public void storeContexts(@Observes final AfterBeanDiscovery event) { | |
63 | + tempContexts.add(new ThreadLocalContext(ViewScoped.class)); | |
64 | + tempContexts.add(new ThreadLocalContext(SessionScoped.class)); | |
65 | + tempContexts.add(new ThreadLocalContext(ConversationScoped.class)); | |
66 | + tempContexts.add(new ThreadLocalContext(RequestScoped.class)); | |
67 | + | |
68 | + afterBeanDiscoveryEvent = event; | |
69 | + } | |
70 | + | |
71 | + public void addContexts(@Observes final AfterDeploymentValidation event) { | |
72 | + for (CustomContext tempContext : tempContexts) { | |
73 | + Contexts.add(tempContext, afterBeanDiscoveryEvent); | |
74 | + } | |
75 | + } | |
48 | 76 | |
49 | - public void loadContext(@Observes final AfterBeanDiscovery event) { | |
50 | - addContext(new ThreadLocalContext(RequestScoped.class), event); | |
51 | - addContext(new ThreadLocalContext(SessionScoped.class), event); | |
52 | - addContext(new ThreadLocalContext(ViewScoped.class), event); | |
77 | + public void removeContexts(@Observes AfterShutdownProccess event) { | |
78 | + for (CustomContext tempContext : tempContexts) { | |
79 | + Contexts.remove(tempContext); | |
80 | + } | |
53 | 81 | } |
54 | -} | |
55 | 82 | \ No newline at end of file |
83 | +} | ... | ... |