[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openejb-cvs
Subject:    svn commit: r1507796 - in /tomee/tomee/trunk: container/openejb-core/src/main/java/org/apache/openej
From:       rmannibucau () apache ! org
Date:       2013-07-28 13:04:52
Message-ID: 20130728130452.ACF2423888A6 () eris ! apache ! org
[Download RAW message or body]

Author: rmannibucau
Date: Sun Jul 28 13:04:52 2013
New Revision: 1507796

URL: http://svn.apache.org/r1507796
Log:
TOMEE-1009 better handling of request thread local cleaning

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
  tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java
  tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
  tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java


Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
                
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/ja \
va/org/apache/openejb/cdi/CdiAppContextsService.java?rev=1507796&r1=1507795&r2=1507796&view=diff
 ==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java \
                (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java \
Sun Jul 28 13:04:52 2013 @@ -49,6 +49,8 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpSession;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Collection;
 
 public class CdiAppContextsService extends AbstractContextsService implements \
ContextsService {  
@@ -72,6 +74,14 @@ public class CdiAppContextsService exten
 
     private final WebBeansContext webBeansContext;
 
+    private static final ThreadLocal<Collection<Runnable>> endRequestRunnables = new \
ThreadLocal<Collection<Runnable>>() { +        @Override
+        protected Collection<Runnable> initialValue() {
+            return new ArrayList<Runnable>();
+        }
+    };
+
+
     public CdiAppContextsService() {
         this(WebBeansContext.currentInstance(), \
WebBeansContext.currentInstance().getOpenWebBeansConfiguration().supportsConversation());
  }
@@ -93,6 +103,21 @@ public class CdiAppContextsService exten
         singletonContext.setActive(true);
     }
 
+    private void endRequest() {
+        for (final Runnable r : endRequestRunnables.get()) {
+            try {
+                r.run();
+            } catch (final Exception e) {
+                logger.error(e.getMessage(), e);
+            }
+        }
+        endRequestRunnables.remove();
+    }
+
+    public static void pushRequestReleasable(final Runnable runnable) {
+        endRequestRunnables.get().add(runnable);
+    }
+
     @Override
     public void init(Object initializeObject) {
         //Start application context
@@ -237,12 +262,15 @@ public class CdiAppContextsService exten
     }
 
     private void destroyRequestContext() {
+        // execute request tasks
+        endRequest();
+
         if (supportsConversation()) { // OWB-595
             cleanupConversation();
         }
 
         //Get context
-        RequestContext context = getRequestContext();
+        final RequestContext context = getRequestContext();
 
         //Destroy context
         if (context != null) {
@@ -250,7 +278,7 @@ public class CdiAppContextsService exten
         }
 
         // clean up the EL caches after each request
-        ELContextStore elStore = ELContextStore.getInstance(false);
+        final ELContextStore elStore = ELContextStore.getInstance(false);
         if (elStore != null) {
             elStore.destroyELContextStore();
         }

Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java
                
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/jav \
a/org/apache/openejb/server/cxf/rs/Contexts.java?rev=1507796&r1=1507795&r2=1507796&view=diff
 ==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java \
                (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/Contexts.java \
Sun Jul 28 13:04:52 2013 @@ -24,8 +24,8 @@ import org.apache.cxf.jaxrs.utils.Annota
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
+import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.openejb.rest.ThreadLocalContextManager;
-import org.apache.openejb.server.httpd.EndWebBeansListener;
 
 import javax.annotation.Resource;
 import javax.servlet.ServletConfig;
@@ -98,7 +98,7 @@ public final class Contexts {
      */
     public static void bind(Exchange exchange, Collection<Class<?>> types) {
         EXCHANGE.set(exchange); // used in lazy mode by RESTResourceFinder if cdi \
                beans uses @Context, === initThreadLocal
-        EndWebBeansListener.pushRequestReleasable(CleanUpThreadLocal.INSTANCE);
+        CdiAppContextsService.pushRequestReleasable(CleanUpThreadLocal.INSTANCE);
 
         for (Class<?> type : types) {
             if (Request.class.equals(type)) {

Modified: tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
                
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/java/ \
org/apache/openejb/server/httpd/EndWebBeansListener.java?rev=1507796&r1=1507795&r2=1507796&view=diff
 ==============================================================================
--- tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java \
                (original)
+++ tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java \
Sun Jul 28 13:04:52 2013 @@ -49,12 +49,6 @@ public class EndWebBeansListener impleme
      * Logger instance
      */
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_CDI, \
                EndWebBeansListener.class);
-    private static final ThreadLocal<Collection<Runnable>> endRequestRunnables = new \
                ThreadLocal<Collection<Runnable>>() {
-        @Override
-        protected Collection<Runnable> initialValue() {
-            return new ArrayList<Runnable>();
-        }
-    };
 
     protected FailOverService failoverService;
 
@@ -79,31 +73,11 @@ public class EndWebBeansListener impleme
     }
 
     /**
-     * Ensures that all ThreadLocals, which could have been set in this
-     * request's Thread, are removed in order to prevent memory leaks.
-     */
-    private void cleanupRequestThreadLocals() {
-        for (final Runnable r : endRequestRunnables.get()) {
-            try {
-                r.run();
-            } catch (final Exception e) {
-                logger.error(e.getMessage(), e);
-            }
-        }
-        endRequestRunnables.remove();
-    }
-
-    public static void pushRequestReleasable(final Runnable runnable) {
-        endRequestRunnables.get().add(runnable);
-    }
-
-    /**
      * {@inheritDoc}
      */
     @Override
     public void requestDestroyed(ServletRequestEvent event) {
         if (webBeansContext == null) {
-            cleanupRequestThreadLocals();
             return;
         }
 
@@ -136,7 +110,6 @@ public class EndWebBeansListener impleme
             if (webBeansContext instanceof WebappWebBeansContext) { // end after \
                child
                 ((WebappWebBeansContext) \
webBeansContext).getParent().getContextsService().endContext(RequestScoped.class, \
event);  }
-            cleanupRequestThreadLocals();
         } finally {
             ThreadSingletonServiceImpl.enter((WebBeansContext) oldContext);
         }

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java
                
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java \
/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java?rev=1507796&r1=1507795&r2=1507796&view=diff
 ==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java \
                (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java \
Sun Jul 28 13:04:52 2013 @@ -16,7 +16,7 @@
  */
 package org.apache.tomee.catalina.cdi;
 
-import org.apache.openejb.server.httpd.EndWebBeansListener;
+import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.tomee.catalina.TomEERuntimeException;
 import org.apache.webbeans.context.creational.BeanInstanceBag;
 import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
@@ -44,7 +44,7 @@ public class SessionNormalScopeBeanHandl
     private final ThreadLocal<Map<Bean<?>, UpdateInfo>> objects = new \
ThreadLocal<Map<Bean<?>, UpdateInfo>>() {  @Override
         protected Map<Bean<?>, UpdateInfo> initialValue() {
-            EndWebBeansListener.pushRequestReleasable(new Runnable() { // update in \
batch +            CdiAppContextsService.pushRequestReleasable(new Runnable() { // \
update in batch  @Override
                 public void run() {
                     final Map<Bean<?>, UpdateInfo> values = objects.get();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic