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

Reply via email to