[jboss-cvs] JBossAS SVN: r80157 - 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
Tue Oct 28 13:00:20 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-10-28 13:00:19 -0400 (Tue, 28 Oct 2008)
New Revision: 80157

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/GenericBeanAspectFactory.java
Log:
[JBMICROCONT-374] Better determination of classloader to use in GenericBeanAspectFactory

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-28 17:00:11 UTC (rev 80156)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/Aspect.java	2008-10-28 17:00:19 UTC (rev 80157)
@@ -32,6 +32,8 @@
 import org.jboss.aop.advice.ScopeUtil;
 import org.jboss.aop.instrument.Untransformable;
 import org.jboss.beans.metadata.plugins.factory.GenericBeanFactory;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
 import org.jboss.logging.Logger;
 import org.w3c.dom.Element;
 
@@ -42,7 +44,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class Aspect implements Untransformable
+public class Aspect implements Untransformable, KernelControllerContextAware
 {
    private static final Logger log = Logger.getLogger(Aspect.class);
 
@@ -94,6 +96,11 @@
    private   Element element;
 
    /**
+    * The KernelControllerContext
+    */
+   private KernelControllerContext context;
+   
+   /**
     * Get the name.
     *
     * @return the adviceName.
@@ -255,6 +262,8 @@
          factory.setBeanFactory(advice);
       }
       
+      setDefinitionControllerContext(context);
+      
       //Copy the aspectbindings to avoid ConcurrentModificationExceptions
       ArrayList<Binding> clonedBindings = new ArrayList<Binding>();
       for (Binding aspectBinding : bindings.values())
@@ -301,6 +310,7 @@
       manager.removeAspectDefinition(name);
       if (definition != null)
       {
+         setDefinitionControllerContext(null);
          definition.undeploy();
          definition = null;
       }
@@ -315,4 +325,22 @@
    {
       bindings.remove(binding.getName());
    }
+
+   public void setKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      this.context = context;
+   }
+
+   public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      this.context = null;
+   }
+   
+   protected void setDefinitionControllerContext(KernelControllerContext context)
+   {
+      if (definition != null)
+      {
+         ((GenericBeanAspectFactory)definition.getFactory()).setKernelControllerContext(context);
+      }
+   }
 }
\ No newline at end of file

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-28 17:00:11 UTC (rev 80156)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java	2008-10-28 17:00:19 UTC (rev 80157)
@@ -30,6 +30,8 @@
 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.logging.Logger;
 import org.jboss.util.xml.XmlLoadable;
 import org.w3c.dom.Element;
@@ -51,6 +53,8 @@
    
    protected Element element;
    
+   protected KernelControllerContext context;
+   
    public GenericBeanAspectFactory(String name, GenericBeanFactory factory, Element element)
    {
       super(null, element);
@@ -109,6 +113,11 @@
    {
       return doCreate(advisor, instanceAdvisor, jp);
    }
+   
+   void setKernelControllerContext(KernelControllerContext context)
+   {
+      this.context = context;
+   }
 
    protected Object doCreate(Advisor advisor, InstanceAdvisor instanceAdvisor, Joinpoint jp)
    {
@@ -147,16 +156,32 @@
       @Override
       public ValueMetaData getClassLoader()
       {
-         ClassLoader loader = GenericBeanAspectFactory.this.getLoader(); 
-         //GenericBeanAspectFactory.this.peekScopedClassLoader();
-         if (loader == null)
+         ClassLoader cl = GenericBeanAspectFactory.this.getLoader();
+         if (cl == null && ((GenericBeanFactory)factory).getClassLoader() == this && context != null)
          {
-            return null;
+            try
+            {
+               cl = context.getClassLoader();
+            }
+            catch (Throwable t)
+            {
+               log.trace("Unable to retrieve classloader from " + context);
+            }
          }
-         else
+         
+         if (cl == null)
          {
-            return new AbstractValueMetaData(loader);
+            try
+            {
+               cl = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
+            }
+            catch (Throwable e)
+            {
+               log.trace("Unable to retrieve classloader from " + factory);
+            }
          }
+         
+         return new AbstractValueMetaData(cl);
       }
    }
 




More information about the jboss-cvs-commits mailing list