Author: rmannibucau
Date: Wed Sep 25 14:09:45 2013
New Revision: 1526181

URL: http://svn.apache.org/r1526181
Log:
forcing container loader in scheduler thread factory to avoid side effects

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java?rev=1526181&r1=1526180&r2=1526181&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Pool.java
 Wed Sep 25 14:09:45 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.util;
 
+import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.monitoring.Managed;
 
 import java.lang.ref.SoftReference;
@@ -1152,16 +1153,25 @@ public class Pool<T> {
 
         @Override
         public Thread newThread(final Runnable r) {
-            final Thread t = new Thread(group, r, 
"org.apache.openejb.pool.scheduler." + count.getAndIncrement());
-            if (!t.isDaemon()) {
-                t.setDaemon(true);
-            }
+            final ClassLoader loader = 
Thread.currentThread().getContextClassLoader();
+            final ClassLoader containerLoader = 
ParentClassLoaderFinder.Helper.get();
+            Thread.currentThread().setContextClassLoader(containerLoader);
+            try {
+                final Thread t = new Thread(group, r, 
"org.apache.openejb.pool.scheduler." + count.getAndIncrement());
+                if (!t.isDaemon()) {
+                    t.setDaemon(true);
+                }
 
-            if (t.getPriority() != Thread.NORM_PRIORITY) {
-                t.setPriority(Thread.NORM_PRIORITY);
-            }
+                if (t.getPriority() != Thread.NORM_PRIORITY) {
+                    t.setPriority(Thread.NORM_PRIORITY);
+                }
+
+                t.setContextClassLoader(containerLoader);
 
-            return t;
+                return t;
+            } finally {
+                Thread.currentThread().setContextClassLoader(loader);
+            }
         }
     }
 }


Reply via email to