[jboss-cvs] JBossAS SVN: r64252 - in projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi: base and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 24 12:55:05 EDT 2007


Author: adrian at jboss.org
Date: 2007-07-24 12:55:04 -0400 (Tue, 24 Jul 2007)
New Revision: 64252

Modified:
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderSystem.java
Log:
Add support for Translator - used by Legacy AOP tests in JBossAS testsuite

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java	2007-07-24 15:39:31 UTC (rev 64251)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/ClassLoaderSystem.java	2007-07-24 16:55:04 UTC (rev 64252)
@@ -21,6 +21,7 @@
  */
 package org.jboss.classloader.spi;
 
+import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -30,6 +31,7 @@
 import org.jboss.classloader.plugins.system.ClassLoaderSystemBuilder;
 import org.jboss.classloader.spi.base.BaseClassLoaderSystem;
 import org.jboss.logging.Logger;
+import org.jboss.util.loading.Translator;
 
 /**
  * ClassLoaderSystem.
@@ -54,6 +56,9 @@
    /** The registered domains by name */
    private Map<String, ClassLoaderDomain> registeredDomains = new HashMap<String, ClassLoaderDomain>();
 
+   /** Any translator */
+   private Translator translator;
+   
    /** Whether the system is shutdown */
    private boolean shutdown = false;
    
@@ -375,7 +380,50 @@
       }
    }
    
+   /**
+    * Get the translator.
+    * 
+    * @return the translator.
+    */
+   public Translator getTranslator()
+   {
+      return translator;
+   }
+
+   /**
+    * Set the translator.
+    * 
+    * @param translator the translator.
+    */
+   public void setTranslator(Translator translator)
+   {
+      log.debug(this + " set translator to " + translator);
+      this.translator = translator;
+   }
+
    @Override
+   protected byte[] transform(ClassLoader classLoader, String className, byte[] byteCode, ProtectionDomain protectionDomain) throws Exception
+   {
+      if (translator != null)
+         return translator.transform(classLoader, className, null, protectionDomain, byteCode);
+      return super.transform(classLoader, className, byteCode, protectionDomain);
+   }
+
+   @Override
+   protected void afterUnregisterClassLoader(ClassLoader classLoader)
+   {
+      try
+      {
+         if (translator != null)
+            translator.unregisterClassLoader(classLoader);
+      }
+      catch (Throwable t)
+      {
+         log.warn("Error unregistering classloader from translator " + classLoader, t);
+      }
+   }
+
+   @Override
    protected void toLongString(StringBuilder builder)
    {
       if (shutdown)

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java	2007-07-24 15:39:31 UTC (rev 64251)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoader.java	2007-07-24 16:55:04 UTC (rev 64252)
@@ -259,7 +259,14 @@
             // Let the policy do things before we define the class
             BaseClassLoaderPolicy basePolicy = policy;
             ProtectionDomain protectionDomain = basePolicy.getProtectionDomain(name, resourcePath);
-            byteCode = policy.transform(name, byteCode, protectionDomain);
+            try
+            {
+               byteCode = policy.transform(name, byteCode, protectionDomain);
+            }
+            catch (Throwable t)
+            {
+               throw new RuntimeException("Unexpected error transforming class " + name, t);
+            }
             
             // Create the package if necessary
             definePackage(name);

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2007-07-24 15:39:31 UTC (rev 64251)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderDomain.java	2007-07-24 16:55:04 UTC (rev 64252)
@@ -154,16 +154,18 @@
     * 
     * By default, this delegates to the classloader system
     * 
+    * @param classLoader the classloader
     * @param className the class name
     * @param byteCode the byte code
     * @param protectionDomain the protection domain
     * @return the transformed byte code
+    * @throws Exception for any error
     */
-   protected byte[] transform(String className, byte[] byteCode, ProtectionDomain protectionDomain)
+   protected byte[] transform(ClassLoader classLoader, String className, byte[] byteCode, ProtectionDomain protectionDomain) throws Exception
    {
       BaseClassLoaderSystem system = getClassLoaderSystem();
       if (system != null)
-         system.transform(className, byteCode, protectionDomain);
+         system.transform(classLoader, className, byteCode, protectionDomain);
       return byteCode;
    }
    

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java	2007-07-24 15:39:31 UTC (rev 64251)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderPolicy.java	2007-07-24 16:55:04 UTC (rev 64252)
@@ -131,12 +131,13 @@
     * @param byteCode the byte code
     * @param protectionDomain the protection domain
     * @return the transformed byte code
+    * @throws Exception for any error
     */
-   protected byte[] transform(String className, byte[] byteCode, ProtectionDomain protectionDomain)
+   protected byte[] transform(String className, byte[] byteCode, ProtectionDomain protectionDomain) throws Exception
    {
       BaseClassLoaderDomain domain = getClassLoaderDomain();
       if (domain != null)
-         domain.transform(className, byteCode, protectionDomain);
+         domain.transform(getClassLoader(), className, byteCode, protectionDomain);
       return byteCode;
    }
 

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderSystem.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderSystem.java	2007-07-24 15:39:31 UTC (rev 64251)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/spi/base/BaseClassLoaderSystem.java	2007-07-24 16:55:04 UTC (rev 64252)
@@ -116,7 +116,9 @@
          public BaseClassLoader run()
          {
             BaseClassLoader classLoader = createClassLoader(policy);
+            beforeRegisterClassLoader(classLoader);
             domain.registerClassLoader(classLoader);
+            afterRegisterClassLoader(classLoader);
             return classLoader;
          }
       }, policy.getAccessControlContext());
@@ -141,9 +143,11 @@
       BaseClassLoaderDomain domain = basePolicy.getClassLoaderDomain();
       if (domain == null)
          throw new IllegalStateException("Policy has no domain " + policy.toLongString());
+      beforeUnregisterClassLoader(classLoader);
       domain.unregisterClassLoader(classLoader);
+      afterUnregisterClassLoader(classLoader);
    }
-   
+
    /**
     * Unregister a policy with a domain
     * 
@@ -176,16 +180,58 @@
    }
    
    /**
+    * Before register classloader
+    * 
+    * @param classLoader the classloader
+    */
+   protected void beforeRegisterClassLoader(ClassLoader classLoader)
+   {
+      // Nothing
+   }
+   
+   /**
+    * After register classloader
+    * 
+    * @param classLoader the classloader
+    */
+   protected void afterRegisterClassLoader(ClassLoader classLoader)
+   {
+      // Nothing
+   }
+   
+   /**
+    * Before unregister classloader
+    * 
+    * @param classLoader the classloader
+    */
+   protected void beforeUnregisterClassLoader(ClassLoader classLoader)
+   {
+      // Nothing
+   }
+   
+   /**
+    * After unregister classloader
+    * 
+    * @param classLoader the classloader
+    */
+   protected void afterUnregisterClassLoader(ClassLoader classLoader)
+   {
+      // Nothing
+   }
+   
+   /**
     * Transform the byte code<p>
     *
     * By default this does nothing
-    * 
+    *
+    * @param classLoader the classLoader
     * @param className the class name
     * @param byteCode the byte code
     * @param protectionDomain the protection domain
     * @return the transformed byte code
+    * @throws Exception for any error
     */
-   protected byte[] transform(String className, byte[] byteCode, ProtectionDomain protectionDomain)
+   protected byte[] transform(ClassLoader classLoader, String className, byte[] byteCode, ProtectionDomain protectionDomain) throws Exception
    {
       return byteCode;
    }




More information about the jboss-cvs-commits mailing list