[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