[jboss-cvs] JBossAS SVN: r80512 - in projects/jboss-man/trunk/managed: src/main/java/org/jboss/managed/api/annotation and 11 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Nov 4 13:39:17 EST 2008
Author: scott.stark at jboss.org
Date: 2008-11-04 13:39:17 -0500 (Tue, 04 Nov 2008)
New Revision: 80512
Added:
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/DefaultInstanceClassFactory.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClass.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClassAndExplicit.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/SimpleUnannotated.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/LocalDSInstanceClassFactory.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/NoTxICF.java
Modified:
projects/jboss-man/trunk/managed/.classpath
projects/jboss-man/trunk/managed/pom.xml
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementObject.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementProperties.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/factory/ManagedObjectFactory.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/WritethroughManagedPropertyImpl.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractInstanceClassFactory.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectFactory.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectPopulator.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/Utility.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/InstanceClassFactory.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectBuilder.java
projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectPopulator.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/AbstractManagedObjectFactoryTest.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/ManagementObjectWithRuntimeRefICF.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestICF.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestMOP.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestSimpleICF.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/beans/BeanMetaDataICF.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestinationICF.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/SecDomainICF.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java
projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectPropertiesUnitTestCase.java
Log:
JBMAN-32, update managed object factory related interfaces to accept a MetaData repository
Modified: projects/jboss-man/trunk/managed/.classpath
===================================================================
--- projects/jboss-man/trunk/managed/.classpath 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/.classpath 2008-11-04 18:39:17 UTC (rev 80512)
@@ -18,5 +18,7 @@
<classpathentry kind="var" path="M2_REPO/junit/junit/4.4/junit-4.4.jar" sourcepath="M2_REPO/junit/junit/4.4/junit-4.4-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.GA/jboss-mdr-2.0.0.GA.jar" sourcepath="/M2_REPO/org/jboss/jboss-mdr/2.0.0.GA/jboss-mdr-2.0.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="/M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Modified: projects/jboss-man/trunk/managed/pom.xml
===================================================================
--- projects/jboss-man/trunk/managed/pom.xml 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/pom.xml 2008-11-04 18:39:17 UTC (rev 80512)
@@ -33,6 +33,10 @@
<groupId>org.jboss.man</groupId>
<artifactId>jboss-metatype</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.jboss</groupId>
+ <artifactId>jboss-mdr</artifactId>
+ </dependency>
<!-- Test dependencies -->
<dependency>
<groupId>sun-jaxb</groupId>
@@ -53,5 +57,10 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>javassist</groupId>
+ <artifactId>javassist</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementObject.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementObject.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementObject.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -75,9 +75,17 @@
/** What properties to include */
ManagementProperties properties() default ManagementProperties.ALL;
- /** The exposed operations. If empty
- * TODO:
+ /**
+ * A class level specification of the management properties. Depending on the
+ * properties() value, this can either override or augment the ManagementProperty
+ * annotations found on the bean fields/methods.
+ * @return
*/
+ ManagementProperty[] classProperties() default {};
+
+ /** The exposed operations. If empty the operations will be obtained from
+ * the annotated bean in a bean type specific way.
+ */
ManagementOperation[] operations() default {};
/** The class to use for the ManagedProperty implementation */
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementProperties.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementProperties.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementProperties.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -25,13 +25,22 @@
* ManagementProperities.
*
* @author <a href="adrian at jboss.com">Adrian Brock</a>
- * @version $Revision: 1.1 $
+ * @author Scott.Stark at jboss.org
+ * @version $Revision$
*/
public enum ManagementProperties
{
/** All properties by default */
ALL,
- /** Only annotated properties */
+ /** Only bean properties annotated with @ManagementProperty */
EXPLICIT,
+
+ /** Only @ManagementProperty from the @ManagementObject class annotation */
+ CLASS,
+
+ /** Merge @ManagementProperty from the @ManagementObject class annotation
+ * and any bean properties annotated with @ManagementProperty
+ */
+ CLASS_AND_EXPLICIT
}
Property changes on: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/annotation/ManagementProperties.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/factory/ManagedObjectFactory.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/factory/ManagedObjectFactory.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/api/factory/ManagedObjectFactory.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -21,13 +21,12 @@
*/
package org.jboss.managed.api.factory;
-import java.io.Serializable;
-
import org.jboss.managed.api.ManagedObject;
import org.jboss.managed.api.annotation.ManagementObjectID;
import org.jboss.managed.plugins.factory.ManagedObjectFactoryBuilder;
import org.jboss.managed.spi.factory.InstanceClassFactory;
import org.jboss.managed.spi.factory.ManagedObjectBuilder;
+import org.jboss.metadata.spi.MetaData;
/**
* ManagedObjectFactory.
@@ -64,14 +63,28 @@
* @return the managed object
* @throws IllegalArgumentException for a null object
*/
- public abstract ManagedObject initManagedObject(Object instance, String name, String nameType);
- public abstract ManagedObject initManagedObject(Serializable instance, String name, String nameType);
+ public ManagedObject initManagedObject(Object instance, String name, String nameType)
+ {
+ return initManagedObject(instance, null, name, nameType);
+ }
+ public ManagedObject initManagedObject(Object instance, Class<?> instanceType,
+ String name, String nameType)
+ {
+ return initManagedObject(instance, null, null, name, nameType);
+ }
+ public ManagedObject initManagedObject(Object instance, MetaData metaData)
+ {
+ return initManagedObject(instance, null, metaData, null, null);
+ }
/**
* Create a managed object from the given object
*
* @param instance - the object to build the ManagedObject from
- * @param instanceType - the type to determine InstanceClassFactory registration from
+ * @param instanceType - the optional type to determine InstanceClassFactory registration from.
+ * If not specified instance.getClass() is used.
+ * @param metaData - the optional metadata repository accessor used to query
+ * for management annotation overrides/additions to the clazz
* @param name - the name of the managed object. If null, the name will
* be derived from the object annotations or attachment name.
* @param nameType - the name of the managed object. If null, the name will
@@ -82,7 +95,7 @@
* @return the managed object
*/
public abstract ManagedObject initManagedObject(Object instance, Class<?> instanceType,
- String name, String nameType);
+ MetaData metaData, String name, String nameType);
/**
* Create a shell managed object from the given class
@@ -92,7 +105,11 @@
* @return the managed object
* @throws IllegalArgumentException for a null class
*/
- public abstract <T> ManagedObject createManagedObject(Class<T> clazz);
+ public <T> ManagedObject createManagedObject(Class<T> clazz)
+ {
+ return createManagedObject(clazz, null);
+ }
+ public abstract <T> ManagedObject createManagedObject(Class<T> clazz, MetaData metaData);
/**
* Set a managed object builder
@@ -111,6 +128,22 @@
* management annotations.
*/
public abstract <X> void setInstanceClassFactory(Class<X> clazz, InstanceClassFactory<X> factory);
+ /**
+ * Add an InstanceClassFactory. Calls setInstanceClassFactory(factory.getType(), factory);.
+ * @param factory - the factory used to obtain the class to scan for
+ */
+ public <X> void addInstanceClassFactory(InstanceClassFactory<X> factory)
+ {
+ setInstanceClassFactory(factory.getType(), factory);
+ }
+ /**
+ * Remove an InstanceClassFactory. Calls setInstanceClassFactory(factory.getType(), null);.
+ * @param factory
+ */
+ public <X> void removeInstanceClassFactory(InstanceClassFactory<X> factory)
+ {
+ setInstanceClassFactory(factory.getType(), null);
+ }
/**
* Get the InstanceClassFactory for an instance type.
@@ -120,5 +153,9 @@
* @return the factory used to obtain the class to scan for
* management annotations.
*/
- public abstract <T> InstanceClassFactory<T> getInstanceClassFactory(Class<T> clazz);
+ public <T> InstanceClassFactory<T> getInstanceClassFactory(Class<T> clazz)
+ {
+ return getInstanceClassFactory(clazz, null);
+ }
+ public abstract <T> InstanceClassFactory<T> getInstanceClassFactory(Class<T> clazz, MetaData metaData);
}
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/WritethroughManagedPropertyImpl.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/WritethroughManagedPropertyImpl.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/WritethroughManagedPropertyImpl.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -104,7 +104,8 @@
else
metaValue = (MetaValue)value;
- InstanceClassFactory icf = getObjectFactory().getInstanceClassFactory(attachment.getClass());
+ ManagedObjectFactory mof = getObjectFactory();
+ InstanceClassFactory icf = mof.getInstanceClassFactory(attachment.getClass(), null);
BeanInfo beanInfo = propertyInfo.getBeanInfo();
icf.setValue(beanInfo, this, attachment, metaValue);
}
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractInstanceClassFactory.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractInstanceClassFactory.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractInstanceClassFactory.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -41,6 +41,7 @@
import org.jboss.managed.api.factory.ManagedObjectFactory;
import org.jboss.managed.spi.factory.InstanceClassFactory;
import org.jboss.managed.spi.factory.RuntimeComponentNameTransformer;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.types.ArrayMetaType;
import org.jboss.metatype.api.types.CollectionMetaType;
import org.jboss.metatype.api.types.MetaType;
@@ -65,7 +66,7 @@
* @author Scott.Stark at jboss.org
* @version $Revision$
*/
-public class AbstractInstanceClassFactory<T>
+public abstract class AbstractInstanceClassFactory<T>
implements InstanceClassFactory<T>
{
/** The configuration */
@@ -187,7 +188,8 @@
return null;
}
- public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, T object)
+ public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property,
+ MetaData metaData, T object)
{
String name = getPropertyName(property);
PropertyInfo propertyInfo = beanInfo.getProperty(name);
@@ -216,7 +218,7 @@
MetaType propertyType = property.getMetaType();
if (AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE == propertyType)
{
- GenericValue gvs = getManagedObjectValue(beanInfo, property, value);
+ GenericValue gvs = getManagedObjectValue(beanInfo, property, metaData, value);
return gvs;
}
else if (propertyType.isArray())
@@ -226,7 +228,7 @@
{
ArrayMetaType moType = new ArrayMetaType(1, AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE);
ArrayValueSupport moArrayValue = new ArrayValueSupport(moType);
- List<GenericValue> tmp = getManagedObjectArray(beanInfo, property, value);
+ List<GenericValue> tmp = getManagedObjectArray(beanInfo, property, metaData, value);
GenericValue[] mos = new GenericValue[tmp.size()];
moArrayValue.setValue(tmp.toArray(mos));
return moArrayValue;
@@ -237,7 +239,7 @@
CollectionMetaType collectionType = CollectionMetaType.class.cast(propertyType);
if (AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE == collectionType.getElementType())
{
- List<GenericValue> tmp = getManagedObjectArray(beanInfo, property, value);
+ List<GenericValue> tmp = getManagedObjectArray(beanInfo, property, metaData, value);
GenericValue[] mos = new GenericValue[tmp.size()];
CollectionMetaType moType = new CollectionMetaType(propertyType.getClassName(), AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE);
tmp.toArray(mos);
@@ -278,12 +280,19 @@
}
}
- public GenericValue getManagedObjectValue(ManagedProperty property, ManagedObject value)
+ public GenericValue getManagedObjectValue(ManagedProperty property,
+ ManagedObject value)
+ {
+ return getManagedObjectValue(null, property, null, value);
+ }
+ public GenericValue getManagedObjectValue(ManagedProperty property, MetaData metaData,
+ ManagedObject value)
{
- return getManagedObjectValue(null, property, value);
+ return getManagedObjectValue(null, property, metaData, value);
}
- protected GenericValue getManagedObjectValue(BeanInfo beanInfo, ManagedProperty property, Object value)
+ protected GenericValue getManagedObjectValue(BeanInfo beanInfo, ManagedProperty property,
+ MetaData metaData, Object value)
{
// Look for a ManagementObjectRef
ManagementObjectRef ref = (ManagementObjectRef) property.getAnnotations().get(ManagementObjectRef.class.getName());
@@ -293,7 +302,7 @@
if(value instanceof ManagedObject)
mo = ManagedObject.class.cast(value);
else
- mo = mof.initManagedObject(value, moName, moNameType);
+ mo = mof.initManagedObject(value, null, metaData, moName, moNameType);
ManagedObject parentMO = property.getManagedObject();
if(parentMO != null && mo instanceof MutableManagedObject)
{
@@ -302,13 +311,14 @@
}
return new GenericValueSupport(AbstractManagedObjectFactory.MANAGED_OBJECT_META_TYPE, mo);
}
- protected List<GenericValue> getManagedObjectArray(BeanInfo beanInfo, ManagedProperty property, Object value)
+ protected List<GenericValue> getManagedObjectArray(BeanInfo beanInfo, ManagedProperty property,
+ MetaData metaData, Object value)
{
Collection<?> cvalue = getAsCollection(value);
List<GenericValue> tmp = new ArrayList<GenericValue>();
for(Object element : cvalue)
{
- GenericValue gv = getManagedObjectValue(beanInfo, property, element);
+ GenericValue gv = getManagedObjectValue(beanInfo, property, metaData, element);
tmp.add(gv);
}
return tmp;
@@ -333,7 +343,7 @@
protected void setManagedObject(BeanInfo beanInfo, PropertyInfo propertyInfo,
T object, ManagedObject mo)
{
- throw new NotImplementedException("Use a custom InstanceClassFactory for now");
+ throw new NotImplementedException("Use a custom InstanceClassFactory, property="+propertyInfo);
}
/**
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectFactory.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectFactory.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectFactory.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -69,12 +69,14 @@
import org.jboss.managed.spi.factory.ManagedParameterConstraintsPopulatorFactory;
import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulator;
import org.jboss.managed.spi.factory.ManagedPropertyConstraintsPopulatorFactory;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.types.ArrayMetaType;
import org.jboss.metatype.api.types.CollectionMetaType;
import org.jboss.metatype.api.types.GenericMetaType;
import org.jboss.metatype.api.types.MetaType;
import org.jboss.metatype.api.types.MetaTypeFactory;
import org.jboss.metatype.api.values.MetaValueFactory;
+import org.jboss.reflect.spi.AnnotatedInfo;
import org.jboss.reflect.spi.ClassInfo;
import org.jboss.reflect.spi.MethodInfo;
import org.jboss.reflect.spi.ParameterInfo;
@@ -146,7 +148,7 @@
public AbstractManagedObjectFactory()
{
// Create an AbstractInstanceClassFactory as the default ICF
- AbstractInstanceClassFactory<Serializable> icf = new AbstractInstanceClassFactory<Serializable>();
+ DefaultInstanceClassFactory icf = new DefaultInstanceClassFactory();
icf.setMof(this);
defaultInstanceFactory = icf;
// Create an AbstractManagedObjectPopulator as the default
@@ -271,38 +273,31 @@
}
@Override
- public <T> ManagedObject createManagedObject(Class<T> clazz)
+ public <T> ManagedObject createManagedObject(Class<T> clazz, MetaData metaData)
{
if (clazz == null)
throw new IllegalArgumentException("Null class");
- ManagedObject result = createSkeletonManagedObject(clazz);
+ ManagedObject result = createSkeletonManagedObject(clazz, metaData);
ManagedObjectPopulator<T> populator = getPopulator(clazz);
- populator.createObject(result, clazz);
+ populator.createObject(result, clazz, metaData);
return result;
}
- @Override
- public ManagedObject initManagedObject(Serializable instance, String name, String nameType)
- {
- Object obj = instance;
- return initManagedObject(obj, name, nameType);
- }
- @Override
- @SuppressWarnings("unchecked")
- public ManagedObject initManagedObject(Object instance, String name, String nameType)
- {
- return initManagedObject(instance, instance.getClass(), name, nameType);
- }
public ManagedObject initManagedObject(Object instance, Class<?> instanceType,
- String name, String nameType)
+ MetaData metaData, String name, String nameType)
{
if (instance == null)
- throw new IllegalArgumentException("Null object");
+ throw new IllegalArgumentException("instance cannot be null");
Class<?> clazz = instance.getClass();
- InstanceClassFactory icf = getInstanceClassFactory(clazz);
+ InstanceClassFactory icf = defaultInstanceFactory;
+ if(instanceType != null && instanceType != clazz)
+ icf = getInstanceClassFactory(instanceType, metaData);
+ if(icf == defaultInstanceFactory)
+ icf = getInstanceClassFactory(clazz, metaData);
+
Class<Object> moClass;
try
{
@@ -310,9 +305,16 @@
}
catch(ClassNotFoundException e)
{
+ log.debug("Failed to load class for ManagedObject", e);
return null;
}
- ManagedObject result = createSkeletonManagedObject(moClass);
+ if(moClass == null)
+ {
+ log.debug("ICF returned null class: "+instance);
+ return null;
+ }
+
+ ManagedObject result = createSkeletonManagedObject(moClass, metaData);
if (result == null )
{
log.debug("Null ManagedObject created for: "+moClass);
@@ -322,7 +324,7 @@
{
MutableManagedObject mmo = (MutableManagedObject) result;
ManagedObjectPopulator<Object> populator = getPopulator(moClass);
- populator.populateManagedObject(mmo, instance);
+ populator.populateManagedObject(mmo, instance, metaData);
}
return result;
@@ -346,9 +348,15 @@
synchronized (instanceFactories)
{
if (factory == null)
+ {
instanceFactories.remove(clazz);
+ log.debug("Removed ICF for: "+clazz);
+ }
else
+ {
instanceFactories.put(clazz, factory);
+ log.debug("Set ICF for: "+clazz+", to: "+factory);
+ }
}
}
@@ -361,30 +369,32 @@
* marked as a ManagementObject.
* {@linkplain ManagementObject}
*/
- protected <T> ManagedObject createSkeletonManagedObject(Class<T> clazz)
+ protected <T> ManagedObject createSkeletonManagedObject(Class<T> clazz, MetaData metaData)
{
if (clazz == null)
throw new IllegalArgumentException("Null class");
ManagedObjectBuilder builder = getBuilder(clazz);
- return builder.buildManagedObject(clazz);
+ return builder.buildManagedObject(clazz, metaData);
}
/**
* The ManagedObjectBuilder.buildManagedObject implementation. This is based
* on the org.jboss.managed.api.annotation.* package annotations.
* @param clazz the attachment class
+ * @param metaData - the optional metadata repository accessor used to query
+ * for management annotation overrides/additions to the clazz
* @return the ManagementObject if clazz is properly annotated, null if
- * it does not have a ManagementObject annotation.
+ * it does not have a ManagementObject annotation on the class or metaData
*/
@SuppressWarnings("unchecked")
- public ManagedObject buildManagedObject(Class<?> clazz)
+ public ManagedObject buildManagedObject(Class<?> clazz, MetaData metaData)
{
boolean trace = log.isTraceEnabled();
BeanInfo beanInfo = configuration.getBeanInfo(clazz);
ClassInfo classInfo = beanInfo.getClassInfo();
- ManagementObject managementObject = classInfo.getUnderlyingAnnotation(ManagementObject.class);
+ ManagementObject managementObject = getAnnotation(ManagementObject.class, classInfo, metaData);
if( managementObject == null )
{
if (trace)
@@ -395,10 +405,10 @@
HashMap<String, Annotation> moAnnotations = new HashMap<String, Annotation>();
moAnnotations.put(ManagementObject.class.getName(), managementObject);
- ManagementDeployment mnagementDeployment = classInfo.getUnderlyingAnnotation(ManagementDeployment.class);
+ ManagementDeployment mnagementDeployment = getAnnotation(ManagementDeployment.class, classInfo, metaData);
if(mnagementDeployment != null)
moAnnotations.put(ManagementDeployment.class.getName(), mnagementDeployment);
- ManagementObjectID moID = classInfo.getUnderlyingAnnotation(ManagementObjectID.class);
+ ManagementObjectID moID = getAnnotation(ManagementObjectID.class, classInfo, metaData);
if (moID != null)
moAnnotations.put(ManagementObjectID.class.getName(), moID);
@@ -423,7 +433,9 @@
attachmentName = classInfo.getName();
// Check for a component specification
ManagementComponent mc = managementObject.componentType();
- if (mc.equals(AnnotationDefaults.COMP_TYPE) == false)
+ // Work around JBMDR-51 by checking type/subtype
+ // if (mc.equals(AnnotationDefaults.COMP_TYPE) == false)
+ if (mc.type().length() > 0 || mc.subtype().length() > 0)
moAnnotations.put(ManagementComponent.class.getName(), mc);
// ManagementObject level default factory classes
moFieldsFactory = managementObject.fieldsFactory();
@@ -438,8 +450,22 @@
}
ManagementProperties propertyType = ManagementProperties.ALL;
+ Set<String> classProperties = null;
if (managementObject != null)
+ {
propertyType = managementObject.properties();
+ if(propertyType == ManagementProperties.CLASS || propertyType == ManagementProperties.CLASS_AND_EXPLICIT)
+ {
+ classProperties = new HashSet<String>();
+ for(ManagementProperty mp : managementObject.classProperties())
+ {
+ if(mp.name().length() > 0)
+ classProperties.add(mp.name());
+ if(mp.mappedName().length() > 0)
+ classProperties.add(mp.mappedName());
+ }
+ }
+ }
// Build the ManagedProperties
Set<ManagedProperty> properties = new HashSet<ManagedProperty>();
@@ -453,10 +479,10 @@
if ("class".equals(propertyInfo.getName()))
continue;
- ManagementProperty managementProperty = propertyInfo.getUnderlyingAnnotation(ManagementProperty.class);
- ManagementObjectID id = propertyInfo.getUnderlyingAnnotation(ManagementObjectID.class);
- ManagementObjectRef ref = propertyInfo.getUnderlyingAnnotation(ManagementObjectRef.class);
- ManagementRuntimeRef runtimeRef = propertyInfo.getUnderlyingAnnotation(ManagementRuntimeRef.class);
+ ManagementProperty managementProperty = getAnnotation(ManagementProperty.class, propertyInfo, metaData);
+ ManagementObjectID id = getAnnotation(ManagementObjectID.class, propertyInfo, metaData);
+ ManagementObjectRef ref = getAnnotation(ManagementObjectRef.class, propertyInfo, metaData);
+ ManagementRuntimeRef runtimeRef = getAnnotation(ManagementRuntimeRef.class, propertyInfo, metaData);
HashMap<String, Annotation> propAnnotations = new HashMap<String, Annotation>();
if (managementProperty != null)
propAnnotations.put(ManagementProperty.class.getName(), managementProperty);
@@ -471,10 +497,30 @@
if (runtimeRef != null)
propAnnotations.put(ManagementRuntimeRef.class.getName(), runtimeRef);
- // Check for a simple property
- boolean includeProperty = (propertyType == ManagementProperties.ALL);
- if (managementProperty != null)
- includeProperty = (managementProperty.ignored() == false);
+ // Check whether this property should be included
+ boolean includeProperty = false;
+ switch(propertyType)
+ {
+ // Only if the property as a ManagementProperty
+ case EXPLICIT:
+ includeProperty = managementProperty != null &&
+ (managementProperty.ignored() == false);
+ break;
+ // Only if the property is listed in the classProperties
+ case CLASS:
+ includeProperty = classProperties.contains(propertyInfo.getName());
+ break;
+ // Only if the property is listed in the classProperties
+ case CLASS_AND_EXPLICIT:
+ includeProperty = classProperties.contains(propertyInfo.getName())
+ || (managementProperty != null && managementProperty.ignored() == false);
+ break;
+ // Any property that is not ignored
+ case ALL:
+ includeProperty = managementProperty == null
+ || managementProperty.ignored() == false;
+ break;
+ }
if (includeProperty)
{
@@ -612,7 +658,7 @@
{
for (MethodInfo methodInfo : methodInfos)
{
- ManagementOperation managementOp = methodInfo.getUnderlyingAnnotation(ManagementOperation.class);
+ ManagementOperation managementOp = getAnnotation(ManagementOperation.class, methodInfo, metaData);
if (managementOp == null)
continue;
@@ -757,11 +803,19 @@
* @return the InstanceClassFactory
*/
@SuppressWarnings("unchecked")
- public <X> InstanceClassFactory<X> getInstanceClassFactory(Class<X> clazz)
+ public <X> InstanceClassFactory<X> getInstanceClassFactory(Class<X> clazz,
+ MetaData metaData)
{
+ InstanceClassFactory defaultFactory = defaultInstanceFactory;
+ if(metaData != null)
+ {
+ InstanceClassFactory mdrFactory = metaData.getMetaData(InstanceClassFactory.class);
+ if(mdrFactory != null)
+ defaultFactory = mdrFactory;
+ }
InstanceClassFactory<X> factory = (InstanceClassFactory<X>)
Utility.getInstanceClassFactory(clazz, instanceFactories,
- defaultInstanceFactory);
+ defaultFactory);
return factory;
}
@@ -800,4 +854,19 @@
{
return createManagedProperty(factory, fields);
}
+
+ protected <X extends Annotation> X getAnnotation(Class<X> annotationType,
+ AnnotatedInfo info, MetaData metaData)
+ {
+ X annotation = null;
+ if(metaData != null)
+ {
+ annotation = metaData.getAnnotation(annotationType);
+ if(annotation != null)
+ log.trace("Loaded "+annotationType+" from MetaData");
+ }
+ if(annotation == null)
+ annotation = info.getUnderlyingAnnotation(annotationType);
+ return annotation;
+ }
}
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectPopulator.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectPopulator.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/AbstractManagedObjectPopulator.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -21,7 +21,6 @@
*/
package org.jboss.managed.plugins.factory;
-import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.util.Map;
@@ -34,9 +33,9 @@
import org.jboss.managed.api.MutableManagedObject;
import org.jboss.managed.api.annotation.ManagementObjectID;
import org.jboss.managed.api.annotation.ManagementRuntimeRef;
-import org.jboss.managed.plugins.ManagedObjectImpl;
import org.jboss.managed.spi.factory.InstanceClassFactory;
import org.jboss.managed.spi.factory.ManagedObjectPopulator;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.SimpleValue;
@@ -105,6 +104,10 @@
public void createObject(ManagedObject managedObject, Class<T> clazz)
{
+ createObject(managedObject, clazz, null);
+ }
+ public void createObject(ManagedObject managedObject, Class<T> clazz, MetaData metaData)
+ {
if (managedObject == null)
throw new IllegalArgumentException("Null managed object");
@@ -113,13 +116,18 @@
MutableManagedObject managedObjectImpl = (MutableManagedObject) managedObject;
T object = createUnderlyingObject(managedObjectImpl, clazz);
- populateManagedObject(managedObjectImpl, object);
+ populateManagedObject(managedObjectImpl, object, null);
}
public void populateManagedObject(MutableManagedObject managedObject, T object)
{
+ populateManagedObject(managedObject, object);
+ }
+ public void populateManagedObject(MutableManagedObject managedObject, T object,
+ MetaData metaData)
+ {
managedObject.setAttachment(object);
- populateValues(managedObject, object);
+ populateValues(managedObject, object, metaData);
}
/**
@@ -130,11 +138,11 @@
* @return the InstanceClassFactory
*/
@SuppressWarnings("unchecked")
- public <X> InstanceClassFactory<X> getInstanceClassFactory(Class<X> clazz)
+ public <X> InstanceClassFactory<X> getInstanceClassFactory(Class<X> clazz, MetaData metaData)
{
InstanceClassFactory<X> factory = (InstanceClassFactory<X>)
Utility.getInstanceClassFactory(clazz, instanceFactories,
- defaultInstanceFactory);
+ defaultInstanceFactory, metaData);
return factory;
}
@@ -166,9 +174,10 @@
* @param object the object
*/
@SuppressWarnings("unchecked")
- protected void populateValues(MutableManagedObject managedObject, T object)
+ protected void populateValues(MutableManagedObject managedObject, T object,
+ MetaData metaData)
{
- InstanceClassFactory icf = getInstanceClassFactory(object.getClass());
+ InstanceClassFactory icf = getInstanceClassFactory(object.getClass(), metaData);
Class moClass;
try
{
@@ -189,7 +198,7 @@
MetaValue value = null;
try
{
- value = icf.getValue(beanInfo, property, object);
+ value = icf.getValue(beanInfo, property, metaData, object);
}
catch(Throwable t)
{
@@ -203,9 +212,10 @@
defines the ManagedObject id name from the property value.
*/
Map<String, Annotation> annotations = property.getAnnotations();
- if (annotations == null)
+ if (annotations == null && metaData == null)
continue;
- ManagementObjectID id = (ManagementObjectID) annotations.get(ManagementObjectID.class.getName());
+
+ ManagementObjectID id = getAnnotation(ManagementObjectID.class, annotations, metaData);
if (id != null)
{
if (value == null || value.getMetaType().isSimple() == false)
@@ -217,7 +227,7 @@
String name = "" + svalue.getValue();
managedObject.setName(name);
}
- ManagementRuntimeRef runtimeRef = (ManagementRuntimeRef) annotations.get(ManagementRuntimeRef.class.getName());
+ ManagementRuntimeRef runtimeRef = getAnnotation(ManagementRuntimeRef.class, annotations, metaData);
if (runtimeRef != null)
{
componentName = icf.getComponentName(beanInfo, property, object, value);
@@ -235,4 +245,14 @@
managedObject.setComponentName(componentName);
}
+ private static <X extends Annotation> X getAnnotation(Class<X> clazz, Map<String, Annotation> annotations,
+ MetaData metaData)
+ {
+ X annotation = null;
+ if(metaData != null)
+ annotation = metaData.getAnnotation(clazz);
+ if(annotation == null && annotations != null)
+ annotation = (X) annotations.get(clazz.getName());
+ return annotation;
+ }
}
Added: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/DefaultInstanceClassFactory.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/DefaultInstanceClassFactory.java (rev 0)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/DefaultInstanceClassFactory.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -0,0 +1,52 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * 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.managed.plugins.factory;
+
+import org.jboss.managed.api.factory.ManagedObjectFactory;
+
+/**
+ * A simple extension of AbstractInstanceClassFactory that handles the
+ * default Object.class type.
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision:$
+ */
+public class DefaultInstanceClassFactory
+ extends AbstractInstanceClassFactory<Object>
+{
+
+ public DefaultInstanceClassFactory()
+ {
+ super();
+ }
+
+ public DefaultInstanceClassFactory(ManagedObjectFactory mof)
+ {
+ super(mof);
+ }
+
+ public Class<Object> getType()
+ {
+ return Object.class;
+ }
+
+}
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/Utility.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/Utility.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/plugins/factory/Utility.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -24,6 +24,7 @@
import java.util.Map;
import org.jboss.managed.spi.factory.InstanceClassFactory;
+import org.jboss.metadata.spi.MetaData;
/**
* Common untility methods used by the factory plugins.
@@ -47,6 +48,32 @@
Map<Class<?>, InstanceClassFactory<?>> instanceFactories,
InstanceClassFactory defaultInstanceFactory)
{
+ return getInstanceClassFactory(clazz, instanceFactories, defaultInstanceFactory, null);
+ }
+ /**
+ * Get the instance factory for a class
+ *
+ * @param clazz the class
+ * @param instanceFactories - the registered mapping of classes to InstanceClassFactorys
+ * @param defaultInstanceFactory - the default InstanceClassFactory to use
+ * if no class match is found.
+ * @param metaData - the possibly null metdata repository accessor. Its used to
+ * query for an mdr InstanceClassFactory.class as an override to the defaultInstanceFactory
+ * @return the InstanceClassFactory
+ */
+ @SuppressWarnings("unchecked")
+ public static InstanceClassFactory getInstanceClassFactory(Class<?> clazz,
+ Map<Class<?>, InstanceClassFactory<?>> instanceFactories,
+ InstanceClassFactory defaultInstanceFactory, MetaData metaData)
+ {
+ InstanceClassFactory defaultFactory = defaultInstanceFactory;
+ if(metaData != null)
+ {
+ InstanceClassFactory mdrFactory = metaData.getMetaData(InstanceClassFactory.class);
+ if(mdrFactory != null)
+ defaultFactory = mdrFactory;
+ }
+
synchronized (instanceFactories)
{
Class<?> c = clazz;
@@ -74,7 +101,7 @@
if (factory != null)
return factory;
}
- InstanceClassFactory factory = defaultInstanceFactory;
+ InstanceClassFactory factory = defaultFactory;
return factory;
}
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/InstanceClassFactory.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/InstanceClassFactory.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/InstanceClassFactory.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -23,6 +23,7 @@
import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.values.MetaValue;
/**
@@ -37,6 +38,8 @@
*/
public interface InstanceClassFactory<T>
{
+ Class<T> getType();
+
/**
* Return the Class that represents the root ManagedObject to scan
* for management object related annotations.
@@ -55,7 +58,7 @@
* @param attachment - the object which own's the property
* @return value - the meta value form of the property value
*/
- MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, T attachment);
+ MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, MetaData metaData, T attachment);
/**
* Set the property value to attachment object.
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectBuilder.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectBuilder.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectBuilder.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -21,9 +21,8 @@
*/
package org.jboss.managed.spi.factory;
-import java.io.Serializable;
-
import org.jboss.managed.api.ManagedObject;
+import org.jboss.metadata.spi.MetaData;
/**
* ManagedObjectBuilder.
@@ -37,7 +36,9 @@
* Build the managed object
*
* @param clazz the class
+ * @param metaData - the optional metadata repository accessor used to query
+ * for management annotation overrides/additions to the clazz
* @return the managed object
*/
- ManagedObject buildManagedObject(Class<?> clazz);
+ ManagedObject buildManagedObject(Class<?> clazz, MetaData metaData);
}
Modified: projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectPopulator.java
===================================================================
--- projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectPopulator.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/main/java/org/jboss/managed/spi/factory/ManagedObjectPopulator.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -23,6 +23,7 @@
import org.jboss.managed.api.ManagedObject;
import org.jboss.managed.api.MutableManagedObject;
+import org.jboss.metadata.spi.MetaData;
/**
* ManagedObjectPopulator.
@@ -35,18 +36,37 @@
public interface ManagedObjectPopulator<T>
{
/**
- * Create a new underlying object
+ * Create a new underlying object from clazz and construct its ManagedObject.
*
* @param managedObject the managed object
* @param clazz the class
*/
void createObject(ManagedObject managedObject, Class<T> clazz);
+ /**
+ * Create a new underlying object from clazz and construct its ManagedObject.
+ *
+ * @param managedObject the managed object
+ * @param clazz the class
+ * @param metaData - the optional metadata repository accessor used to query
+ * for property annotations.
+ */
+ void createObject(ManagedObject managedObject, Class<T> clazz, MetaData metaData);
/**
- * Populate the managed object
+ * Populate the managed object with property values from the object.
*
* @param managedObject the managed object to populate with values
* @param object the object used to populate the managed object
*/
void populateManagedObject(MutableManagedObject managedObject, T object);
+ /**
+ * Populate the managed object with property values from the object.
+ *
+ * @param managedObject the managed object to populate with values
+ * @param object the object used to populate the managed object
+ * @param metaData - the optional metadata repository accessor used to query
+ * for property annotations.
+ */
+ void populateManagedObject(MutableManagedObject managedObject, T object,
+ MetaData metaData);
}
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/AbstractManagedObjectFactoryTest.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/AbstractManagedObjectFactoryTest.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/AbstractManagedObjectFactoryTest.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -30,6 +30,7 @@
import org.jboss.managed.api.factory.ManagedObjectFactory;
import org.jboss.managed.plugins.factory.AbstractManagedObjectFactory;
import org.jboss.managed.spi.factory.ManagedObjectBuilder;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.types.CompositeMetaType;
import org.jboss.metatype.api.types.GenericMetaType;
import org.jboss.metatype.api.types.MetaType;
@@ -85,16 +86,19 @@
return managedObjectFactory;
}
+
/**
* Create a managed object
*
* @param <T> the type
* @param clazz the type
+ * @param metaData the metadata repository
* @return the managed object
*/
- protected <T extends Serializable> ManagedObject createManagedObject(Class<T> clazz)
+ protected <T> ManagedObject createManagedObject(Class<T> clazz)
{
- ManagedObject result = getMOF().createManagedObject(clazz);
+ MetaData metaData = null;
+ ManagedObject result = getMOF().createManagedObject(clazz, metaData);
getLog().debug("Created managed: " + result + " for class=" + clazz.getName());
return result;
}
@@ -109,7 +113,7 @@
{
getMOF().setBuilder(clazz, builder);
}
-
+
/**
* Resolve a meta type
*
Added: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClass.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClass.java (rev 0)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClass.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -0,0 +1,67 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * 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.managed.factory.support;
+
+import java.io.Serializable;
+
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementProperties;
+import org.jboss.managed.api.annotation.ManagementProperty;
+
+/**
+ * Test that only properties specified at the class level ManagementObject
+ * are seen.
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision:$
+ */
+ at ManagementObject(properties=ManagementProperties.CLASS,
+ classProperties={
+ @ManagementProperty(name="property2")
+ }
+)
+public class ManagementPropertyClass
+ implements Serializable
+{
+ private static final long serialVersionUID = 1;
+
+ /**
+ * Get property 1
+ *
+ * @return null
+ */
+ @ManagementProperty
+ public String getProperty1()
+ {
+ return null;
+ }
+
+ /**
+ * Get property 2
+ *
+ * @return null
+ */
+ public String getProperty2()
+ {
+ return null;
+ }
+}
Added: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClassAndExplicit.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClassAndExplicit.java (rev 0)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/ManagementPropertyClassAndExplicit.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -0,0 +1,77 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * 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.managed.factory.support;
+
+import java.io.Serializable;
+
+import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementProperties;
+import org.jboss.managed.api.annotation.ManagementProperty;
+
+/**
+ * Test that properties specified at the class level ManagementObject
+ * and fields/methods marked with ManagementProperty are seen.
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision:$
+ */
+ at ManagementObject(properties=ManagementProperties.CLASS_AND_EXPLICIT,
+ classProperties={
+ @ManagementProperty(name="property2")
+ }
+)
+public class ManagementPropertyClassAndExplicit
+ implements Serializable
+{
+ private static final long serialVersionUID = 1;
+
+ /**
+ * Get property 1
+ *
+ * @return null
+ */
+ @ManagementProperty
+ public String getProperty1()
+ {
+ return null;
+ }
+
+ /**
+ * Get property 2
+ *
+ * @return null
+ */
+ public String getProperty2()
+ {
+ return null;
+ }
+
+ /**
+ * Get property 3
+ *
+ * @return null
+ */
+ public String getProperty3()
+ {
+ return null;
+ }
+}
Added: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/SimpleUnannotated.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/SimpleUnannotated.java (rev 0)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/SimpleUnannotated.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -0,0 +1,479 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * 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.managed.factory.support;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Date;
+
+/**
+ * A variation of the Simple bean that does not have an ManagementObject annotation
+ * @author Scott.Stark at jboss.org
+ * @version $Revision:$
+ */
+public class SimpleUnannotated
+ implements Serializable
+{
+ /** The serialVersionUID */
+ private static final long serialVersionUID = -1;
+
+ private BigDecimal bigDecimalValue;
+
+ private BigInteger bigIntegerValue;
+
+ private boolean booleanvalue;
+
+ private Boolean booleanValue;
+
+ private byte bytevalue;
+
+ private Byte byteValue;
+
+ private char charactervalue;
+
+ private Character characterValue;
+
+ private Date dateValue;
+
+ private double doublevalue;
+
+ private Double doubleValue;
+
+ private float floatvalue;
+
+ private Float floatValue;
+
+ private int integervalue;
+
+ private Integer integerValue;
+
+ private long longvalue;
+
+ private Long longValue;
+
+ private short shortvalue;
+
+ private Short shortValue;
+
+ private String stringValue;
+
+ /**
+ * Get the bigDecimalValue.
+ *
+ * @return the bigDecimalValue.
+ */
+ public BigDecimal getBigDecimalValue()
+ {
+ return bigDecimalValue;
+ }
+
+ /**
+ * Set the bigDecimalValue.
+ *
+ * @param bigDecimalValue the bigDecimalValue.
+ */
+ public void setBigDecimalValue(BigDecimal bigDecimalValue)
+ {
+ this.bigDecimalValue = bigDecimalValue;
+ }
+
+ /**
+ * Get the bigIntegerValue.
+ *
+ * @return the bigIntegerValue.
+ */
+ public BigInteger getBigIntegerValue()
+ {
+ return bigIntegerValue;
+ }
+
+ /**
+ * Set the bigIntegerValue.
+ *
+ * @param bigIntegerValue the bigIntegerValue.
+ */
+ public void setBigIntegerValue(BigInteger bigIntegerValue)
+ {
+ this.bigIntegerValue = bigIntegerValue;
+ }
+
+ /**
+ * Get the booleanvalue.
+ *
+ * @return the booleanvalue.
+ */
+ public boolean isBooleanvalue()
+ {
+ return booleanvalue;
+ }
+
+ /**
+ * Set the booleanvalue.
+ *
+ * @param booleanvalue the booleanvalue.
+ */
+ public void setBooleanvalue(boolean booleanvalue)
+ {
+ this.booleanvalue = booleanvalue;
+ }
+
+ /**
+ * Get the booleanValue.
+ *
+ * @return the booleanValue.
+ */
+ public Boolean getBooleanValue()
+ {
+ return booleanValue;
+ }
+
+ /**
+ * Set the booleanValue.
+ *
+ * @param booleanValue the booleanValue.
+ */
+ public void setBooleanValue(Boolean booleanValue)
+ {
+ this.booleanValue = booleanValue;
+ }
+
+ /**
+ * Get the bytevalue.
+ *
+ * @return the bytevalue.
+ */
+ public byte getBytevalue()
+ {
+ return bytevalue;
+ }
+
+ /**
+ * Set the bytevalue.
+ *
+ * @param bytevalue the bytevalue.
+ */
+ public void setBytevalue(byte bytevalue)
+ {
+ this.bytevalue = bytevalue;
+ }
+
+ /**
+ * Get the byteValue.
+ *
+ * @return the byteValue.
+ */
+ public Byte getByteValue()
+ {
+ return byteValue;
+ }
+
+ /**
+ * Set the byteValue.
+ *
+ * @param byteValue the byteValue.
+ */
+ public void setByteValue(Byte byteValue)
+ {
+ this.byteValue = byteValue;
+ }
+
+ /**
+ * Get the charactervalue.
+ *
+ * @return the charactervalue.
+ */
+ public char getCharactervalue()
+ {
+ return charactervalue;
+ }
+
+ /**
+ * Set the charactervalue.
+ *
+ * @param charactervalue the charactervalue.
+ */
+ public void setCharactervalue(char charactervalue)
+ {
+ this.charactervalue = charactervalue;
+ }
+
+ /**
+ * Get the characterValue.
+ *
+ * @return the characterValue.
+ */
+ public Character getCharacterValue()
+ {
+ return characterValue;
+ }
+
+ /**
+ * Set the characterValue.
+ *
+ * @param characterValue the characterValue.
+ */
+ public void setCharacterValue(Character characterValue)
+ {
+ this.characterValue = characterValue;
+ }
+
+ /**
+ * Get the dateValue.
+ *
+ * @return the dateValue.
+ */
+ public Date getDateValue()
+ {
+ return dateValue;
+ }
+
+ /**
+ * Set the dateValue.
+ *
+ * @param dateValue the dateValue.
+ */
+ public void setDateValue(Date dateValue)
+ {
+ this.dateValue = dateValue;
+ }
+
+ /**
+ * Get the doublevalue.
+ *
+ * @return the doublevalue.
+ */
+ public double getDoublevalue()
+ {
+ return doublevalue;
+ }
+
+ /**
+ * Set the doublevalue.
+ *
+ * @param doublevalue the doublevalue.
+ */
+ public void setDoublevalue(double doublevalue)
+ {
+ this.doublevalue = doublevalue;
+ }
+
+ /**
+ * Get the doubleValue.
+ *
+ * @return the doubleValue.
+ */
+ public Double getDoubleValue()
+ {
+ return doubleValue;
+ }
+
+ /**
+ * Set the doubleValue.
+ *
+ * @param doubleValue the doubleValue.
+ */
+ public void setDoubleValue(Double doubleValue)
+ {
+ this.doubleValue = doubleValue;
+ }
+
+ /**
+ * Get the floatvalue.
+ *
+ * @return the floatvalue.
+ */
+ public float getFloatvalue()
+ {
+ return floatvalue;
+ }
+
+ /**
+ * Set the floatvalue.
+ *
+ * @param floatvalue the floatvalue.
+ */
+ public void setFloatvalue(float floatvalue)
+ {
+ this.floatvalue = floatvalue;
+ }
+
+ /**
+ * Get the floatValue.
+ *
+ * @return the floatValue.
+ */
+ public Float getFloatValue()
+ {
+ return floatValue;
+ }
+
+ /**
+ * Set the floatValue.
+ *
+ * @param floatValue the floatValue.
+ */
+ public void setFloatValue(Float floatValue)
+ {
+ this.floatValue = floatValue;
+ }
+
+ /**
+ * Get the integervalue.
+ *
+ * @return the integervalue.
+ */
+ public int getIntegervalue()
+ {
+ return integervalue;
+ }
+
+ /**
+ * Set the integervalue.
+ *
+ * @param integervalue the integervalue.
+ */
+ public void setIntegervalue(int integervalue)
+ {
+ this.integervalue = integervalue;
+ }
+
+ /**
+ * Get the integerValue.
+ *
+ * @return the integerValue.
+ */
+ public Integer getIntegerValue()
+ {
+ return integerValue;
+ }
+
+ /**
+ * Set the integerValue.
+ *
+ * @param integerValue the integerValue.
+ */
+ public void setIntegerValue(Integer integerValue)
+ {
+ this.integerValue = integerValue;
+ }
+
+ /**
+ * Get the longvalue.
+ *
+ * @return the longvalue.
+ */
+ public long getLongvalue()
+ {
+ return longvalue;
+ }
+
+ /**
+ * Set the longvalue.
+ *
+ * @param longvalue the longvalue.
+ */
+ public void setLongvalue(long longvalue)
+ {
+ this.longvalue = longvalue;
+ }
+
+ /**
+ * Get the longValue.
+ *
+ * @return the longValue.
+ */
+ public Long getLongValue()
+ {
+ return longValue;
+ }
+
+ /**
+ * Set the longValue.
+ *
+ * @param longValue the longValue.
+ */
+ public void setLongValue(Long longValue)
+ {
+ this.longValue = longValue;
+ }
+
+ /**
+ * Get the shortvalue.
+ *
+ * @return the shortvalue.
+ */
+ public short getShortvalue()
+ {
+ return shortvalue;
+ }
+
+ /**
+ * Set the shortvalue.
+ *
+ * @param shortvalue the shortvalue.
+ */
+ public void setShortvalue(short shortvalue)
+ {
+ this.shortvalue = shortvalue;
+ }
+
+ /**
+ * Get the shortValue.
+ *
+ * @return the shortValue.
+ */
+ public Short getShortValue()
+ {
+ return shortValue;
+ }
+
+ /**
+ * Set the shortValue.
+ *
+ * @param shortValue the shortValue.
+ */
+ public void setShortValue(Short shortValue)
+ {
+ this.shortValue = shortValue;
+ }
+
+ /**
+ * Get the stringValue.
+ *
+ * @return the stringValue.
+ */
+ public String getStringValue()
+ {
+ return stringValue;
+ }
+
+ /**
+ * Set the stringValue.
+ *
+ * @param stringValue the stringValue.
+ */
+ public void setStringValue(String stringValue)
+ {
+ this.stringValue = stringValue;
+ }
+}
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/ManagementObjectWithRuntimeRefICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/ManagementObjectWithRuntimeRefICF.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/ManagementObjectWithRuntimeRefICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -25,6 +25,7 @@
import org.jboss.beans.info.spi.PropertyInfo;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.spi.factory.InstanceClassFactory;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.MetaValueFactory;
@@ -38,6 +39,12 @@
/** The meta value factory */
private MetaValueFactory metaValueFactory = MetaValueFactory.getInstance();
+
+ public Class<ManagementObjectWithRuntimeRef> getType()
+ {
+ return ManagementObjectWithRuntimeRef.class;
+ }
+
@SuppressWarnings("unchecked")
public Class<?> getManagedObjectClass(ManagementObjectWithRuntimeRef instance)
throws ClassNotFoundException
@@ -54,7 +61,8 @@
return name;
}
- public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property, ManagementObjectWithRuntimeRef instance)
+ public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property,
+ MetaData metaData, ManagementObjectWithRuntimeRef instance)
{
String name = getPropertyName(property);
PropertyInfo propertyInfo = beanInfo.getProperty(name);
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestICF.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -31,5 +31,10 @@
*/
public class TestICF extends AbstractInstanceClassFactory<Serializable>
{
+
+ public Class<Serializable> getType()
+ {
+ return Serializable.class;
+ }
}
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestMOP.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestMOP.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestMOP.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -30,6 +30,7 @@
import org.jboss.managed.plugins.factory.AbstractManagedObjectPopulator;
import org.jboss.managed.spi.factory.InstanceClassFactory;
import org.jboss.managed.spi.factory.ManagedObjectPopulator;
+import org.jboss.metadata.spi.MetaData;
/**
* @author Scott.Stark at jboss.org
@@ -52,19 +53,35 @@
super(configuration);
}
+ @Override
public void createObject(ManagedObject managedObject,
Class<Serializable> clazz)
{
createObjectCalled = true;
super.createObject(managedObject, clazz);
}
+ @Override
+ public void createObject(ManagedObject managedObject,
+ Class<Serializable> clazz, MetaData metaData)
+ {
+ createObjectCalled = true;
+ super.createObject(managedObject, clazz, metaData);
+ }
+ @Override
public void populateManagedObject(MutableManagedObject managedObject,
Serializable object)
{
populateManagedObjectCalled = true;
super.populateManagedObject(managedObject, object);
}
+ @Override
+ public void populateManagedObject(MutableManagedObject managedObject,
+ Serializable object, MetaData metaData)
+ {
+ populateManagedObjectCalled = true;
+ super.populateManagedObject(managedObject, object, metaData);
+ }
public boolean isCreateObjectCalled()
{
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestSimpleICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestSimpleICF.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/amof/TestSimpleICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -25,6 +25,7 @@
import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.managed.api.ManagedProperty;
import org.jboss.managed.plugins.factory.AbstractInstanceClassFactory;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.test.managed.factory.support.Simple;
@@ -39,10 +40,10 @@
@Override
public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property,
- Simple object)
+ MetaData metaData, Simple object)
{
getValueCalled = true;
- return super.getValue(beanInfo, property, object);
+ return super.getValue(beanInfo, property, metaData, object);
}
public boolean isGetValueCalled()
@@ -50,6 +51,11 @@
return getValueCalled;
}
+ public Class<Simple> getType()
+ {
+ return Simple.class;
+ }
+
@Override
public void setValue(BeanInfo beanInfo, ManagedProperty property,
Simple object, MetaValue value)
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/beans/BeanMetaDataICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/beans/BeanMetaDataICF.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/beans/BeanMetaDataICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -34,6 +34,7 @@
import org.jboss.managed.api.annotation.ManagementProperty;
import org.jboss.managed.api.annotation.ViewUse;
import org.jboss.managed.spi.factory.InstanceClassFactory;
+import org.jboss.metadata.spi.MetaData;
import org.jboss.metatype.api.values.MetaValue;
import org.jboss.metatype.api.values.MetaValueFactory;
@@ -74,6 +75,12 @@
return beanMap.get(beanName);
}
+
+ public Class<IBeanMetaData> getType()
+ {
+ return IBeanMetaData.class;
+ }
+
public Object getComponentName(BeanInfo beanInfo, ManagedProperty property,
IBeanMetaData attachment, MetaValue value)
{
@@ -114,7 +121,7 @@
}
public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property,
- IBeanMetaData attachment)
+ MetaData metaData, IBeanMetaData attachment)
{
// Get the property from the bean
// First look to the mapped name
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestinationICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestinationICF.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/JmsDestinationICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -47,6 +47,10 @@
super(mof);
}
+ public Class<JmsDestination> getType()
+ {
+ return JmsDestination.class;
+ }
@Override
public void setValue(BeanInfo beanInfo, ManagedProperty property,
JmsDestination object, MetaValue value)
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/SecDomainICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/SecDomainICF.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/deployment/SecDomainICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -30,4 +30,9 @@
public class SecDomainICF extends AbstractInstanceClassFactory<SecDomainMD>
{
+ public Class<SecDomainMD> getType()
+ {
+ return SecDomainMD.class;
+ }
+
}
Added: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/LocalDSInstanceClassFactory.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/LocalDSInstanceClassFactory.java (rev 0)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/LocalDSInstanceClassFactory.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -0,0 +1,121 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * 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.managed.factory.support.mcf;
+
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.beans.info.spi.BeanInfo;
+import org.jboss.managed.api.ManagedProperty;
+import org.jboss.managed.api.factory.ManagedObjectFactory;
+import org.jboss.managed.plugins.factory.AbstractInstanceClassFactory;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.metatype.api.types.SimpleMetaType;
+import org.jboss.metatype.api.values.MapCompositeValueSupport;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.SimpleValueSupport;
+
+/**
+ * An InstanceClassFactory for LocalDataSourceDeploymentMetaData that handles
+ * connection-properties property as a MapCompositeValueSupport.
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 78217 $
+ */
+public class LocalDSInstanceClassFactory
+ extends AbstractInstanceClassFactory<LocalDataSourceDeploymentMetaData>
+{
+ public LocalDSInstanceClassFactory()
+ {
+ super();
+ }
+ public LocalDSInstanceClassFactory(ManagedObjectFactory mof)
+ {
+ super(mof);
+ }
+
+ public Class<LocalDataSourceDeploymentMetaData> getType()
+ {
+ return LocalDataSourceDeploymentMetaData.class;
+ }
+ public Class<? extends Serializable> getManagedObjectClass(
+ LocalDataSourceDeploymentMetaData attachment)
+ throws ClassNotFoundException
+ {
+ return attachment.getClass();
+ }
+
+ public MetaValue getValue(BeanInfo beanInfo, ManagedProperty property,
+ MetaData metaData,
+ LocalDataSourceDeploymentMetaData attachment)
+ {
+ MetaValue value = null;
+ if("connection-properties".equals(property.getName()))
+ {
+ MapCompositeValueSupport mapValue = new MapCompositeValueSupport(SimpleMetaType.STRING);
+ List<DataSourceConnectionPropertyMetaData> list = attachment.getDataSourceConnectionProperties();
+ if(list != null)
+ {
+ for(DataSourceConnectionPropertyMetaData prop : list)
+ {
+ MetaValue wrapped = SimpleValueSupport.wrap(prop.getValue());
+ mapValue.put(prop.getName(), wrapped);
+ }
+ }
+ value = mapValue;
+ }
+ else
+ {
+ value = super.getValue(beanInfo, property, metaData, attachment);
+ }
+ return value;
+ }
+
+ @Override
+ protected Object unwrapValue(BeanInfo beanInfo, ManagedProperty property,
+ MetaValue value)
+ {
+ if((value instanceof MapCompositeValueSupport) == false)
+ {
+ return super.unwrapValue(beanInfo, property, value);
+ }
+
+ MapCompositeValueSupport mapValue = (MapCompositeValueSupport) value;
+ Object unwrapValue = null;
+ if("connection-properties".equals(property.getName()))
+ {
+ List<DataSourceConnectionPropertyMetaData> list = new ArrayList<DataSourceConnectionPropertyMetaData>();
+ for(String name : mapValue.getMetaType().keySet())
+ {
+ DataSourceConnectionPropertyMetaData prop = new DataSourceConnectionPropertyMetaData();
+ prop.setName(name);
+ String svalue = (String) getMetaValueFactory().unwrap(mapValue.get(name));
+ prop.setValue(svalue);
+ list.add(prop);
+ }
+ unwrapValue = list;
+ }
+ return unwrapValue;
+ }
+}
Added: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/NoTxICF.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/NoTxICF.java (rev 0)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/support/mcf/NoTxICF.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -0,0 +1,49 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * 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.managed.factory.support.mcf;
+
+import org.jboss.managed.api.factory.ManagedObjectFactory;
+import org.jboss.managed.plugins.factory.AbstractInstanceClassFactory;
+
+/**
+ * @author Scott.Stark at jboss.org
+ * @version $Revision:$
+ */
+public class NoTxICF
+ extends AbstractInstanceClassFactory<NoTxConnectionFactoryDeploymentMetaData>
+{
+ public NoTxICF()
+ {
+ super();
+ }
+
+ public NoTxICF(ManagedObjectFactory mof)
+ {
+ super(mof);
+ }
+
+ public Class<NoTxConnectionFactoryDeploymentMetaData> getType()
+ {
+ return NoTxConnectionFactoryDeploymentMetaData.class;
+ }
+
+}
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/AbstractManagedObjectFactoryUnitTestCase.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -21,21 +21,31 @@
*/
package org.jboss.test.managed.factory.test;
+import java.lang.annotation.Annotation;
import java.math.BigDecimal;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.jboss.annotation.factory.AnnotationCreator;
import org.jboss.managed.api.ManagedObject;
import org.jboss.managed.api.ManagedProperty;
+import org.jboss.managed.api.annotation.ManagementComponent;
+import org.jboss.managed.api.annotation.ManagementObject;
import org.jboss.managed.api.factory.ManagedObjectFactory;
import org.jboss.managed.plugins.factory.AbstractInstanceClassFactory;
import org.jboss.managed.plugins.factory.AbstractManagedObjectFactory;
+import org.jboss.managed.plugins.factory.DefaultInstanceClassFactory;
+import org.jboss.managed.spi.factory.InstanceClassFactory;
+import org.jboss.metadata.plugins.loader.memory.MemoryMetaDataLoader;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrievalToMetaDataBridge;
import org.jboss.metatype.api.values.CollectionValue;
import org.jboss.metatype.api.values.GenericValue;
import org.jboss.metatype.api.values.MetaValue;
@@ -44,6 +54,7 @@
import org.jboss.test.managed.factory.support.ManagementObjectChangedName;
import org.jboss.test.managed.factory.support.ManagementPropertySimpleManaged;
import org.jboss.test.managed.factory.support.Simple;
+import org.jboss.test.managed.factory.support.SimpleUnannotated;
import org.jboss.test.managed.factory.support.amof.CustomName;
import org.jboss.test.managed.factory.support.amof.ManagementObjectWithRuntimeRef;
import org.jboss.test.managed.factory.support.amof.ManagementObjectWithRuntimeRefICF;
@@ -62,9 +73,12 @@
import org.jboss.test.managed.factory.support.deployment.SecurityDomain;
import org.jboss.test.managed.factory.support.mcf.DBMSMetaData;
import org.jboss.test.managed.factory.support.mcf.DataSourceConnectionPropertyMetaData;
+import org.jboss.test.managed.factory.support.mcf.LocalDSInstanceClassFactory;
import org.jboss.test.managed.factory.support.mcf.LocalDataSourceDeploymentMetaData;
import org.jboss.test.managed.factory.support.mcf.ManagedConnectionFactoryDeploymentGroup;
import org.jboss.test.managed.factory.support.mcf.ManagedConnectionFactoryDeploymentMetaData;
+import org.jboss.test.managed.factory.support.mcf.NoTxConnectionFactoryDeploymentMetaData;
+import org.jboss.test.managed.factory.support.mcf.NoTxICF;
import org.jboss.test.managed.factory.support.mcf.SecurityMetaData;
/**
@@ -115,6 +129,10 @@
checkDefaultManagedProperties(managedObject, ManagementPropertySimpleManaged.class);
}
+ /**
+ * Test that the setDefaultManagedObjectPopulator overrides the MOF
+ * default ManagedObjectPopulator
+ */
public void testDefaultManagedObjectPopulator()
{
AbstractManagedObjectFactory mof = new AbstractManagedObjectFactory();
@@ -139,6 +157,56 @@
}
+ public void testInstanceClassFactoryAddition()
+ {
+ AbstractManagedObjectFactory mof = new AbstractManagedObjectFactory();
+ testMOF = mof;
+
+ BeanMetaDataICF bicf = new BeanMetaDataICF();
+ mof.addInstanceClassFactory(bicf);
+ LocalDSInstanceClassFactory dsicf = new LocalDSInstanceClassFactory();
+ mof.addInstanceClassFactory(dsicf);
+ NoTxICF nticf = new NoTxICF();
+ mof.addInstanceClassFactory(nticf);
+
+ InstanceClassFactory icf = mof.getInstanceClassFactory(IBeanMetaData.class);
+ assertEquals("IBeanMetaData ICF", bicf, icf);
+ icf = mof.getInstanceClassFactory(LocalDataSourceDeploymentMetaData.class);
+ assertEquals("LocalDataSourceDeploymentMetaData ICF", dsicf, icf);
+ icf = mof.getInstanceClassFactory(NoTxConnectionFactoryDeploymentMetaData.class);
+ assertEquals("NoTxConnectionFactoryDeploymentMetaData ICF", nticf, icf);
+ }
+
+ /**
+ * Test that the MetaData repository annotations override/augment the class
+ * annotations.
+ */
+ public void testMetaDataRepositoryOverride()
+ throws Exception
+ {
+ MemoryMetaDataLoader memory = new MemoryMetaDataLoader();
+ String annotationExpr = "@org.jboss.managed.api.annotation.ManagementObject(name=\"testMetaDataRepositoryOverride\",componentType=@org.jboss.managed.api.annotation.ManagementComponent(type=\"MCBean\", subtype=\"MetaDataTest\"))";
+ ManagementObject override = (ManagementObject) AnnotationCreator.createAnnotation(annotationExpr, ManagementObject.class);
+ memory.addAnnotation(override);
+ MetaData metaData = new MetaDataRetrievalToMetaDataBridge(memory);
+
+ BigDecimal bigDecimal = new BigDecimal(10);
+ SimpleUnannotated simple = new SimpleUnannotated();
+ simple.setBigDecimalValue(bigDecimal);
+
+ ManagedObjectFactory mof = getMOF();
+ ManagedObject managedObject = mof.initManagedObject(simple, metaData);
+ assertEquals("testMetaDataRepositoryOverride", managedObject.getName());
+ Map<String, Annotation> moAnnotations = managedObject.getAnnotations();
+ assertEquals("MO annotations == 2;", 2, moAnnotations.size());
+ ManagementObject moAnn = (ManagementObject) moAnnotations.get(ManagementObject.class.getName());
+ ManagementComponent componentType = moAnn.componentType();
+ assertEquals("componentType.type", "MCBean", componentType.type());
+ assertEquals("componentType.subtype", "MetaDataTest", componentType.subtype());
+ checkPropertyDefaults(managedObject, "bigDecimalValue", BigDecimal.class, bigDecimal);
+ checkDefaultManagedProperties(managedObject, SimpleUnannotated.class);
+ }
+
@SuppressWarnings("unchecked")
public void testGenericValueUpdate()
{
@@ -179,7 +247,7 @@
assertEquals(SimpleValueSupport.wrap("java:/jaas/JMS"), domainName.getValue());
ManagedObject domainUpdateMO = initManagedObject(new SecurityDomain("java:/jaas/JMS2"));
- AbstractInstanceClassFactory icf = new AbstractInstanceClassFactory(mof);
+ DefaultInstanceClassFactory icf = new DefaultInstanceClassFactory(mof);
GenericValue domainUpdateGV = icf.getManagedObjectValue(domain, domainUpdateMO);
assertNotNull(domainUpdateGV.getValue());
domain.setValue(domainUpdateGV);
Modified: projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectPropertiesUnitTestCase.java
===================================================================
--- projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectPropertiesUnitTestCase.java 2008-11-04 18:30:18 UTC (rev 80511)
+++ projects/jboss-man/trunk/managed/src/test/java/org/jboss/test/managed/factory/test/ManagementObjectPropertiesUnitTestCase.java 2008-11-04 18:39:17 UTC (rev 80512)
@@ -30,6 +30,8 @@
import org.jboss.test.managed.factory.support.ManagementObjectExplicit;
import org.jboss.test.managed.factory.support.ManagementObjectIgnored;
import org.jboss.test.managed.factory.support.ManagementObjectNone;
+import org.jboss.test.managed.factory.support.ManagementPropertyClass;
+import org.jboss.test.managed.factory.support.ManagementPropertyClassAndExplicit;
import org.jboss.test.managed.factory.support.WriteOnlyPropertyObject;
/**
@@ -79,7 +81,7 @@
checkManagedObjectDefaults(ManagementObjectIgnored.class, managedObject);
checkManagedProperties(managedObject, "property2");
}
-
+
/**
* Test no properties included
*/
@@ -101,6 +103,26 @@
}
/**
+ * Test CLASS properties included
+ */
+ public void testClass()
+ {
+ ManagedObject managedObject = createManagedObject(ManagementPropertyClass.class);
+ checkManagedObjectDefaults(ManagementPropertyClass.class, managedObject);
+ checkManagedProperties(managedObject, "property2");
+ }
+
+ /**
+ * Test CLASS_AND_EXPLICIT properties included
+ */
+ public void testClassAndExplicit()
+ {
+ ManagedObject managedObject = createManagedObject(ManagementPropertyClassAndExplicit.class);
+ checkManagedObjectDefaults(ManagementPropertyClassAndExplicit.class, managedObject);
+ checkManagedProperties(managedObject, "property1", "property2");
+ }
+
+ /**
* Validate that a write-only property does not fail the creation of
* a ManagedObject/ManagedProperty.
*/
More information about the jboss-cvs-commits
mailing list