This is an automated email from the ASF dual-hosted git repository. struberg pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
commit 91edc6f3fda6f7b8d65102e9200e331eb1491ceb Author: Mark Struberg <[email protected]> AuthorDate: Sun Feb 28 19:15:43 2021 +0100 OWB-1371 getCurrentContext to not create em Right now we did create e.g. a RequestContext automatically when getCurrentContext did get called. But that's not good as we might create mem leaks that way. --- .../apache/webbeans/conversation/ConversationImpl.java | 2 +- .../webbeans/conversation/ConversationManager.java | 13 +++++++++---- .../webbeans/web/context/WebContextsService.java | 18 +++++++++++------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationImpl.java b/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationImpl.java index 1670db4..c5e7eb5 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationImpl.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationImpl.java @@ -141,7 +141,7 @@ public class ConversationImpl implements Conversation, Serializable // now store this conversation in the SessionContext ConversationManager conversationManager = webBeansContext.getConversationManager(); - ConversationContext conversationContext = (ConversationContext) webBeansContext.getContextsService().getCurrentContext(ConversationScoped.class); + ConversationContext conversationContext = (ConversationContext) webBeansContext.getContextsService().getCurrentContext(ConversationScoped.class, true); conversationManager.addToConversationStorage(conversationContext, id); } diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java b/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java index 8332357..71cdddc 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java @@ -136,7 +136,7 @@ public class ConversationManager public void addToConversationStorage(ConversationContext conversationContext, String conversationId) { Asserts.assertNotNull(conversationId, "conversationId"); - Context sessionContext = webBeansContext.getContextsService().getCurrentContext(SessionScoped.class); + Context sessionContext = webBeansContext.getContextsService().getCurrentContext(SessionScoped.class, true); Set<ConversationContext> sessionConversations = getSessionConversations(sessionContext, true); // check whether this conversation already exists @@ -161,8 +161,13 @@ public class ConversationManager public boolean removeConversationFromStorage(ConversationContext conversationContext) { Context sessionContext = webBeansContext.getContextsService().getCurrentContext(SessionScoped.class); - Set<ConversationContext> sessionConversations = getSessionConversations(sessionContext, true); - return sessionConversations.remove(conversationContext); + if (sessionContext != null) + { + Set<ConversationContext> sessionConversations = getSessionConversations(sessionContext, true); + return sessionConversations.remove(conversationContext); + } + + return false; } @@ -228,7 +233,7 @@ public class ConversationManager if (payLoad == null) { RequestContext requestContext - = (RequestContext) webBeansContext.getContextsService().getCurrentContext(RequestScoped.class); + = (RequestContext) webBeansContext.getContextsService().getCurrentContext(RequestScoped.class, false); if (requestContext != null) { payLoad = requestContext.getRequestObject(); diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java b/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java index 135c867..d6621e3 100644 --- a/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java +++ b/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java @@ -273,10 +273,11 @@ public class WebContextsService extends AbstractContextsService { if(scopeType.equals(RequestScoped.class)) { - return getRequestContext(true); + return getRequestContext(false); } else if(scopeType.equals(SessionScoped.class)) { + // session gets created lazily, so we need to force the creation return getSessionContext(true); } else if(scopeType.equals(ApplicationScoped.class)) @@ -285,7 +286,7 @@ public class WebContextsService extends AbstractContextsService } else if(scopeType.equals(ConversationScoped.class)) { - return getConversationContext(true, false); + return getConversationContext(false, false); } else if(scopeType.equals(Dependent.class)) { @@ -760,9 +761,9 @@ public class WebContextsService extends AbstractContextsService public SessionContext getSessionContext(boolean forceCreate) { SessionContext context = sessionContexts.get(); - if (null == context) + if (null == context && forceCreate) { - lazyStartSessionContext(forceCreate); + lazyStartSessionContext(true); context = sessionContexts.get(); } @@ -778,7 +779,7 @@ public class WebContextsService extends AbstractContextsService ConversationContext conversationContext = conversationContexts.get(); if (conversationContext == null) { - SessionContext sessionContext = getSessionContext(create); + SessionContext sessionContext = getSessionContext(true); if (sessionContext != null) { @@ -819,10 +820,13 @@ public class WebContextsService extends AbstractContextsService logger.log(Level.FINE, ">lazyStartSessionContext"); } - ServletRequestContext requestContext = getRequestContext(true); + ServletRequestContext requestContext = getRequestContext(false); if (requestContext == null) { - logger.log(Level.WARNING, "Could NOT lazily initialize session context because NO active request context"); + if (createSession) + { + logger.log(Level.WARNING, "Could NOT lazily initialize session context because NO active request context"); + } return; }
