[jboss-cvs] JBossAS SVN: r80259 - 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 11:35:13 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-10-30 11:35:13 -0400 (Thu, 30 Oct 2008)
New Revision: 80259

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/GenericBeanAspectFactory.java
Log:
[JBMICROCONT-374] Differentiate how we get classloader when running with scoping

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 15:34:47 UTC (rev 80258)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/DelegatingBeanAspectFactory.java	2008-10-30 15:35:13 UTC (rev 80259)
@@ -118,13 +118,33 @@
       {
          log.debug("Creating advice " + name);
 
-         //Add the ability to push the scoped classloader into the bean factory
+         PushedClassLoaderMetaData pcmd = null;
          if (((GenericBeanFactory)factory).getClassLoader() == null)
          {
-            ((GenericBeanFactory)factory).setClassLoader(new PushedClassLoaderMetaData());
+            pcmd = new PushedClassLoaderMetaData();
+            ((GenericBeanFactory)factory).setClassLoader(pcmd);
          }
          
-         AspectFactory fac = (AspectFactory)factory.createBean();
+         Object object = null;
+         try
+         {
+            //Try without looking at the context first which is what shold be used when running scoped in AS
+            object = factory.createBean();
+         }
+         catch(Throwable t)
+         {
+            if (pcmd != null)
+            {
+               pcmd.setLookAtContext(true);
+            }
+            else
+            {
+               throw new RuntimeException(t);
+            }
+            object = factory.createBean();
+         }
+
+         AspectFactory fac = (AspectFactory)object;
          if (fac instanceof XmlLoadable)
          {
             ((XmlLoadable)fac).importXml(element);
@@ -146,35 +166,49 @@
       /** The serialVersionUID */
       private static final long serialVersionUID = 1L;
       
+      boolean lookAtContext;
+      
+      void setLookAtContext(boolean look)
+      {
+         lookAtContext = look;
+      }
+
       @Override
       public ValueMetaData getClassLoader()
       {
-         ClassLoader cl = null;
-         if (((GenericBeanFactory)factory).getClassLoader() == this && context != null)
+         ClassLoader loader = null; 
+         if (loader == null)
          {
-            try
+            if (lookAtContext && context != null)
             {
-               cl = context.getClassLoader();
+               try
+               {
+                  loader = context.getClassLoader();
+               }
+               catch (Throwable t)
+               {
+                  log.trace("Unable to retrieve classloader from " + context);
+               }
+               
+               if (loader == null)
+               {
+                  try
+                  {
+                     loader = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
+                  }
+                  catch (Throwable e)
+                  {
+                     log.trace("Unable to retrieve classloader from " + factory);
+                  }
+               }
             }
-            catch (Throwable t)
-            {
-               log.trace("Unable to retrieve classloader from " + context);
-            }
+            return loader != null ?  new AbstractValueMetaData(loader) : null;
          }
-         
-         if (cl == null)
+         else
          {
-            try
-            {
-               cl = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
-            }
-            catch (Throwable e)
-            {
-               log.trace("Unable to retrieve classloader from " + factory);
-            }
+            return new AbstractValueMetaData(loader);
          }
-         
-         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 15:34:47 UTC (rev 80258)
+++ projects/microcontainer/branches/Branch_2_0/aop-mc-int/src/main/java/org/jboss/aop/microcontainer/beans/GenericBeanAspectFactory.java	2008-10-30 15:35:13 UTC (rev 80259)
@@ -132,13 +132,33 @@
       {
          log.debug("Creating advice " + name);
          
-         //Add the ability to push the scoped classloader into the bean factory
+         
+         PushedClassLoaderMetaData pcmd = null;
          if (((GenericBeanFactory)factory).getClassLoader() == null)
          {
-            ((GenericBeanFactory)factory).setClassLoader(new PushedClassLoaderMetaData());
+            pcmd = new PushedClassLoaderMetaData();
+            ((GenericBeanFactory)factory).setClassLoader(pcmd);
          }
          
-         Object object = factory.createBean();
+         Object object = null;
+         try
+         {
+            //Try without looking at the context first which is what shold be used when running scoped in AS
+            object = factory.createBean();
+         }
+         catch(Throwable t)
+         {
+            if (pcmd != null)
+            {
+               pcmd.setLookAtContext(true);
+            }
+            else
+            {
+               throw new RuntimeException(t);
+            }
+            object = factory.createBean();
+         }
+         
          if (object instanceof XmlLoadable)
          {
             ((XmlLoadable)object).importXml(element);
@@ -160,35 +180,49 @@
       /** The serialVersionUID */
       private static final long serialVersionUID = 1L;
       
+      boolean lookAtContext;
+      
+      void setLookAtContext(boolean look)
+      {
+         lookAtContext = look;
+      }
+   
       @Override
       public ValueMetaData getClassLoader()
       {
-         ClassLoader cl = GenericBeanAspectFactory.this.getLoader();
-         if (cl == null && ((GenericBeanFactory)factory).getClassLoader() == this && context != null)
+         ClassLoader loader = GenericBeanAspectFactory.this.getLoader(); 
+         //GenericBeanAspectFactory.this.peekScopedClassLoader();
+         if (loader == null)
          {
-            try
+            if (lookAtContext && context != null)
             {
-               cl = context.getClassLoader();
+               try
+               {
+                  loader = context.getClassLoader();
+               }
+               catch (Throwable t)
+               {
+                  log.trace("Unable to retrieve classloader from " + context);
+               }
+               
+               if (loader == null)
+               {
+                  try
+                  {
+                     loader = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
+                  }
+                  catch (Throwable e)
+                  {
+                     log.trace("Unable to retrieve classloader from " + factory);
+                  }
+               }
             }
-            catch (Throwable t)
-            {
-               log.trace("Unable to retrieve classloader from " + context);
-            }
+            return loader != null ?  new AbstractValueMetaData(loader) : null;
          }
-         
-         if (cl == null)
+         else
          {
-            try
-            {
-               cl = Configurator.getClassLoader(((GenericBeanFactory)factory).getClassLoader());
-            }
-            catch (Throwable e)
-            {
-               log.trace("Unable to retrieve classloader from " + factory);
-            }
+            return new AbstractValueMetaData(loader);
          }
-         
-         return new AbstractValueMetaData(cl);
       }
    }
 }




More information about the jboss-cvs-commits mailing list