[Jboss-cvs] JBossAS SVN: r56338 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/beans/metadata/plugins resources/xml-test/org/jboss/test/kernel/config/test tests/org/jboss/test/kernel/config/support tests/org/jboss/test/kernel/config/test
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Aug 28 09:29:03 EDT 2006
Author: alesj
Date: 2006-08-28 09:28:42 -0400 (Mon, 28 Aug 2006)
New Revision: 56338
Added:
projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreinstantiated.xml
Modified:
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/CustomCollection.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleBean.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionTestCase.java
Log:
JBMICROCONT-35
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -74,7 +74,7 @@
// Try to use the passed type
typeInfo = info;
}
-
+
Object[] array = new Object[result.size()];
if (typeInfo != null)
array = typeInfo.newArrayInstance(result.size());
@@ -84,7 +84,19 @@
protected Collection<Object> getCollectionInstance(TypeInfo info, ClassLoader cl, Class expected) throws Throwable
{
- return new ArrayList<Object>();
+ Collection<Object> result = new ArrayList<Object>();
+ Object preinstantiatedObject = preinstantiatedLookup(cl, null);
+ if (preinstantiatedObject != null)
+ {
+ if (preinstantiatedObject.getClass().isArray() == false)
+ throw new ClassCastException("Preinstantiated property is not an array: " + propertyName);
+ Object[] preinstantiatedArray = (Object[]) preinstantiatedObject;
+ for(Object previous : preinstantiatedArray)
+ {
+ result.add(previous);
+ }
+ }
+ return result;
}
public void toString(JBossStringBuilder buffer)
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -201,37 +201,41 @@
@SuppressWarnings("unchecked")
protected Collection<Object> getCollectionInstance(TypeInfo info, ClassLoader cl, Class<?> expected) throws Throwable
{
- TypeInfo typeInfo = getClassInfo(cl);
+ Object result = preinstantiatedLookup(cl, expected);
+ if (result == null)
+ {
+ TypeInfo typeInfo = getClassInfo(cl);
- if (typeInfo != null && typeInfo instanceof ClassInfo == false)
- throw new IllegalArgumentException(typeInfo.getName() + " is not a class");
+ if (typeInfo != null && typeInfo instanceof ClassInfo == false)
+ throw new IllegalArgumentException(typeInfo.getName() + " is not a class");
- if (typeInfo != null && ((ClassInfo) typeInfo).isInterface())
- throw new IllegalArgumentException(typeInfo.getName() + " is an interface");
+ if (typeInfo != null && ((ClassInfo) typeInfo).isInterface())
+ throw new IllegalArgumentException(typeInfo.getName() + " is an interface");
- if (typeInfo == null)
- {
- // No type specified
- if (info == null)
- return null;
- // Not a class
- if (info instanceof ClassInfo == false)
- return null;
- // Is an interface
- if (((ClassInfo) info).isInterface())
- return null;
- // Type is too general
- if (Object.class.getName().equals(info.getName()))
- return null;
- // Try to use the passed type
- typeInfo = info;
+ if (typeInfo == null)
+ {
+ // No type specified
+ if (info == null)
+ return null;
+ // Not a class
+ if (info instanceof ClassInfo == false)
+ return null;
+ // Is an interface
+ if (((ClassInfo) info).isInterface())
+ return null;
+ // Type is too general
+ if (Object.class.getName().equals(info.getName()))
+ return null;
+ // Try to use the passed type
+ typeInfo = info;
+ }
+
+ BeanInfo beanInfo = configurator.getBeanInfo(typeInfo);
+ Joinpoint constructor = configurator.getConstructorJoinPoint(beanInfo);
+ result = constructor.dispatch();
+ if (expected.isAssignableFrom(result.getClass()) == false)
+ throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
}
-
- BeanInfo beanInfo = configurator.getBeanInfo(typeInfo);
- Joinpoint constructor = configurator.getConstructorJoinPoint(beanInfo);
- Object result = constructor.dispatch();
- if (expected.isAssignableFrom(result.getClass()) == false)
- throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
return (Collection<Object>) result;
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -241,37 +241,41 @@
@SuppressWarnings("unchecked")
protected Map<Object, Object> getMapInstance(TypeInfo info, ClassLoader cl, Class<?> expected) throws Throwable
{
- TypeInfo typeInfo = getClassInfo(cl);
+ Object result = preinstantiatedLookup(cl, expected);
+ if (result == null)
+ {
+ TypeInfo typeInfo = getClassInfo(cl);
- if (typeInfo != null && typeInfo instanceof ClassInfo == false)
- throw new IllegalArgumentException(typeInfo.getName() + " is not a class");
+ if (typeInfo != null && typeInfo instanceof ClassInfo == false)
+ throw new IllegalArgumentException(typeInfo.getName() + " is not a class");
- if (typeInfo != null && ((ClassInfo) typeInfo).isInterface())
- throw new IllegalArgumentException(typeInfo.getName() + " is an interface");
+ if (typeInfo != null && ((ClassInfo) typeInfo).isInterface())
+ throw new IllegalArgumentException(typeInfo.getName() + " is an interface");
- if (typeInfo == null)
- {
- // No type specified
- if (info == null)
- return null;
- // Not a class
- if (info instanceof ClassInfo == false)
- return null;
- // Not an interface
- if (((ClassInfo) info).isInterface())
- return null;
- // Type is too general
- if (Object.class.getName().equals(info.getName()))
- return null;
- // Try to use the passed type
- typeInfo = info;
+ if (typeInfo == null)
+ {
+ // No type specified
+ if (info == null)
+ return null;
+ // Not a class
+ if (info instanceof ClassInfo == false)
+ return null;
+ // Not an interface
+ if (((ClassInfo) info).isInterface())
+ return null;
+ // Type is too general
+ if (Object.class.getName().equals(info.getName()))
+ return null;
+ // Try to use the passed type
+ typeInfo = info;
+ }
+
+ BeanInfo beanInfo = configurator.getBeanInfo(typeInfo);
+ Joinpoint constructor = configurator.getConstructorJoinPoint(beanInfo);
+ result = constructor.dispatch();
+ if (expected.isAssignableFrom(result.getClass()) == false)
+ throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
}
-
- BeanInfo beanInfo = configurator.getBeanInfo(typeInfo);
- Joinpoint constructor = configurator.getConstructorJoinPoint(beanInfo);
- Object result = constructor.dispatch();
- if (expected.isAssignableFrom(result.getClass()) == false)
- throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
return (Map<Object, Object>) result;
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -21,10 +21,15 @@
*/
package org.jboss.beans.metadata.plugins;
+import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.beans.metadata.spi.PropertyMetaData;
+import org.jboss.dependency.spi.ControllerState;
+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.KernelController;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.kernel.plugins.config.Configurator;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.util.JBossStringBuilder;
@@ -38,9 +43,19 @@
{
/** The type */
protected String type;
-
+
/** The configurator */
+ protected KernelController controller;
+
+ /** The configurator */
protected KernelConfigurator configurator;
+
+ /** The property name */
+ protected String propertyName;
+
+ /** The bean name */
+ protected String beanName;
+
/**
* Create a new typed value
*/
@@ -75,10 +90,57 @@
public void initialVisit(MetaDataVisitor visitor)
{
+ controller = (KernelController) visitor.getControllerContext().getController();
configurator = visitor.getControllerContext().getKernel().getConfigurator();
+ preparePreinstantiatedLookup(visitor);
visitor.initialVisit(this);
}
+ private void preparePreinstantiatedLookup(MetaDataVisitor visitor)
+ {
+ Object parent = visitor.visitorNodeStack().pop();
+ try
+ {
+ if (parent instanceof PropertyMetaData)
+ {
+ PropertyMetaData pmd = (PropertyMetaData) parent;
+ propertyName = pmd.getName();
+ Object gp = visitor.visitorNodeStack().peek();
+ if (gp instanceof BeanMetaData)
+ {
+ BeanMetaData bmd = (BeanMetaData) gp;
+ beanName = bmd.getName();
+ }
+ }
+ }
+ finally
+ {
+ visitor.visitorNodeStack().push(parent);
+ }
+ }
+
+ protected Object preinstantiatedLookup(ClassLoader cl, Class expected)
+ {
+ try
+ {
+ if (propertyName != null && beanName != null)
+ {
+ KernelControllerContext context = (KernelControllerContext) controller.getContext(beanName, ControllerState.INSTANTIATED);
+ TargettedJoinpoint joinpoint = configurator.getPropertyGetterJoinPoint(context.getBeanInfo(), propertyName);
+ joinpoint.setTarget(context.getTarget());
+ Object result = joinpoint.dispatch();
+ if (result != null && expected != null && expected.isAssignableFrom(result.getClass()) == false)
+ throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
+ return result;
+ }
+ }
+ catch (Throwable t)
+ {
+ log.warn("Exception in preinstantiated lookup: " + t, t);
+ }
+ return null;
+ }
+
/**
* Set the configurator
*
@@ -88,14 +150,14 @@
{
this.configurator = configurator;
}
-
+
public void toString(JBossStringBuilder buffer)
{
super.toString(buffer);
if (type != null)
buffer.append(" type=").append(type);
}
-
+
/**
* Get the class info for this type
*
Added: projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreinstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreinstantiated.xml 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/resources/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreinstantiated.xml 2006-08-28 13:28:42 UTC (rev 56338)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+ xmlns="urn:jboss:bean-deployer">
+ <bean name="SimpleBean" class="org.jboss.test.kernel.config.support.SimpleBean">
+ <constructor>
+ <parameter>string1</parameter>
+ </constructor>
+ <property name="preInstantiatedCollection">
+ <collection class="org.jboss.test.kernel.config.support.CustomCollection" elementClass="java.lang.String">
+ <value>string2</value>
+ <value>string2</value>
+ <value>string1</value>
+ </collection>
+ </property>
+ </bean>
+</deployment>
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/CustomCollection.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/CustomCollection.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/CustomCollection.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -39,11 +39,12 @@
public CustomCollection()
{
+ this.preInstantiated = true;
}
public CustomCollection(boolean preInstantiated)
{
- this.preInstantiated = true;
+ this.preInstantiated = preInstantiated;
}
public boolean getPreInstantiated()
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleBean.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleBean.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/SimpleBean.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -158,6 +158,7 @@
{
constructorUsed = string;
aString = string;
+ preInstantiatedCollection.add(string);
}
public SimpleBean(Integer integer)
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionTestCase.java 2006-08-28 12:39:10 UTC (rev 56337)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionTestCase.java 2006-08-28 13:28:42 UTC (rev 56338)
@@ -25,13 +25,7 @@
import java.util.Collection;
import java.util.HashSet;
-import junit.framework.Test;
-
-import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
-import org.jboss.beans.metadata.plugins.AbstractCollectionMetaData;
-import org.jboss.beans.metadata.plugins.AbstractPropertyMetaData;
-import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
-import org.jboss.beans.metadata.plugins.StringValueMetaData;
+import org.jboss.beans.metadata.plugins.*;
import org.jboss.beans.metadata.spi.PropertyMetaData;
import org.jboss.kernel.Kernel;
import org.jboss.kernel.spi.config.KernelConfigurator;
@@ -39,6 +33,8 @@
import org.jboss.test.kernel.config.support.MyObject;
import org.jboss.test.kernel.config.support.SimpleBean;
+import junit.framework.Test;
+
/**
* Collection Test Case.
*
@@ -240,7 +236,7 @@
/*
* @todo - allow retrieval of collection instance from the bean
*/
- public void TODOtestCustomCollectionPreInstantiated() throws Throwable
+ public void testCustomCollectionPreInstantiated() throws Throwable
{
SimpleBean bean = customCollectionPreInstantiated();
assertNotNull(bean);
More information about the jboss-cvs-commits
mailing list