[jboss-cvs] JBossAS SVN: r63822 - in projects/microcontainer/trunk/kernel/src: main/org/jboss/beans/metadata/spi and 7 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Jul 4 10:52:03 EDT 2007
Author: alesj
Date: 2007-07-04 10:52:02 -0400 (Wed, 04 Jul 2007)
New Revision: 63822
Added:
projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/xml/test/PropertyWithPreInstantiate.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testArrayUnmodifiable.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableCollectionPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableListPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableMapPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableSetPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/UnmodifiableGetterBean.java
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/AbstractListMetaData.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/AbstractPropertiesMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSetMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/PropertyMetaData.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/PropertyHandler.java
projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_1_0.xsd
projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomListPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomMapPreInstantiated.xml
projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomSetPreInstantiated.xml
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/CollectionXMLTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListXMLTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapXMLTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetXMLTestCase.java
projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/PropertyTestCase.java
Log:
Changed behavior on preinstantiated collections.
1) AbstractTypeMetaData.getClassInfo(ClassInfo);
2) preinstantiated
3) TypeInfo in getValue() parameters
4) Default collection type
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 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractArrayMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -26,7 +26,6 @@
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.TypeInfo;
-import org.jboss.util.JBossStringBuilder;
/**
* Array metadata.
@@ -45,9 +44,10 @@
{
}
+ @SuppressWarnings("unchecked")
public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
{
- Collection<? extends Object> result = (Collection<? extends Object>) super.getValue(info, cl);
+ Collection result = (Collection)super.getValue(info, cl);
TypeInfo typeInfo = getClassInfo(cl);
@@ -77,32 +77,32 @@
typeInfo = info;
}
- Object[] array = new Object[result.size()];
- if (typeInfo != null)
- array = typeInfo.newArrayInstance(result.size());
-
+ Object[] array = typeInfo.newArrayInstance(result.size());
return result.toArray(array);
}
- protected Collection<Object> getCollectionInstance(TypeInfo info, ClassLoader cl, Class expected) throws Throwable
+ protected <T> T getTypeInstance(TypeInfo info, ClassLoader cl, Class<T> expected) throws Throwable
{
Collection<Object> result = new ArrayList<Object>();
- Object preinstantiatedObject = preinstantiatedLookup(cl, null);
+ Object preinstantiatedObject = preinstantiatedLookup(cl, Object[].class);
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;
+ return expected.cast(result);
}
- public void toString(JBossStringBuilder buffer)
+ protected <T> T checkResult(Object result, Class<T> expected)
{
- super.toString(buffer);
+ if (result != null)
+ {
+ if (result.getClass().isArray() == false)
+ throw new ClassCastException("Preinstantiated property is not an array: " + propertyName);
+ }
+ return expected.cast(result);
}
}
\ No newline at end of file
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 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractCollectionMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -26,11 +26,9 @@
import java.util.Collection;
import java.util.Iterator;
-import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.beans.metadata.spi.MetaDataVisitor;
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.joinpoint.spi.Joinpoint;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.TypeInfo;
import org.jboss.util.JBossObject;
@@ -80,14 +78,12 @@
this.elementType = elementType;
}
+ @SuppressWarnings("unchecked")
public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
{
- Collection<Object> result = getCollectionInstance(info, cl, Collection.class);
- if (result == null)
- result = getDefaultCollectionInstance();
+ Collection result = getTypeInstance(info, cl, Collection.class);
TypeInfo elementTypeInfo = getElementClassInfo(cl);
-
for (int i = 0; i < collection.size(); ++i)
{
ValueMetaData vmd = (ValueMetaData) collection.get(i);
@@ -186,64 +182,13 @@
* Create the default collection instance
*
* @return the class instance
- * @throws Throwable for any error
*/
- protected Collection<Object> getDefaultCollectionInstance() throws Throwable
+ protected Object getDefaultInstance()
{
return new ArrayList<Object>();
}
/**
- * Create the collection instance
- *
- * @param info the request type
- * @param cl the classloader
- * @param expected the expected class
- * @return the class instance
- * @throws Throwable for any error
- */
- @SuppressWarnings("unchecked")
- protected Collection<Object> getCollectionInstance(TypeInfo info, ClassLoader cl, Class<?> expected) throws Throwable
- {
- 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 && ((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;
- }
-
- 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());
- }
- return (Collection<Object>) result;
- }
-
- /**
* Get the class info for the element type
*
* @param cl the classloader
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractListMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractListMetaData.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractListMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -27,7 +27,6 @@
import java.util.ListIterator;
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
-import org.jboss.util.JBossStringBuilder;
/**
* List metadata.
@@ -69,7 +68,7 @@
public int lastIndexOf(Object o)
{
- return lastIndexOf(o);
+ return collection.lastIndexOf(o);
}
public ListIterator<MetaDataVisitorNode> listIterator()
@@ -89,16 +88,12 @@
public MetaDataVisitorNode set(int index, MetaDataVisitorNode element)
{
- return set(index, element);
+ return collection.set(index, element);
}
public List<MetaDataVisitorNode> subList(int fromIndex, int toIndex)
{
- return subList(fromIndex, toIndex);
+ return collection.subList(fromIndex, toIndex);
}
- public void toString(JBossStringBuilder buffer)
- {
- super.toString(buffer);
- }
}
\ No newline at end of file
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 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractMapMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -22,13 +22,16 @@
package org.jboss.beans.metadata.plugins;
import java.io.Serializable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
-import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.beans.metadata.spi.MetaDataVisitor;
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.joinpoint.spi.Joinpoint;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.TypeInfo;
@@ -99,16 +102,10 @@
this.valueType = valueType;
}
- protected Class<? extends Map> expectedMapClass()
- {
- return Map.class;
- }
-
+ @SuppressWarnings("unchecked")
public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
{
- Map<Object, Object> result = getMapInstance(info, cl, expectedMapClass());
- if (result == null)
- result = getDefaultMapInstance();
+ Map result = getTypeInstance(info, cl, getExpectedClass());
TypeInfo keyTypeInfo = getKeyClassInfo(cl);
TypeInfo valueTypeInfo = getValueClassInfo(cl);
@@ -224,61 +221,15 @@
* Create the default map instance
*
* @return the class instance
- * @throws Throwable for any error
*/
- protected Map<Object, Object> getDefaultMapInstance() throws Throwable
+ protected Object getDefaultInstance()
{
return new HashMap<Object, Object>();
}
- /**
- * Create the map instance
- *
- * @param info the request type
- * @param cl the classloader
- * @param expected the expected class
- * @return the class instance
- * @throws Throwable for any error
- */
- @SuppressWarnings("unchecked")
- protected Map<Object, Object> getMapInstance(TypeInfo info, ClassLoader cl, Class<?> expected) throws Throwable
+ protected Class<? extends Map> getExpectedClass()
{
- 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 && ((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;
- }
-
- 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());
- }
- return (Map<Object, Object>) result;
+ return Map.class;
}
/**
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertiesMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertiesMetaData.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertiesMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -33,12 +33,12 @@
{
private static final long serialVersionUID = 1L;
- protected Map<Object, Object> getDefaultMapInstance() throws Throwable
+ protected Object getDefaultInstance()
{
return new Properties();
}
- protected Class<? extends Map> expectedMapClass()
+ protected Class<? extends Map> getExpectedClass()
{
return Properties.class;
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractPropertyMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -45,11 +45,14 @@
public class AbstractPropertyMetaData extends AbstractFeatureMetaData
implements PropertyMetaData, ValueMetaDataAware, TypeProvider, Serializable
{
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 2L;
/** The property name */
protected String name;
+ /** The preinstantiate */
+ protected boolean preInstantiate = true;
+
/** The property value */
protected ValueMetaData value;
@@ -136,6 +139,16 @@
return null;
}
+ public boolean isPreInstantiate()
+ {
+ return preInstantiate;
+ }
+
+ public void setPreInstantiate(boolean preInstantiate)
+ {
+ this.preInstantiate = preInstantiate;
+ }
+
public ValueMetaData getValue()
{
return value;
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSetMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSetMetaData.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractSetMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -27,7 +27,6 @@
import java.util.Set;
import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
-import org.jboss.util.JBossStringBuilder;
/**
* Set metadata.
@@ -71,13 +70,8 @@
return changed;
}
- public void toString(JBossStringBuilder buffer)
+ protected Object getDefaultInstance()
{
- super.toString(buffer);
- }
-
- protected Collection<Object> getDefaultCollectionInstance() throws Throwable
- {
return new HashSet<Object>();
}
}
\ No newline at end of file
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 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/AbstractTypeMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -38,12 +38,15 @@
import org.jboss.kernel.spi.config.KernelConfigurator;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.TypeInfo;
import org.jboss.util.JBossStringBuilder;
+import org.jboss.joinpoint.spi.Joinpoint;
/**
* A typed value.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
* @version $Revision$
*/
public abstract class AbstractTypeMetaData extends AbstractValueMetaData
@@ -116,7 +119,13 @@
visitor.initialVisit(this);
}
- private void preparePreinstantiatedLookup(MetaDataVisitor visitor)
+ /**
+ * Check if we can extract the information about
+ * existing instance - only on property metadata.
+ *
+ * @param visitor underlying visitor
+ */
+ protected void preparePreinstantiatedLookup(MetaDataVisitor visitor)
{
Stack<MetaDataVisitorNode> visitorNodes = visitor.visitorNodeStack();
// pop it so that we can get to grand parent for more info
@@ -126,12 +135,15 @@
if (parent instanceof PropertyMetaData)
{
PropertyMetaData pmd = (PropertyMetaData)parent;
- propertyName = pmd.getName();
- Object gp = visitorNodes.peek();
- if (gp instanceof BeanMetaData)
+ if (pmd.isPreInstantiate())
{
- BeanMetaData bmd = (BeanMetaData)gp;
- beanName = bmd.getName();
+ propertyName = pmd.getName();
+ Object gp = visitorNodes.peek();
+ if (gp instanceof BeanMetaData)
+ {
+ BeanMetaData bmd = (BeanMetaData)gp;
+ beanName = bmd.getName();
+ }
}
}
}
@@ -141,12 +153,19 @@
}
}
- @SuppressWarnings("unchecked")
- protected Object preinstantiatedLookup(ClassLoader cl, Class expected)
+ /**
+ * Check for already existing instances.
+ *
+ * @param <T> expected type
+ * @param cl the classloader
+ * @param expected the expected class
+ * @return existing instance or null otherwise
+ */
+ protected <T> T preinstantiatedLookup(ClassLoader cl, Class<T> expected)
{
- Object result = null;
if (propertyName != null && beanName != null)
{
+ Object result = null;
try
{
Controller controller = context.getController();
@@ -169,13 +188,112 @@
{
log.warn("Exception in preinstantiated lookup for: " + beanName + "." + propertyName + ", " + t);
}
- if (result != null && expected != null && expected.isAssignableFrom(result.getClass()) == false)
- throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
+ return checkResult(result, expected);
}
+ return null;
+ }
+
+ /**
+ * Check result for class compatibility.
+ *
+ * @param result the result
+ * @param expected expected class
+ * @return casted result
+ * @throws ClassCastException if result cannot be casted into expected parameter
+ */
+ protected <T> T checkResult(Object result, Class<T> expected)
+ {
+ if (result != null && expected.isAssignableFrom(result.getClass()) == false)
+ throw new ClassCastException(result.getClass() + " is not a " + expected.getName());
+ return expected.cast(result);
+ }
+
+ /**
+ * Create new instance from type field.
+ * Fall back to info parameter if no type field is set.
+ *
+ * @param <T> expected type
+ * @param info the type of reference we are about to set
+ * @param cl the classloader to use
+ * @param expected the expected class
+ * @param explicit is type explicit
+ * @return class instance or null if type is too broad
+ * @throws Throwable on any error
+ */
+ protected <T> T createInstance(TypeInfo info, ClassLoader cl, Class<T> expected, boolean explicit) throws Throwable
+ {
+ if (info == null || Object.class.getName().equals(info.getName()))
+ return null;
+
+ if (info instanceof ClassInfo == false)
+ {
+ if (explicit)
+ throw new IllegalArgumentException(info.getName() + " is not a class");
+ else
+ return null;
+ }
+
+ if (((ClassInfo) info).isInterface())
+ {
+ if (explicit)
+ throw new IllegalArgumentException(info.getName() + " is an interface");
+ else
+ return null;
+ }
+
+ BeanInfo beanInfo = configurator.getBeanInfo(info);
+ 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 expected.cast(result);
+ }
+
+ /**
+ * Create the class instance
+ *
+ * @param <T> expected type
+ * @param info the request type
+ * @param cl the classloader
+ * @param expected the expected class
+ * @return the class instance
+ * @throws Throwable for any error
+ */
+ protected <T> T getTypeInstance(TypeInfo info, ClassLoader cl, Class<T> expected) throws Throwable
+ {
+ T result = null;
+
+ TypeInfo typeInfo = getClassInfo(cl);
+ // we have explicitly set type
+ if (typeInfo != null)
+ result = createInstance(typeInfo, cl, expected, true);
+
+ if (result == null)
+ {
+ result = preinstantiatedLookup(cl, expected);
+ // try info param
+ if (result == null)
+ {
+ result = createInstance(info, cl, expected, false);
+ // get default
+ if (result == null)
+ result = expected.cast(getDefaultInstance());
+ }
+ }
+
return result;
}
/**
+ * Get the default instance.
+ *
+ * @return the default instance
+ */
+ protected abstract Object getDefaultInstance();
+
+ /**
* Set the configurator
*
* @param configurator the configurator
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/plugins/StringValueMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -101,6 +101,11 @@
return typeInfo.convertValue(value, replace);
}
+ protected Object getDefaultInstance()
+ {
+ return null;
+ }
+
public Class getType(MetaDataVisitor visitor, MetaDataVisitorNode previous) throws Throwable
{
if (getType() != null)
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/PropertyMetaData.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/PropertyMetaData.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/beans/metadata/spi/PropertyMetaData.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -44,6 +44,13 @@
String getType();
/**
+ * Get the preinstantiate flag.
+ *
+ * @return the preinstantiate flag
+ */
+ boolean isPreInstantiate();
+
+ /**
* Get the value.
*
* @return the value.
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 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/BeanSchemaBinding.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -805,6 +805,8 @@
String localName = attrs.getLocalName(i);
if ("name".equals(localName))
property.setName(attrs.getValue(i));
+ else if ("preinstantiate".equals(localName))
+ property.setPreInstantiate(Boolean.parseBoolean(attrs.getValue(i)));
else if ("class".equals(localName) || "replace".equals(localName))
{
StringValueMetaData svmd;
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/PropertyHandler.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/PropertyHandler.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/deployment/xml/PropertyHandler.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -55,6 +55,8 @@
String localName = attrs.getLocalName(i);
if ("name".equals(localName))
property.setName(attrs.getValue(i));
+ else if ("preinstantiate".equals(localName))
+ property.setPreInstantiate(Boolean.parseBoolean(attrs.getValue(i)));
else if ("class".equals(localName) || "replace".equals(localName))
{
StringValueMetaData svmd;
Modified: projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_1_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_1_0.xsd 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_1_0.xsd 2007-07-04 14:52:02 UTC (rev 63822)
@@ -354,7 +354,9 @@
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
- <xsd:extension base="namedValueType"/>
+ <xsd:extension base="namedValueType">
+ <xsd:attribute name="preinstantiate" type="xsd:boolean" use="optional" default="true"/>
+ </xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Modified: projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/resources/main/schema/bean-deployer_2_0.xsd 2007-07-04 14:52:02 UTC (rev 63822)
@@ -537,7 +537,9 @@
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
- <xsd:extension base="namedValueType"/>
+ <xsd:extension base="namedValueType">
+ <xsd:attribute name="preinstantiate" type="xsd:boolean" use="optional" default="true"/>
+ </xsd:extension>
</xsd:complexContent>
</xsd:complexType>
Added: projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/xml/test/PropertyWithPreInstantiate.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/xml/test/PropertyWithPreInstantiate.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/org/jboss/test/kernel/deployment/xml/test/PropertyWithPreInstantiate.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<bean xmlns="urn:jboss:bean-deployer:2.0" class="Dummy">
+ <property name="PropertyName" preinstantiate="false">PlainValue</property>
+</bean>
Added: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testArrayUnmodifiable.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testArrayUnmodifiable.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testArrayUnmodifiable.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,15 @@
+<?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.UnmodifiableGetterBean">
+ <property name="array" preinstantiate="false">
+ <array elementClass="java.lang.String">
+ <value>string2</value>
+ <value>string2</value>
+ <value>string1</value>
+ </array>
+ </property>
+ </bean>
+</deployment>
Modified: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreInstantiated.xml 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomCollectionPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -8,7 +8,7 @@
<parameter class="java.lang.String">string1</parameter>
</constructor>
<property name="preInstantiatedCollection">
- <collection class="org.jboss.test.kernel.config.support.CustomCollection" elementClass="java.lang.String">
+ <collection elementClass="java.lang.String">
<value>string2</value>
<value>string2</value>
<value>string1</value>
Modified: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomListPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomListPreInstantiated.xml 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomListPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -8,7 +8,7 @@
<parameter class="java.lang.String">string1</parameter>
</constructor>
<property name="preInstantiatedList">
- <list class="org.jboss.test.kernel.config.support.CustomList" elementClass="java.lang.String">
+ <list elementClass="java.lang.String">
<value>string2</value>
<value>string2</value>
<value>string1</value>
Modified: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomMapPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomMapPreInstantiated.xml 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomMapPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -9,7 +9,7 @@
<parameter>string2</parameter>
</constructor>
<property name="preInstantiatedMap">
- <map class="org.jboss.test.kernel.config.support.CustomMap" keyClass="java.lang.String" valueClass="java.lang.String">
+ <map keyClass="java.lang.String" valueClass="java.lang.String">
<entry><key>string2</key><value>string1</value></entry>
</map>
</property>
Modified: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomSetPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomSetPreInstantiated.xml 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testCustomSetPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -8,7 +8,7 @@
<parameter class="java.lang.String">string1</parameter>
</constructor>
<property name="preInstantiatedSet">
- <set class="org.jboss.test.kernel.config.support.CustomSet" elementClass="java.lang.String">
+ <set elementClass="java.lang.String">
<value>string2</value>
<value>string2</value>
<value>string1</value>
Added: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableCollectionPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableCollectionPreInstantiated.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableCollectionPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="SimpleBean" class="org.jboss.test.kernel.config.support.UnmodifiableGetterBean">
+ <property name="collection" preinstantiate="false">
+ <collection elementClass="java.lang.String">
+ <value>string1</value>
+ <value>string2</value>
+ <value>string2</value>
+ <value>string1</value>
+ </collection>
+ </property>
+ </bean>
+</deployment>
Added: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableListPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableListPreInstantiated.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableListPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="SimpleBean" class="org.jboss.test.kernel.config.support.UnmodifiableGetterBean">
+ <property name="list" preinstantiate="false">
+ <list elementClass="java.lang.String">
+ <value>string1</value>
+ <value>string2</value>
+ <value>string2</value>
+ <value>string1</value>
+ </list>
+ </property>
+ </bean>
+</deployment>
Added: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableMapPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableMapPreInstantiated.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableMapPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="SimpleBean" class="org.jboss.test.kernel.config.support.UnmodifiableGetterBean">
+ <property name="map" preinstantiate="false">
+ <map keyClass="java.lang.String" valueClass="java.lang.String">
+ <entry><key>string1</key><value>string2</value></entry>
+ <entry><key>string2</key><value>string1</value></entry>
+ </map>
+ </property>
+ </bean>
+</deployment>
Added: projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableSetPreInstantiated.xml
===================================================================
--- projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableSetPreInstantiated.xml (rev 0)
+++ projects/microcontainer/trunk/kernel/src/resources/tests/xml-test/org/jboss/test/kernel/config/test/testUnmodifiableSetPreInstantiated.xml 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:jboss:bean-deployer:2.0 bean-deployer_2_0.xsd"
+ xmlns="urn:jboss:bean-deployer:2.0">
+ <bean name="SimpleBean" class="org.jboss.test.kernel.config.support.UnmodifiableGetterBean">
+ <property name="set" preinstantiate="false">
+ <set elementClass="java.lang.String">
+ <value>string1</value>
+ <value>string2</value>
+ <value>string2</value>
+ <value>string1</value>
+ </set>
+ </property>
+ </bean>
+</deployment>
Added: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/UnmodifiableGetterBean.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/UnmodifiableGetterBean.java (rev 0)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/support/UnmodifiableGetterBean.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -0,0 +1,94 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.kernel.config.support;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Collection;
+
+/**
+ * An unmodifiable getter bean.
+ *
+ * @author <a href="ales.justin at jboss.com">Ales Justin</a>
+ */
+ at SuppressWarnings("unchecked")
+public class UnmodifiableGetterBean implements Serializable
+{
+ private Collection collection = new CustomCollection(true);
+ private List list = new CustomList(true);
+ private Set set = new CustomSet(true);
+ private Map map = new CustomMap(true);
+ private String[] array = new String[]{"aa", "ab", "ac"};
+
+ public Collection getCollection()
+ {
+ return Collections.unmodifiableCollection(collection);
+ }
+
+ public void setCollection(Collection collection)
+ {
+ this.collection = collection;
+ }
+
+ public List getList()
+ {
+ return Collections.unmodifiableList(list);
+ }
+
+ public void setList(List list)
+ {
+ this.list = list;
+ }
+
+ public Set getSet()
+ {
+ return Collections.unmodifiableSet(set);
+ }
+
+ public void setSet(Set set)
+ {
+ this.set = set;
+ }
+
+ public Map getMap()
+ {
+ return Collections.unmodifiableMap(map);
+ }
+
+ public void setMap(Map map)
+ {
+ this.map = map;
+ }
+
+ public String[] getArray()
+ {
+ return array;
+ }
+
+ public void setArray(String[] array)
+ {
+ this.array = array;
+ }
+}
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 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
+import java.util.Iterator;
import org.jboss.beans.metadata.plugins.*;
import org.jboss.beans.metadata.spi.PropertyMetaData;
@@ -33,6 +34,7 @@
import org.jboss.test.kernel.config.support.CustomCollection;
import org.jboss.test.kernel.config.support.MyObject;
import org.jboss.test.kernel.config.support.SimpleBean;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
import junit.framework.Test;
@@ -288,6 +290,56 @@
return (SimpleBean) instantiate(controller, bmd);
}
+ public void testUnmodifiableCollectionPreInstantiated() throws Throwable
+ {
+ UnmodifiableGetterBean bean = unmodifiableCollectionPreInstantiated();
+ assertNotNull(bean);
+
+ Collection result = bean.getCollection();
+ assertNotNull("Should be a collection", result);
+
+ Collection<Object> expected = new ArrayList<Object>();
+ expected.add(string1);
+ expected.add(string2);
+ expected.add(string2);
+ expected.add(string1);
+
+ assertEquals(expected.size(), result.size());
+ Iterator i1 = expected.iterator();
+ Iterator i2 = result.iterator();
+ while(i1.hasNext() && i2.hasNext())
+ {
+ assertEquals(i1.next(), i2.next());
+ }
+ }
+
+ protected UnmodifiableGetterBean unmodifiableCollectionPreInstantiated() throws Throwable
+ {
+ Kernel kernel = bootstrap();
+ KernelController controller = kernel.getController();
+
+ AbstractBeanMetaData bmd = new AbstractBeanMetaData("test1", UnmodifiableGetterBean.class.getName());
+ HashSet<PropertyMetaData> properties = new HashSet<PropertyMetaData>();
+ bmd.setProperties(properties);
+
+ StringValueMetaData vmd1 = new StringValueMetaData(string1);
+ StringValueMetaData vmd2 = new StringValueMetaData(string2);
+ StringValueMetaData vmd3 = new StringValueMetaData(string1);
+
+ AbstractCollectionMetaData smd = new AbstractCollectionMetaData();
+ smd.setElementType("java.lang.String");
+ smd.add(vmd1);
+ smd.add(vmd2);
+ smd.add(vmd2); // tests duplicates
+ smd.add(vmd3); // tests duplicates
+
+ AbstractPropertyMetaData pmd = new AbstractPropertyMetaData("collection", smd);
+ pmd.setPreInstantiate(false);
+ properties.add(pmd);
+
+ return (UnmodifiableGetterBean) instantiate(controller, bmd);
+ }
+
public void testCollectionWithValueTypeOverride() throws Throwable
{
SimpleBean bean = collectionWithValueTypeOverride();
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionXMLTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionXMLTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/CollectionXMLTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -25,6 +25,7 @@
import org.jboss.test.kernel.config.support.SimpleBean;
import org.jboss.test.kernel.config.support.XMLUtil;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
/**
* Collection Test Case.
@@ -74,6 +75,12 @@
return (SimpleBean) util.getBean("SimpleBean");
}
+ protected UnmodifiableGetterBean unmodifiableCollectionPreInstantiated() throws Throwable
+ {
+ XMLUtil util = bootstrapXML(true);
+ return (UnmodifiableGetterBean) util.getBean("SimpleBean");
+ }
+
protected SimpleBean collectionWithValueTypeOverride() throws Throwable
{
XMLUtil util = bootstrapXML(true);
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -33,6 +33,7 @@
import org.jboss.test.kernel.config.support.CustomList;
import org.jboss.test.kernel.config.support.MyObject;
import org.jboss.test.kernel.config.support.SimpleBean;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
import junit.framework.Test;
@@ -288,6 +289,49 @@
return (SimpleBean) instantiate(controller, bmd);
}
+ public void testUnmodifiableListPreInstantiated() throws Throwable
+ {
+ UnmodifiableGetterBean bean = unmodifiableListPreInstantiated();
+ assertNotNull(bean);
+
+ List result = bean.getList();
+ assertNotNull("Should be a list", result);
+
+ ArrayList<Object> expected = new ArrayList<Object>();
+ expected.add(string1);
+ expected.add(string2);
+ expected.add(string2);
+ expected.add(string1);
+ assertEquals(expected, result);
+ }
+
+ protected UnmodifiableGetterBean unmodifiableListPreInstantiated() throws Throwable
+ {
+ Kernel kernel = bootstrap();
+ KernelController controller = kernel.getController();
+
+ AbstractBeanMetaData bmd = new AbstractBeanMetaData("test1", UnmodifiableGetterBean.class.getName());
+ HashSet<PropertyMetaData> properties = new HashSet<PropertyMetaData>();
+ bmd.setProperties(properties);
+
+ StringValueMetaData vmd1 = new StringValueMetaData(string1);
+ StringValueMetaData vmd2 = new StringValueMetaData(string2);
+ StringValueMetaData vmd3 = new StringValueMetaData(string1);
+
+ AbstractListMetaData smd = new AbstractListMetaData();
+ smd.setElementType("java.lang.String");
+ smd.add(vmd1);
+ smd.add(vmd2);
+ smd.add(vmd2); // tests duplicates
+ smd.add(vmd3); // tests duplicates
+
+ AbstractPropertyMetaData pmd1 = new AbstractPropertyMetaData("list", smd);
+ pmd1.setPreInstantiate(false);
+ properties.add(pmd1);
+
+ return (UnmodifiableGetterBean) instantiate(controller, bmd);
+ }
+
public void testListWithValueTypeOverride() throws Throwable
{
SimpleBean bean = listWithValueTypeOverride();
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListXMLTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListXMLTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/ListXMLTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -25,6 +25,7 @@
import org.jboss.test.kernel.config.support.SimpleBean;
import org.jboss.test.kernel.config.support.XMLUtil;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
/**
* List Test Case.
@@ -74,6 +75,12 @@
return (SimpleBean) util.getBean("SimpleBean");
}
+ protected UnmodifiableGetterBean unmodifiableListPreInstantiated() throws Throwable
+ {
+ XMLUtil util = bootstrapXML(true);
+ return (UnmodifiableGetterBean) util.getBean("SimpleBean");
+ }
+
protected SimpleBean listWithValueTypeOverride() throws Throwable
{
XMLUtil util = bootstrapXML(true);
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -33,6 +33,7 @@
import org.jboss.test.kernel.config.support.CustomMap;
import org.jboss.test.kernel.config.support.MyObject;
import org.jboss.test.kernel.config.support.SimpleBean;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
import junit.framework.Test;
@@ -279,6 +280,47 @@
return (SimpleBean) instantiate(controller, bmd);
}
+ public void testUnmodifiableMapPreInstantiated() throws Throwable
+ {
+ UnmodifiableGetterBean bean = unmodifiableMapPreInstantiated();
+ assertNotNull(bean);
+
+ Map result = bean.getMap();
+ assertNotNull("Should be a map", result);
+
+ Map<Object, Object> expected = new HashMap<Object, Object>();
+ expected.put(string1, string2);
+ expected.put(string2, string1);
+ assertEquals(expected, result);
+ }
+
+ protected UnmodifiableGetterBean unmodifiableMapPreInstantiated() throws Throwable
+ {
+ Kernel kernel = bootstrap();
+ KernelController controller = kernel.getController();
+
+ AbstractBeanMetaData bmd = new AbstractBeanMetaData("test1", UnmodifiableGetterBean.class.getName());
+ HashSet<PropertyMetaData> properties = new HashSet<PropertyMetaData>();
+ bmd.setProperties(properties);
+
+ StringValueMetaData kmd1 = new StringValueMetaData(string1);
+ StringValueMetaData kmd2 = new StringValueMetaData(string2);
+ StringValueMetaData vmd1 = new StringValueMetaData(string2);
+ StringValueMetaData vmd2 = new StringValueMetaData(string1);
+
+ AbstractMapMetaData smd = new AbstractMapMetaData();
+ smd.setKeyType("java.lang.String");
+ smd.setValueType("java.lang.String");
+ smd.put(kmd1, vmd1);
+ smd.put(kmd2, vmd2);
+
+ AbstractPropertyMetaData pmd = new AbstractPropertyMetaData("map", smd);
+ pmd.setPreInstantiate(false);
+ properties.add(pmd);
+
+ return (UnmodifiableGetterBean) instantiate(controller, bmd);
+ }
+
public void testMapWithKeyTypeOverride() throws Throwable
{
SimpleBean bean = mapWithKeyTypeOverride();
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapXMLTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapXMLTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/MapXMLTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -25,6 +25,7 @@
import org.jboss.test.kernel.config.support.SimpleBean;
import org.jboss.test.kernel.config.support.XMLUtil;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
/**
* Map Test Case.
@@ -74,6 +75,12 @@
return (SimpleBean) util.getBean("SimpleBean");
}
+ protected UnmodifiableGetterBean unmodifiableMapPreInstantiated() throws Throwable
+ {
+ XMLUtil util = bootstrapXML(true);
+ return (UnmodifiableGetterBean) util.getBean("SimpleBean");
+ }
+
protected SimpleBean mapWithKeyTypeOverride() throws Throwable
{
XMLUtil util = bootstrapXML(true);
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -32,6 +32,7 @@
import org.jboss.test.kernel.config.support.CustomSet;
import org.jboss.test.kernel.config.support.MyObject;
import org.jboss.test.kernel.config.support.SimpleBean;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
import junit.framework.Test;
@@ -287,6 +288,49 @@
return (SimpleBean) instantiate(controller, bmd);
}
+ public void testUnmodifiableSetPreInstantiated() throws Throwable
+ {
+ UnmodifiableGetterBean bean = unmodifiableSetPreInstantiated();
+ assertNotNull(bean);
+
+ Set result = bean.getSet();
+ assertNotNull("Should be a set", result);
+
+ HashSet<Object> expected = new HashSet<Object>();
+ expected.add(string1);
+ expected.add(string2);
+ expected.add(string2);
+ expected.add(string1);
+ assertEquals(expected, result);
+ }
+
+ protected UnmodifiableGetterBean unmodifiableSetPreInstantiated() throws Throwable
+ {
+ Kernel kernel = bootstrap();
+ KernelController controller = kernel.getController();
+
+ AbstractBeanMetaData bmd = new AbstractBeanMetaData("test1", UnmodifiableGetterBean.class.getName());
+ HashSet<PropertyMetaData> properties = new HashSet<PropertyMetaData>();
+ bmd.setProperties(properties);
+
+ StringValueMetaData vmd1 = new StringValueMetaData(string1);
+ StringValueMetaData vmd2 = new StringValueMetaData(string2);
+ StringValueMetaData vmd3 = new StringValueMetaData(string1);
+
+ AbstractSetMetaData smd = new AbstractSetMetaData();
+ smd.setElementType("java.lang.String");
+ smd.add(vmd1);
+ smd.add(vmd2);
+ smd.add(vmd2); // tests duplicates
+ smd.add(vmd3); // tests duplicates
+
+ AbstractPropertyMetaData pmd = new AbstractPropertyMetaData("set", smd);
+ pmd.setPreInstantiate(false);
+ properties.add(pmd);
+
+ return (UnmodifiableGetterBean) instantiate(controller, bmd);
+ }
+
public void testSetWithValueTypeOverride() throws Throwable
{
SimpleBean bean = setWithValueTypeOverride();
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetXMLTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetXMLTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/config/test/SetXMLTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -25,6 +25,7 @@
import org.jboss.test.kernel.config.support.SimpleBean;
import org.jboss.test.kernel.config.support.XMLUtil;
+import org.jboss.test.kernel.config.support.UnmodifiableGetterBean;
/**
* Set Test Case.
@@ -74,6 +75,12 @@
return (SimpleBean) util.getBean("SimpleBean");
}
+ protected UnmodifiableGetterBean unmodifiableSetPreInstantiated() throws Throwable
+ {
+ XMLUtil util = bootstrapXML(true);
+ return (UnmodifiableGetterBean) util.getBean("SimpleBean");
+ }
+
protected SimpleBean setWithValueTypeOverride() throws Throwable
{
XMLUtil util = bootstrapXML(true);
Modified: projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/PropertyTestCase.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/PropertyTestCase.java 2007-07-04 13:56:31 UTC (rev 63821)
+++ projects/microcontainer/trunk/kernel/src/tests/org/jboss/test/kernel/deployment/xml/test/PropertyTestCase.java 2007-07-04 14:52:02 UTC (rev 63822)
@@ -111,6 +111,15 @@
assertPlainValue("PlainValue", property.getValue());
}
+ public void testPropertyWithPreInstantiate() throws Exception
+ {
+ PropertyMetaData property = getProperty("PropertyWithPreInstantiate.xml");
+ assertFalse("PreInstantiate should be false.", property.isPreInstantiate());
+ assertNotNull("PropertyName", property.getName());
+ assertNull(property.getAnnotations());
+ assertPlainValue("PlainValue", property.getValue());
+ }
+
public void testPropertyWithValue() throws Exception
{
PropertyMetaData property = getProperty("PropertyWithValue.xml");
More information about the jboss-cvs-commits
mailing list