Commit 5e4c7bab389896ec99a697eb68966f0cea7dcc5b
1 parent
437a8ecb
Exists in
master
Refatorado levantamento de contextos temporários durante execução de
métodos @Startup e @Shutdown
Showing
1 changed file
with
54 additions
and
51 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
@@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; | @@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; | ||
39 | import java.lang.annotation.Annotation; | 39 | import java.lang.annotation.Annotation; |
40 | import java.util.ArrayList; | 40 | import java.util.ArrayList; |
41 | import java.util.Collections; | 41 | import java.util.Collections; |
42 | +import java.util.HashMap; | ||
42 | import java.util.Iterator; | 43 | import java.util.Iterator; |
43 | import java.util.List; | 44 | import java.util.List; |
44 | 45 | ||
@@ -69,9 +70,11 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -69,9 +70,11 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
69 | private List<AnnotatedMethodProcessor> processors = Collections | 70 | private List<AnnotatedMethodProcessor> processors = Collections |
70 | .synchronizedList(new ArrayList<AnnotatedMethodProcessor>()); | 71 | .synchronizedList(new ArrayList<AnnotatedMethodProcessor>()); |
71 | 72 | ||
72 | - private boolean registered = false; | ||
73 | - | ||
74 | private transient static ResourceBundle bundle; | 73 | private transient static ResourceBundle bundle; |
74 | + | ||
75 | + private boolean registered = false; | ||
76 | + | ||
77 | + private HashMap<String, Boolean> startedContextHere = new HashMap<String, Boolean>(); | ||
75 | 78 | ||
76 | protected abstract Logger getLogger(); | 79 | protected abstract Logger getLogger(); |
77 | 80 | ||
@@ -106,18 +109,6 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -106,18 +109,6 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
106 | } | 109 | } |
107 | } | 110 | } |
108 | 111 | ||
109 | - /*public void loadTempContexts(@Observes final AfterBeanDiscovery event) { | ||
110 | - // Caso este bootstrap rode antes do CoreBootstrap. Não há problemas em chamar este método várias vezes, ele | ||
111 | - // ignora chamadas adicionais. | ||
112 | - ContextManager.initialize(event); | ||
113 | - | ||
114 | - // Não registrar o contexto de aplicação pq ele já é registrado pela implementação do CDI | ||
115 | - ContextManager.add(new ThreadLocalContext(ViewScoped.class), event); | ||
116 | - ContextManager.add(new ThreadLocalContext(SessionScoped.class), event); | ||
117 | - ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event); | ||
118 | - ContextManager.add(new ThreadLocalContext(RequestScoped.class), event); | ||
119 | - }*/ | ||
120 | - | ||
121 | @SuppressWarnings({ "unchecked", "rawtypes" }) | 112 | @SuppressWarnings({ "unchecked", "rawtypes" }) |
122 | protected synchronized void proccessEvent() { | 113 | protected synchronized void proccessEvent() { |
123 | getLogger().debug(getBundle().getString("executing-all", getAnnotationClass().getSimpleName())); | 114 | getLogger().debug(getBundle().getString("executing-all", getAnnotationClass().getSimpleName())); |
@@ -125,32 +116,8 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -125,32 +116,8 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
125 | Collections.sort(processors); | 116 | Collections.sort(processors); |
126 | Exception failure = null; | 117 | Exception failure = null; |
127 | 118 | ||
128 | - RequestContext tempRequestContext = Beans.getReference(RequestContext.class); | ||
129 | - SessionContext tempSessionContext = Beans.getReference(SessionContext.class); | ||
130 | - ViewContext tempViewContext = Beans.getReference(ViewContext.class); | ||
131 | - ConversationContext tempConversationContext = Beans.getReference(ConversationContext.class); | ||
132 | - | ||
133 | - boolean requestActivatedHere = tempRequestContext!=null && !tempRequestContext.isActive(); | ||
134 | - boolean sessionActivatedHere = tempSessionContext!=null && !tempSessionContext.isActive(); | ||
135 | - boolean viewActivatedHere = tempViewContext!=null && !tempViewContext.isActive(); | ||
136 | - boolean conversationActivatedHere = tempConversationContext!=null && !tempConversationContext.isActive(); | 119 | + startContexts(); |
137 | 120 | ||
138 | - if (!registered) { | ||
139 | - if (tempRequestContext!=null && !tempRequestContext.isActive()) | ||
140 | - tempRequestContext.activate(); | ||
141 | - | ||
142 | - if (tempSessionContext!=null && !tempSessionContext.isActive()) | ||
143 | - tempSessionContext.activate(); | ||
144 | - | ||
145 | - if (tempViewContext!=null && !tempViewContext.isActive()) | ||
146 | - tempViewContext.activate(); | ||
147 | - | ||
148 | - if (tempConversationContext!=null && !tempConversationContext.isActive()) | ||
149 | - tempConversationContext.activate(); | ||
150 | - | ||
151 | - registered = true; | ||
152 | - } | ||
153 | - | ||
154 | for (Iterator<AnnotatedMethodProcessor> iter = processors.iterator(); iter.hasNext();) { | 121 | for (Iterator<AnnotatedMethodProcessor> iter = processors.iterator(); iter.hasNext();) { |
155 | AnnotatedMethodProcessor<?> processor = iter.next(); | 122 | AnnotatedMethodProcessor<?> processor = iter.next(); |
156 | 123 | ||
@@ -167,27 +134,63 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | @@ -167,27 +134,63 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement | ||
167 | failure = cause; | 134 | failure = cause; |
168 | } | 135 | } |
169 | } | 136 | } |
137 | + | ||
138 | + stopContexts(); | ||
170 | 139 | ||
171 | - if (processors.isEmpty()) { | ||
172 | - if (requestActivatedHere){ | ||
173 | - tempRequestContext.deactivate(); | 140 | + if (failure != null) { |
141 | + throw new DemoiselleException(failure); | ||
142 | + } | ||
143 | + } | ||
144 | + | ||
145 | + private void startContexts(){ | ||
146 | + if (!registered){ | ||
147 | + RequestContext requestContext = Beans.getReference(RequestContext.class); | ||
148 | + SessionContext sessionContext = Beans.getReference(SessionContext.class); | ||
149 | + ViewContext viewContext = Beans.getReference(ViewContext.class); | ||
150 | + ConversationContext conversationContext = Beans.getReference(ConversationContext.class); | ||
151 | + | ||
152 | + if (requestContext!=null){ | ||
153 | + startedContextHere.put("request", requestContext.activate()); | ||
174 | } | 154 | } |
175 | 155 | ||
176 | - if (sessionActivatedHere){ | ||
177 | - tempSessionContext.deactivate(); | 156 | + if (sessionContext!=null){ |
157 | + startedContextHere.put("session", sessionContext.activate()); | ||
178 | } | 158 | } |
179 | 159 | ||
180 | - if (viewActivatedHere){ | ||
181 | - tempViewContext.deactivate(); | 160 | + if (viewContext!=null){ |
161 | + startedContextHere.put("view", viewContext.activate()); | ||
182 | } | 162 | } |
183 | 163 | ||
184 | - if (conversationActivatedHere){ | ||
185 | - tempConversationContext.deactivate(); | 164 | + if (conversationContext!=null){ |
165 | + startedContextHere.put("conversation", conversationContext.activate()); | ||
186 | } | 166 | } |
167 | + | ||
168 | + registered = true; | ||
187 | } | 169 | } |
188 | - | ||
189 | - if (failure != null) { | ||
190 | - throw new DemoiselleException(failure); | 170 | + } |
171 | + | ||
172 | + private void stopContexts(){ | ||
173 | + if (registered){ | ||
174 | + RequestContext requestContext = Beans.getReference(RequestContext.class); | ||
175 | + SessionContext sessionContext = Beans.getReference(SessionContext.class); | ||
176 | + ViewContext viewContext = Beans.getReference(ViewContext.class); | ||
177 | + ConversationContext conversationContext = Beans.getReference(ConversationContext.class); | ||
178 | + | ||
179 | + if (requestContext!=null && Boolean.TRUE.equals(startedContextHere.get("request"))){ | ||
180 | + requestContext.deactivate(); | ||
181 | + } | ||
182 | + | ||
183 | + if (sessionContext!=null && Boolean.TRUE.equals(startedContextHere.get("session"))){ | ||
184 | + sessionContext.deactivate(); | ||
185 | + } | ||
186 | + | ||
187 | + if (viewContext!=null && Boolean.TRUE.equals(startedContextHere.get("view"))){ | ||
188 | + viewContext.deactivate(); | ||
189 | + } | ||
190 | + | ||
191 | + if (conversationContext!=null && Boolean.TRUE.equals(startedContextHere.get("conversation"))){ | ||
192 | + conversationContext.deactivate(); | ||
193 | + } | ||
191 | } | 194 | } |
192 | } | 195 | } |
193 | } | 196 | } |