Commit 5e4c7bab389896ec99a697eb68966f0cea7dcc5b

Authored by Dancovich
1 parent 437a8ecb
Exists in master

Refatorado levantamento de contextos temporários durante execução de

métodos @Startup e @Shutdown
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
... ... @@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.bootstrap;
39 39 import java.lang.annotation.Annotation;
40 40 import java.util.ArrayList;
41 41 import java.util.Collections;
  42 +import java.util.HashMap;
42 43 import java.util.Iterator;
43 44 import java.util.List;
44 45  
... ... @@ -69,9 +70,11 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement
69 70 private List<AnnotatedMethodProcessor> processors = Collections
70 71 .synchronizedList(new ArrayList<AnnotatedMethodProcessor>());
71 72  
72   - private boolean registered = false;
73   -
74 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 79 protected abstract Logger getLogger();
77 80  
... ... @@ -106,18 +109,6 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; 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 112 @SuppressWarnings({ "unchecked", "rawtypes" })
122 113 protected synchronized void proccessEvent() {
123 114 getLogger().debug(getBundle().getString("executing-all", getAnnotationClass().getSimpleName()));
... ... @@ -125,32 +116,8 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
125 116 Collections.sort(processors);
126 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 121 for (Iterator<AnnotatedMethodProcessor> iter = processors.iterator(); iter.hasNext();) {
155 122 AnnotatedMethodProcessor<?> processor = iter.next();
156 123  
... ... @@ -167,27 +134,63 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
167 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 }
... ...