[jboss-cvs] JBossAS SVN: r110028 - trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sun Dec 19 04:55:06 EST 2010


Author: marius.bogoevici
Date: 2010-12-19 04:55:05 -0500 (Sun, 19 Dec 2010)
New Revision: 110028

Modified:
   trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/JBossProxyServices.java
Log:
JBAS-8748 - Use TCCL only for classes that start with 'java'

Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/JBossProxyServices.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/JBossProxyServices.java	2010-12-18 14:28:44 UTC (rev 110027)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/JBossProxyServices.java	2010-12-19 09:55:05 UTC (rev 110028)
@@ -62,7 +62,7 @@
 
    /**
     * Return the thread context classloader or its first {@link org.jboss.classloading.spi.RealClassLoader}
-    * parent (WARs WebCtxLoader$ENCLoader cannot be used for defining new proxy classes)
+    * parent for classes from the java.* package (WARs WebCtxLoader$ENCLoader cannot be used for defining new proxy classes)
     *
     * If no {@link org.jboss.classloading.spi.RealClassLoader} is found, we return whatever we found.
     *
@@ -71,25 +71,25 @@
     */
    private ClassLoader _getClassLoader(Class<?> proxiedBeanType)
    {
-      ClassLoader threadContextClassLoader = getThreadContextClassLoader();
-      ClassLoader actualClassLoader = threadContextClassLoader;
-      while (actualClassLoader != null && !(actualClassLoader instanceof RealClassLoader))
+      if (proxiedBeanType.getName().startsWith("java"))
       {
-         actualClassLoader = actualClassLoader.getParent();
+         ClassLoader threadContextClassLoader = getThreadContextClassLoader();
+         ClassLoader actualClassLoader = threadContextClassLoader;
+         while (actualClassLoader != null && !(actualClassLoader instanceof RealClassLoader))
+         {
+            actualClassLoader = actualClassLoader.getParent();
+         }
+         if (actualClassLoader != null)
+         {
+            return actualClassLoader;
+         }
+         else if (threadContextClassLoader != null)
+         {
+            return threadContextClassLoader;
+         }
       }
-      if (actualClassLoader != null)
-      {
-         return actualClassLoader;
-      }
-      else if (threadContextClassLoader != null)
-      {
-         return threadContextClassLoader;
-      }
-      else
-      {
-          // fall back to the default Weld behaviour
-          return super.getClassLoader(proxiedBeanType);
-      }
+      // fall back to the default Weld behaviour
+      return super.getClassLoader(proxiedBeanType);
    }
 
    private static ClassLoader getThreadContextClassLoader()
@@ -110,4 +110,22 @@
          return Thread.currentThread().getContextClassLoader();
       }
    }
-}
\ No newline at end of file
+
+   public Class<?> loadBeanClass(final String className)
+   {
+      try
+      {
+         return (Class<?>) AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+         {
+            public Object run() throws Exception
+            {
+               return Class.forName(className, true, getThreadContextClassLoader());
+            }
+         });
+      }
+      catch (PrivilegedActionException pae)
+      {
+         throw new WeldException(BeanMessage.CANNOT_LOAD_CLASS, className, pae.getException());
+      }
+   }
+}



More information about the jboss-cvs-commits mailing list