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