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 | } | ... | ... |