You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/12/05 19:03:30 UTC

svn commit: r1548224 - in /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb: assembler/classic/EjbJarBuilder.java util/classloader/URLClassLoaderFirst.java

Author: rmannibucau
Date: Thu Dec  5 18:03:30 2013
New Revision: 1548224

URL: http://svn.apache.org/r1548224
Log:
TOMEE-1093 better slf4j filtering

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?rev=1548224&r1=1548223&r2=1548224&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java Thu Dec  5 18:03:30 2013
@@ -60,6 +60,8 @@ public class EjbJarBuilder {
         MethodScheduleBuilder methodScheduleBuilder = new MethodScheduleBuilder();
         
         for (EnterpriseBeanInfo ejbInfo : ejbJar.enterpriseBeans) {
+            final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            Thread.currentThread().setContextClassLoader(moduleContext.getClassLoader());
             try {
                 EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(ejbInfo, moduleContext, moduleInjections);
                 BeanContext bean = deploymentBuilder.build();
@@ -78,6 +80,8 @@ public class EjbJarBuilder {
                 bean.setContainer(container);
             } catch (Throwable e) {
                 throw new OpenEJBException("Error building bean '" + ejbInfo.ejbName + "'.  Exception: " + e.getClass() + ": " + e.getMessage(), e);
+            } finally {
+                Thread.currentThread().setContextClassLoader(loader);
             }
         }
         return deployments;

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java?rev=1548224&r1=1548223&r2=1548224&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java Thu Dec  5 18:03:30 2013
@@ -23,11 +23,7 @@ import org.apache.openejb.loader.SystemI
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
+import java.util.*;
 
 // TODO: look SM usage, find a better name
 public class URLClassLoaderFirst extends URLClassLoader {
@@ -52,6 +48,7 @@ public class URLClassLoaderFirst extends
     }
 
     public static final String SLF4J_BINDER_CLASS = "org/slf4j/impl/StaticLoggerBinder.class";
+    private static final URL SLF4J_CONTAINER = URLClassLoaderFirst.class.getClassLoader().getResource(SLF4J_BINDER_CLASS);
     private static final String CLASS_EXT = ".class";
     public static final ClassLoader SYSTEM_CLASS_LOADER = ClassLoader.getSystemClassLoader();
 
@@ -410,9 +407,22 @@ public class URLClassLoaderFirst extends
     }
 
     public static boolean shouldSkipSlf4j(final ClassLoader loader, final String name) {
-        final URL resource = loader.getResource(SLF4J_BINDER_CLASS);
-        return name != null && name.startsWith("org.slf4j.") && resource != null
-                && resource.equals(findParent(loader).getResource(SLF4J_BINDER_CLASS));
+        try { // using getResource here just returns randomly the container one so we need getResources
+            final Enumeration<URL> resources = loader.getResources(SLF4J_BINDER_CLASS);
+            while (resources.hasMoreElements()) {
+                final URL resource = resources.nextElement();
+                if (resource.equals(SLF4J_CONTAINER)) {
+                    continue;
+                }
+                if (!(name != null && name.startsWith("org.slf4j.") && resource != null
+                        && resource.equals(findParent(loader).getResource(SLF4J_BINDER_CLASS)))) {
+                    return false;
+                }
+            }
+        } catch (final Throwable e) {
+            // no-op
+        }
+        return true;
     }
 
     // useful method for SPI