[jboss-cvs] JBossAS SVN: r70494 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/beans/metadata/plugins/builder and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 6 11:32:05 EST 2008


Author: adrian at jboss.org
Date: 2008-03-06 11:32:05 -0500 (Thu, 06 Mar 2008)
New Revision: 70494

Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactory.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployment.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/DeploymentClassLoaderInterceptor.java
   projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/DeploymentTestCase.java
Log:
[JBMICROCONT-219] - Fix the ClassLoader usage in the new GBF and other ClassLoader fixes from legacy bad implementation

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractClassLoaderMetaData.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -22,26 +22,22 @@
 package org.jboss.beans.metadata.plugins;
 
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
 
-import javax.xml.bind.annotation.XmlType;
-import javax.xml.bind.annotation.XmlElements;
-import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlType;
 
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
 import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
 import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.dependency.spi.ControllerState;
+import org.jboss.managed.api.annotation.ManagementProperty;
 import org.jboss.util.JBossObject;
 import org.jboss.util.JBossStringBuilder;
-import org.jboss.managed.api.annotation.ManagementProperty;
 
 /**
  * A classloader.
@@ -52,7 +48,7 @@
  */
 @XmlType(name="classloaderType", propOrder="classLoader")
 public class AbstractClassLoaderMetaData extends JBossObject
-   implements ClassLoaderMetaData, BeanMetaDataFactory, Serializable
+   implements ClassLoaderMetaData, Serializable
 {
    private static final long serialVersionUID = 2L;
 
@@ -110,19 +106,6 @@
          setClassLoader(new AbstractValueMetaData(classloader));
    }
 
-   public List<BeanMetaData> getBeans()
-   {
-      if (classloader instanceof BeanMetaDataFactory)
-      {
-         return ((BeanMetaDataFactory)classloader).getBeans();
-      }
-      else if (classloader instanceof BeanMetaData)
-      {
-         return Collections.singletonList((BeanMetaData)classloader);
-      }
-      return new ArrayList<BeanMetaData>();
-   }
-
    public void initialVisit(MetaDataVisitor visitor)
    {
       visitor.setContextState(ControllerState.PRE_INSTALL);

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/builder/BeanMetaDataBuilderImpl.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -46,6 +46,7 @@
 import org.jboss.beans.metadata.plugins.StringValueMetaData;
 import org.jboss.beans.metadata.plugins.ThisValueMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
 import org.jboss.beans.metadata.spi.DemandMetaData;
 import org.jboss.beans.metadata.spi.DependencyMetaData;
 import org.jboss.beans.metadata.spi.PropertyMetaData;
@@ -153,6 +154,12 @@
       return this;
    }
 
+   public BeanMetaDataBuilder setClassLoader(ClassLoaderMetaData classLoader)
+   {
+      beanMetaData.setClassLoader(classLoader);
+      return this;
+   }
+
    protected void checkConstructorBuilder()
    {
       AbstractConstructorMetaData constructor = (AbstractConstructorMetaData) beanMetaData.getConstructor();

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactory.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactory.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/factory/GenericBeanFactory.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -37,6 +37,9 @@
 import org.jboss.joinpoint.spi.TargettedJoinpoint;
 import org.jboss.kernel.plugins.config.Configurator;
 import org.jboss.kernel.spi.config.KernelConfigurator;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.kernel.spi.dependency.KernelControllerContextAware;
+import org.jboss.logging.Logger;
 
 /**
  * Bean factory metadata.
@@ -44,11 +47,17 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public class GenericBeanFactory implements BeanFactory
+public class GenericBeanFactory implements BeanFactory, KernelControllerContextAware
 {
+   /** The log */
+   private static final Logger log = Logger.getLogger(GenericBeanFactory.class);
+   
    /** The configurator */
    protected KernelConfigurator configurator;
    
+   /** Our context */
+   protected KernelControllerContext context;
+   
    /** The bean class name */
    protected String bean;
    
@@ -85,7 +94,21 @@
     */
    public Object createBean() throws Throwable
    {
-      ClassLoader cl = Configurator.getClassLoader(classLoader);
+      ClassLoader cl = null;
+      if (classLoader == null && context != null)
+      {
+         try
+         {
+            cl = context.getClassLoader();
+         }
+         catch (Throwable t)
+         {
+            log.trace("Unable to retrieve classloader from " + context);
+         }
+      }
+      
+      if (cl == null)
+         cl = Configurator.getClassLoader(classLoader);
       BeanInfo info = null;
       if (bean != null)
          info = configurator.getBeanInfo(bean, cl);
@@ -111,6 +134,16 @@
       return result;
    }
    
+   public void setKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      this.context = context;
+   }
+
+   public void unsetKernelControllerContext(KernelControllerContext context) throws Exception
+   {
+      this.context = null;
+   }
+
    /**
     * Get the bean name
     * 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/builder/BeanMetaDataBuilder.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -29,6 +29,7 @@
 import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
 import org.jboss.beans.metadata.plugins.builder.BeanMetaDataBuilderFactory;
 import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
 import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
@@ -130,7 +131,6 @@
     * @param classLoader the classloader
     * @return the builder
     */
-
    public BeanMetaDataBuilder setClassLoader(Object classLoader)
    {
       return setClassLoader(createValue(classLoader));
@@ -145,6 +145,14 @@
    public abstract BeanMetaDataBuilder setClassLoader(ValueMetaData classLoader);
 
    /**
+    * Set the classloader
+    * 
+    * @param classLoader the classloader
+    * @return the builder
+    */
+   public abstract BeanMetaDataBuilder setClassLoader(ClassLoaderMetaData classLoader);
+
+   /**
     * Set the factory
     * 
     * @param factory the factory

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/factory/GenericBeanFactoryMetaData.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -497,9 +497,18 @@
       ValueMetaData injectKernelConfigurator = builder.createInject(KernelConstants.KERNEL_CONFIGURATOR_NAME);
       builder.addConstructorParameter(KernelConfigurator.class.getName(), injectKernelConfigurator);
       builder.addPropertyMetaData("bean", bean);
-      builder.addPropertyMetaData("constructor", constructor);
-      builder.addPropertyMetaData("start", start);
-      builder.addPropertyMetaData("create", create);
+      if (classLoader != null)
+      {
+         builder.setClassLoader(classLoader);
+         if (classLoader == null)
+         builder.addPropertyMetaData("classLoader", builder.createValue(classLoader));
+      }
+      if (constructor != null)
+         builder.addPropertyMetaData("constructor", constructor);
+      if (create != null)
+         builder.addPropertyMetaData("create", create);
+      if (start != null)
+         builder.addPropertyMetaData("start", start);
       if (demands != null && demands.size() > 0)
       {
          for (DemandMetaData demand : demands)

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployer.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -29,8 +29,11 @@
 import java.util.ListIterator;
 import java.util.Set;
 
+import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
+import org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
@@ -331,7 +334,20 @@
       {
          ClassLoaderMetaData deploymentClassLoader = deployment.getClassLoader();
          if (deploymentClassLoader != null)
-            bean.setClassLoader(deploymentClassLoader);
+         {
+            // If the deployment classloader is a bean, replace it with an injection
+            ValueMetaData classLoader = deploymentClassLoader.getClassLoader();
+            if (classLoader instanceof BeanMetaData)
+            {
+               classLoader = new AbstractDependencyValueMetaData(((BeanMetaData) classLoader).getName());
+               beanClassLoader = new AbstractClassLoaderMetaData(classLoader);
+            }
+            else
+            {
+               beanClassLoader = deploymentClassLoader;
+            }
+            bean.setClassLoader(beanClassLoader);
+         }
       }
       controller.install(context);
       return context;

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployment.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployment.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/AbstractKernelDeployment.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -43,6 +43,7 @@
 import org.jboss.beans.metadata.plugins.AbstractLazyMetaData;
 import org.jboss.beans.metadata.plugins.AbstractLifecycleMetaData;
 import org.jboss.beans.metadata.plugins.AbstractNamedAliasMetaData;
+import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
 import org.jboss.beans.metadata.plugins.MutableLifecycleHolder;
 import org.jboss.beans.metadata.spi.AnnotationMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
@@ -50,6 +51,7 @@
 import org.jboss.beans.metadata.spi.ClassLoaderMetaData;
 import org.jboss.beans.metadata.spi.LifecycleMetaData;
 import org.jboss.beans.metadata.spi.NamedAliasMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
 import org.jboss.beans.metadata.spi.factory.GenericBeanFactoryMetaData;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
@@ -198,57 +200,79 @@
 
    public List<BeanMetaData> getBeans()
    {
+      List<BeanMetaData> result = new ArrayList<BeanMetaData>();
+      
+      // Include the classloader if it is a bean
+      ClassLoaderMetaData classLoaderMetaData = getClassLoader();
+      if (classLoaderMetaData != null)
+      {
+         ValueMetaData classLoader = classLoaderMetaData.getClassLoader();
+         if (classLoader instanceof BeanMetaData)
+         {
+            // Hack, if it doesn't have a classloader use the "null" classloader
+            // we don't want it to gain itself as the classloader
+            BeanMetaData classLoaderBean = (BeanMetaData) classLoader;
+            if (classLoaderBean.getClassLoader() == null)
+               classLoaderBean.setClassLoader(new AbstractClassLoaderMetaData(new AbstractValueMetaData()));
+            result.add((BeanMetaData) classLoader);
+         }
+      }
+
       List<BeanMetaDataFactory> factories = getBeanFactories();
-      if (factories == null || factories.size() == 0)
-         return null;
-      List<BeanMetaData> result = new ArrayList<BeanMetaData>(factories.size());
-      for (BeanMetaDataFactory factory : factories)
+
+      if (factories != null && factories.isEmpty() == false)
       {
-         List<BeanMetaData> beans = factory.getBeans();
-         for (BeanMetaData bmd : beans)
+         for (BeanMetaDataFactory factory : factories)
          {
-            // check annotations
-            if (annotations != null && annotations.isEmpty() == false)
+            List<BeanMetaData> beans = factory.getBeans();
+            for (BeanMetaData bmd : beans)
             {
-               Set<AnnotationMetaData> annotationsBMD = bmd.getAnnotations();
-               if (annotationsBMD == null)
+               // check annotations
+               if (annotations != null && annotations.isEmpty() == false)
                {
-                  annotationsBMD = new HashSet<AnnotationMetaData>();
-                  bmd.setAnnotations(annotationsBMD);
+                  Set<AnnotationMetaData> annotationsBMD = bmd.getAnnotations();
+                  if (annotationsBMD == null)
+                  {
+                     annotationsBMD = new HashSet<AnnotationMetaData>();
+                     bmd.setAnnotations(annotationsBMD);
+                  }
+                  annotationsBMD.addAll(annotations);
                }
-               annotationsBMD.addAll(annotations);
-            }
-            // impl specific
-            if (bmd instanceof AbstractBeanMetaData)
-            {
-               AbstractBeanMetaData bean = (AbstractBeanMetaData)bmd;
-               // set deployment defaults, if not already set per bean
-               if (bean.getCreate() == null && getCreate() != null)
+               // impl specific
+               if (bmd instanceof AbstractBeanMetaData)
                {
-                  bean.setCreate(getCreate());
-               }
-               if (bean.getStart() == null && getStart() != null)
-               {
-                  bean.setStart(getStart());
-               }
-               if (bean.getStop() == null && getStop() != null)
-               {
-                  bean.setStop(getStop());
-               }
-               if (bean.getDestroy() == null && getDestroy() != null)
-               {
-                  bean.setDestroy(getDestroy());
-               }
+                  AbstractBeanMetaData bean = (AbstractBeanMetaData)bmd;
+                  // set deployment defaults, if not already set per bean
+                  if (bean.getCreate() == null && getCreate() != null)
+                  {
+                     bean.setCreate(getCreate());
+                  }
+                  if (bean.getStart() == null && getStart() != null)
+                  {
+                     bean.setStart(getStart());
+                  }
+                  if (bean.getStop() == null && getStop() != null)
+                  {
+                     bean.setStop(getStop());
+                  }
+                  if (bean.getDestroy() == null && getDestroy() != null)
+                  {
+                     bean.setDestroy(getDestroy());
+                  }
 
-               // controller mode
-               if (bean.getMode() == null && getMode() != null)
-               {
-                  bean.setMode(getMode());
+                  // controller mode
+                  if (bean.getMode() == null && getMode() != null)
+                  {
+                     bean.setMode(getMode());
+                  }
                }
             }
+            result.addAll(beans);
          }
-         result.addAll(beans);
       }
+      // For backwards compatibility
+      if (result.isEmpty())
+         return null;
       return result;
    }
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -269,7 +269,6 @@
                beans = new ArrayList<BeanMetaDataFactory>();
                deployment.setBeanFactories(beans);
             }
-            beans.add(classloader);
          }
       });
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/DeploymentClassLoaderInterceptor.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/DeploymentClassLoaderInterceptor.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/DeploymentClassLoaderInterceptor.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -53,6 +53,5 @@
          beans = new ArrayList<BeanMetaDataFactory>();
          deployment.setBeanFactories(beans);
       }
-      beans.add(classloader);
    }
 }

Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/DeploymentTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/DeploymentTestCase.java	2008-03-06 16:13:56 UTC (rev 70493)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/DeploymentTestCase.java	2008-03-06 16:32:05 UTC (rev 70494)
@@ -21,27 +21,28 @@
 */
 package org.jboss.test.kernel.deployment.xml.test;
 
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-import java.util.ArrayList;
 import java.util.TreeSet;
-import java.util.Iterator;
-import java.lang.annotation.Annotation;
 
 import junit.framework.Test;
+
 import org.jboss.beans.metadata.plugins.factory.GenericBeanFactory;
+import org.jboss.beans.metadata.spi.AnnotationMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
 import org.jboss.beans.metadata.spi.LifecycleMetaData;
-import org.jboss.beans.metadata.spi.AnnotationMetaData;
 import org.jboss.beans.metadata.spi.NamedAliasMetaData;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
+import org.jboss.test.kernel.deployment.xml.support.Annotation1;
+import org.jboss.test.kernel.deployment.xml.support.AnnotationWithAttributes;
 import org.jboss.test.kernel.deployment.xml.support.TestBeanMetaDataFactory;
 import org.jboss.test.kernel.deployment.xml.support.TestBeanMetaDataFactory1;
 import org.jboss.test.kernel.deployment.xml.support.TestBeanMetaDataFactory2;
-import org.jboss.test.kernel.deployment.xml.support.Annotation1;
-import org.jboss.test.kernel.deployment.xml.support.AnnotationWithAttributes;
 
 /**
  * DeploymentTestCase.
@@ -72,7 +73,7 @@
       AbstractKernelDeployment deployment = unmarshalDeployment("DeploymentWithClassLoader.xml");
       assertEquals("SimpleDeployment", deployment.getName());
       assertNotNull(deployment.getClassLoader());
-      assertEmpty(deployment.getBeans());
+      assertNull(deployment.getBeans());
    }
 
    public void testDeploymentWithBean() throws Exception




More information about the jboss-cvs-commits mailing list