Commit a84535ab32175ee118ecf428cd68d3662517534c
1 parent
d3ebc763
Exists in
master
IN PROGRESS - issue FWK-148: Não é possível anotar métodos com @Startup
se o método usa um EntityManager injetado e o escopo do EntityManager é de visão (ViewScoped). https://demoiselle.atlassian.net/browse/FWK-148
Showing
1 changed file
with
40 additions
and
7 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
... | ... | @@ -53,9 +53,11 @@ import org.slf4j.Logger; |
53 | 53 | |
54 | 54 | import br.gov.frameworkdemoiselle.DemoiselleException; |
55 | 55 | import br.gov.frameworkdemoiselle.context.ConversationContext; |
56 | +import br.gov.frameworkdemoiselle.context.CustomContext; | |
56 | 57 | import br.gov.frameworkdemoiselle.context.RequestContext; |
57 | 58 | import br.gov.frameworkdemoiselle.context.SessionContext; |
58 | 59 | import br.gov.frameworkdemoiselle.context.ViewContext; |
60 | +import br.gov.frameworkdemoiselle.internal.context.TemporaryViewContextImpl; | |
59 | 61 | import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; |
60 | 62 | import br.gov.frameworkdemoiselle.util.Beans; |
61 | 63 | import br.gov.frameworkdemoiselle.util.NameQualifier; |
... | ... | @@ -75,6 +77,8 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement |
75 | 77 | private boolean registered = false; |
76 | 78 | |
77 | 79 | private HashMap<String, Boolean> startedContextHere = new HashMap<String, Boolean>(); |
80 | + | |
81 | + private transient CustomContext backupContext = null; | |
78 | 82 | |
79 | 83 | protected abstract Logger getLogger(); |
80 | 84 | |
... | ... | @@ -157,14 +161,34 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement |
157 | 161 | startedContextHere.put("session", sessionContext.activate()); |
158 | 162 | } |
159 | 163 | |
160 | - if (viewContext!=null){ | |
161 | - startedContextHere.put("view", viewContext.activate()); | |
162 | - } | |
163 | 164 | |
164 | 165 | if (conversationContext!=null){ |
165 | 166 | startedContextHere.put("conversation", conversationContext.activate()); |
166 | 167 | } |
167 | 168 | |
169 | + //Contexto temporário de visão precisa de tratamento especial | |
170 | + //para evitar conflito com o contexto presente na extensão demoiselle-jsf | |
171 | + if (viewContext!=null){ | |
172 | + if (TemporaryViewContextImpl.class.isInstance(viewContext)){ | |
173 | + startedContextHere.put("view", viewContext.activate()); | |
174 | + } | |
175 | + else{ | |
176 | + //Precisamos desativar temporariamente o contexto | |
177 | + if (viewContext.isActive()){ | |
178 | + backupContext = viewContext; | |
179 | + viewContext.deactivate(); | |
180 | + | |
181 | + CustomContextBootstrap customContextBootstrap = Beans.getReference(CustomContextBootstrap.class); | |
182 | + for (CustomContext customContext : customContextBootstrap.getCustomContexts()){ | |
183 | + if ( TemporaryViewContextImpl.class.isInstance(customContext) ){ | |
184 | + startedContextHere.put("view", customContext.activate()); | |
185 | + break; | |
186 | + } | |
187 | + } | |
188 | + } | |
189 | + } | |
190 | + } | |
191 | + | |
168 | 192 | registered = true; |
169 | 193 | } |
170 | 194 | } |
... | ... | @@ -184,13 +208,22 @@ public abstract class AbstractLifecycleBootstrap<A extends Annotation> implement |
184 | 208 | sessionContext.deactivate(); |
185 | 209 | } |
186 | 210 | |
187 | - if (viewContext!=null && Boolean.TRUE.equals(startedContextHere.get("view"))){ | |
188 | - viewContext.deactivate(); | |
189 | - } | |
190 | - | |
191 | 211 | if (conversationContext!=null && Boolean.TRUE.equals(startedContextHere.get("conversation"))){ |
192 | 212 | conversationContext.deactivate(); |
193 | 213 | } |
214 | + | |
215 | + //Contexto temporário de visão precisa de tratamento especial | |
216 | + //para evitar conflito com o contexto presente na extensão demoiselle-jsf | |
217 | + if (viewContext!=null){ | |
218 | + if (TemporaryViewContextImpl.class.isInstance(viewContext) && startedContextHere.get("view")){ | |
219 | + viewContext.deactivate(); | |
220 | + | |
221 | + if (backupContext!=null){ | |
222 | + backupContext.activate(); | |
223 | + backupContext = null; | |
224 | + } | |
225 | + } | |
226 | + } | |
194 | 227 | } |
195 | 228 | } |
196 | 229 | } | ... | ... |