[jboss-cvs] JBossAS SVN: r80246 - projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Oct 30 10:07:38 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-10-30 10:07:38 -0400 (Thu, 30 Oct 2008)
New Revision: 80246

Modified:
   projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java
   projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java
   projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java
Log:
[JBMICROCONT-374] Better determination of classloader to use in DelegatingBeanAspectFactory

Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java	2008-10-30 14:07:34 UTC (rev 80245)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java	2008-10-30 14:07:38 UTC (rev 80246)
@@ -338,9 +338,16 @@
    
    protected void setDefinitionControllerContext(KernelControllerContext context)
    {
-      if (definition != null)
+      try
       {
-         ((GenericBeanAspectFactory)definition.getFactory()).setKernelControllerContext(context);
+         if (definition != null)
+         {
+            ((KernelControllerContextAware)definition.getFactory()).setKernelControllerContext(context);
+         }
       }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
    }
 }
\ No newline at end of file

Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java	2008-10-30 14:07:34 UTC (rev 80245)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java	2008-10-30 14:07:38 UTC (rev 80246)
@@ -25,8 +25,14 @@
 import org.jboss.aop.InstanceAdvisor;
 import org.jboss.aop.advice.AspectFactory;
 import org.jboss.aop.joinpoint.Joinpoint;
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
 import org.jboss.beans.metadata.plugins.factory.GenericBeanFactory;
+import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.beans.metadata.spi.factory.BeanFactory;
+import org.jboss.kernel.plugins.config.Configurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
 import org.jboss.logging.Logger;
 import org.jboss.util.xml.XmlLoadable;
 import org.w3c.dom.Element;
@@ -36,7 +42,7 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
-public class DelegatingBeanAspectFactory implements AspectFactory
+public class DelegatingBeanAspectFactory implements AspectFactory, KernelControllerContextAware
 {
    private static final Logger log = Logger.getLogger(GenericBeanAspectFactory.class); 
 
@@ -46,6 +52,8 @@
    
    protected Element element;
    
+   protected KernelControllerContext context;
+   
    public DelegatingBeanAspectFactory(String name, BeanFactory factory, Element element)
    {
       this.name = name;
@@ -53,6 +61,17 @@
       this.element = element;
    }
 
+   public void setKernelControllerContext(KernelControllerContext context)
+   {
+      this.context = context;
+   }
+
+
+   public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      this.context = null;
+   }
+   
    public void setBeanFactory(GenericBeanFactory factory)
    {
       this.factory = factory;
@@ -98,6 +117,13 @@
       try
       {
          log.debug("Creating advice " + name);
+
+         //Add the ability to push the scoped classloader into the bean factory
+         if (((GenericBeanFactory)factory).getClassLoader() == null)
+         {
+            ((GenericBeanFactory)factory).setClassLoader(new PushedClassLoaderMetaData());
+         }
+         
          AspectFactory fac = (AspectFactory)factory.createBean();
          if (fac instanceof XmlLoadable)
          {
@@ -110,4 +136,45 @@
          throw new RuntimeException(throwable);
       }
    }
+
+
+   /**
+    * Gets any classloaders for the thread
+    */
+   private class PushedClassLoaderMetaData extends AbstractClassLoaderMetaData
+   {
+      /** The serialVersionUID */
+      private static final long serialVersionUID = 1L;
+      
+      @Override
+      public ValueMetaData getClassLoader()
+      {
+         ClassLoader cl = null;
+         if (((GenericBeanFactory)factory).getClassLoader() == this && context != null)
+         {
+            try
+            {
+               cl = context.getClassLoader();
+            }
+            catch (Throwable t)
+            {
+               log.trace("Unable to retrieve classloader from " + context);
+            }
+         }
+         
+         if (cl == null)
+         {
+            try
+            {
+               cl = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
+            }
+            catch (Throwable e)
+            {
+               log.trace("Unable to retrieve classloader from " + factory);
+            }
+         }
+         
+         return new AbstractValueMetaData(cl);
+      }
+   }
 }

Modified: projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java
===================================================================
--- projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java	2008-10-30 14:07:34 UTC (rev 80245)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java	2008-10-30 14:07:38 UTC (rev 80246)
@@ -32,6 +32,7 @@
 import org.jboss.beans.metadata.spi.factory.BeanFactory;
 import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
 import org.jboss.logging.Logger;
 import org.jboss.util.xml.XmlLoadable;
 import org.w3c.dom.Element;
@@ -42,7 +43,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class GenericBeanAspectFactory extends GenericAspectFactory
+public class GenericBeanAspectFactory extends GenericAspectFactory implements KernelControllerContextAware
 {
    private static final Logger log = Logger.getLogger(GenericBeanAspectFactory.class); 
 
@@ -114,11 +115,17 @@
       return doCreate(advisor, instanceAdvisor, jp);
    }
    
-   void setKernelControllerContext(KernelControllerContext context)
+   public void setKernelControllerContext(KernelControllerContext context)
    {
       this.context = context;
    }
 
+
+   public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      this.context = null;
+   }
+   
    protected Object doCreate(Advisor advisor, InstanceAdvisor instanceAdvisor, Joinpoint jp)
    {
       try
@@ -184,5 +191,4 @@
          return new AbstractValueMetaData(cl);
       }
    }
-
 }




More information about the jboss-cvs-commits mailing list