[jboss-cvs] JBossAS SVN: r86444 - projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Mar 28 15:32:48 EDT 2009


Author: alesj
Date: 2009-03-28 15:32:48 -0400 (Sat, 28 Mar 2009)
New Revision: 86444

Modified:
   projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java
Log:
Do in privileged code.

Modified: projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java
===================================================================
--- projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java	2009-03-28 19:09:19 UTC (rev 86443)
+++ projects/spring-int/trunk/weaving/src/main/java/org/jboss/instrument/classloading/JBoss5ClassLoader.java	2009-03-28 19:32:48 UTC (rev 86444)
@@ -23,6 +23,8 @@
 
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
 
 import org.jboss.classloader.spi.ClassLoaderPolicy;
 import org.jboss.classloader.spi.ClassLoaderSystem;
@@ -46,11 +48,12 @@
    private static Logger log = Logger.getLogger(JBoss5ClassLoader.class);
 
    private final BaseClassLoader classLoader;
-   private final ClassLoaderPolicy policy;
-   private ClassLoaderSystem system;
 
+   private ClassLoaderPolicy policy;
    private Method setTranslator;
+   private ClassLoaderSystem system;
 
+   @SuppressWarnings("unchecked")
    public JBoss5ClassLoader(BaseClassLoader classLoader)
    {
       Assert.notNull(classLoader, "ClassLoader must not be null");
@@ -58,30 +61,11 @@
 
       try
       {
-         Method getPolicy = getMethod(BaseClassLoader.class, "getPolicy");
-         policy = invokeMethod(getPolicy, classLoader, ClassLoaderPolicy.class);
-         try
-         {
-            // let's check if we have a patched policy, with translator per policy
-            setTranslator = getMethod(BaseClassLoaderPolicy.class, "setTranslator");
-         }
-         catch (Exception ignored)
-         {
-            log.info("Policy doesn't have setTranslator, falling back to ClassLoaderSystem.");
-
-            Method getClassLoaderDomain = getMethod(BaseClassLoaderPolicy.class, "getClassLoaderDomain");
-            BaseClassLoaderDomain domain = invokeMethod(getClassLoaderDomain, policy, BaseClassLoaderDomain.class);
-            Method getClassLoaderSystem = getMethod(BaseClassLoaderDomain.class, "getClassLoaderSystem");
-            BaseClassLoaderSystem system = invokeMethod(getClassLoaderSystem, domain, BaseClassLoaderSystem.class);
-            if (system instanceof ClassLoaderSystem)
-            {
-               this.system = ClassLoaderSystem.class.cast(system);
-            }
-            else
-            {
-               throw new IllegalArgumentException("ClassLoaderSyatem must be instance of [" + ClassLoaderSystem.class.getName() + "]");
-            }
-         }
+         SecurityManager sm = System.getSecurityManager();
+         if (sm != null)
+            AccessController.doPrivileged(new InstantiationAction());
+         else
+            doInstantiate();
       }
       catch (Exception e)
       {
@@ -90,6 +74,39 @@
    }
 
    /**
+    * Do instantiate method, variables.
+    *
+    * @throws Exception for any error
+    */
+   private void doInstantiate() throws Exception
+   {
+      Method getPolicy = getMethod(BaseClassLoader.class, "getPolicy");
+      policy = invokeMethod(getPolicy, classLoader, ClassLoaderPolicy.class);
+      try
+      {
+         // let's check if we have a patched policy, with translator per policy
+         setTranslator = getMethod(BaseClassLoaderPolicy.class, "setTranslator");
+      }
+      catch (Exception ignored)
+      {
+         log.info("Policy doesn't have setTranslator, falling back to ClassLoaderSystem.");
+
+         Method getClassLoaderDomain = getMethod(BaseClassLoaderPolicy.class, "getClassLoaderDomain");
+         BaseClassLoaderDomain domain = invokeMethod(getClassLoaderDomain, policy, BaseClassLoaderDomain.class);
+         Method getClassLoaderSystem = getMethod(BaseClassLoaderDomain.class, "getClassLoaderSystem");
+         BaseClassLoaderSystem system = invokeMethod(getClassLoaderSystem, domain, BaseClassLoaderSystem.class);
+         if (system instanceof ClassLoaderSystem)
+         {
+            JBoss5ClassLoader.this.system = ClassLoaderSystem.class.cast(system);
+         }
+         else
+         {
+            throw new IllegalArgumentException("ClassLoaderSyatem must be instance of [" + ClassLoaderSystem.class.getName() + "]");
+         }
+      }
+   }
+
+   /**
     * Get method from class.
     *
     * @param clazz the owner class
@@ -153,4 +170,16 @@
    {
       return new BaseClassLoader(policy);
    }
+
+   /**
+    * Instantiation action.
+    */
+   private class InstantiationAction implements PrivilegedExceptionAction
+   {
+      public Object run() throws Exception
+      {
+         doInstantiate();
+         return null;
+      }
+   }
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list