[jboss-cvs] JBossAS SVN: r67112 - in projects/metadata/trunk/src: test/java/org/jboss/test/metadata/annotation/ejb3 and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Nov 14 21:41:46 EST 2007
Author: scott.stark at jboss.org
Date: 2007-11-14 21:41:46 -0500 (Wed, 14 Nov 2007)
New Revision: 67112
Modified:
projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java
projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java
projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractSessionBeanProcessor.java
projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java
projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java
projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java
Log:
Initial working version of the ejb3 annotation unit test
Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java 2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractComponentProcessor.java 2007-11-15 02:41:46 UTC (rev 67112)
@@ -29,9 +29,12 @@
import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import org.jboss.logging.Logger;
import org.jboss.metadata.annotation.finder.AnnotationFinder;
import org.jboss.metadata.javaee.spec.AnnotatedEJBReferencesMetaData;
import org.jboss.metadata.javaee.spec.EnvironmentRefsGroupMetaData;
@@ -47,12 +50,16 @@
public abstract class AbstractComponentProcessor<MD>
extends AbstractFinderUser
{
+ private static Logger log = Logger.getLogger(AbstractComponentProcessor.class);
+
/** Map<Processor metdata type class, List<Processor for classes>> */
protected Map<Class<?>, List<Processor<Object, Class<?>>>> typeProcessors;
/** Map<Processor metdata type class, List<Processor for fields>> */
protected Map<Class<?>, List<Processor<Object, Field>>> fieldProcessors;
/** Map<Processor metdata type class, List<Processor for methods>> */
protected Map<Class<?>, List<Processor<Object, Method>>> methodProcessors;
+ /** */
+ protected Set<Class> boundedTypes = new HashSet<Class>();
/**
* @param finder
@@ -75,35 +82,38 @@
public void addFieldProcessor(Processor processor)
{
- Class t = getProcessorMetaDataType(processor);
- List<Processor<Object, Field>> processors = fieldProcessors.get(t);
+ Class processorType = getProcessorMetaDataType(processor);
+ log.debug("addFieldProcessor: "+processor+", for type: "+processorType);
+ List<Processor<Object, Field>> processors = fieldProcessors.get(processorType);
if(processors == null)
{
processors = new ArrayList<Processor<Object, Field>>();
- fieldProcessors.put(t, processors);
+ fieldProcessors.put(processorType, processors);
}
processors.add(processor);
}
public void addMethodProcessor(Processor processor)
{
- Class t = getProcessorMetaDataType(processor);
- List<Processor<Object, Method>> processors = methodProcessors.get(t);
+ Class processorType = getProcessorMetaDataType(processor);
+ log.debug("addMethodProcessor: "+processor+", for type: "+processorType);
+ List<Processor<Object, Method>> processors = methodProcessors.get(processorType);
if(processors == null)
{
processors = new ArrayList<Processor<Object, Method>>();
- methodProcessors.put(t, processors);
+ methodProcessors.put(processorType, processors);
}
processors.add(processor);
}
public void addTypeProcessor(Processor processor)
{
- Class t = getProcessorMetaDataType(processor);
- List<Processor<Object, Class<?>>> processors = typeProcessors.get(t);
+ Class processorType = getProcessorMetaDataType(processor);
+ log.debug("addTypeProcessor: "+processor+", for type: "+processorType);
+ List<Processor<Object, Class<?>>> processors = typeProcessors.get(processorType);
if(processors == null)
{
processors = new ArrayList<Processor<Object, Class<?>>>();
- typeProcessors.put(t, processors);
+ typeProcessors.put(processorType, processors);
}
processors.add(processor);
}
@@ -150,10 +160,37 @@
protected <T> void processClass(T metaData, Class<?> cls)
{
Class<?> type = metaData.getClass();
+ boolean trace = log.isTraceEnabled();
+ int processorCount = processClass(metaData, cls, type);
+ if(trace)
+ log.trace("Found "+processorCount+" processors for type: "+type);
+ // See if metaData has a bounded type
+ type = type.getSuperclass();
+ while(boundedTypes.contains(type) == false && type != Object.class)
+ {
+ type = type.getSuperclass();
+ }
+ //
+ if(type != Object.class)
+ {
+ if(trace)
+ log.trace("Reprocessing class using bounded processor type: "+type);
+ processClass(metaData, cls, type);
+ }
+ }
+ private <T> int processClass(T metaData, Class<?> cls, Class processorType)
+ {
+ boolean trace = log.isTraceEnabled();
+ int processorCount = 0;
+ if(trace)
+ log.trace("processClass for metaData: "+processorType+", class: "+cls);
- List<Processor<Object, Class<?>>> tps = typeProcessors.get(type);
+ List<Processor<Object, Class<?>>> tps = typeProcessors.get(processorType);
if(tps != null)
{
+ processorCount += tps.size();
+ if(trace)
+ log.trace("typeProcessors("+tps.size()+") for metaData: "+tps);
for(Processor<Object, Class<?>> processor : tps)
{
processor.process(metaData, cls);
@@ -168,20 +205,26 @@
}
}
- List<Processor<Object, Field>> fps = fieldProcessors.get(type);
+ List<Processor<Object, Field>> fps = fieldProcessors.get(processorType);
if(fps != null)
for(Field field : cls.getDeclaredFields())
{
+ processorCount += fps.size();
+ if(trace)
+ log.trace("fieldProcessors("+fps.size()+") for metaData: "+fps);
for(Processor<Object, Field> processor : fps)
{
processor.process(metaData, field);
}
}
- List<Processor<Object, Method>> mps = methodProcessors.get(type);
+ List<Processor<Object, Method>> mps = methodProcessors.get(processorType);
if(mps != null)
for(Method method : cls.getDeclaredMethods())
{
+ processorCount += mps.size();
+ if(trace)
+ log.trace("methodProcessors("+mps.size()+") for metaData: "+fps);
for(Processor<Object, Method> processor : mps)
{
processor.process(metaData, method);
@@ -189,19 +232,37 @@
}
if(cls.getSuperclass() != null)
- processClass(metaData, cls.getSuperclass());
+ processorCount += processClass(metaData, cls.getSuperclass(), processorType);
+ return processorCount;
}
/**
- * Determine the Processor<T, ?> T generic type class.
+ * Determine the Processor<T, ?> T generic processorType class.
*
* @param processor
- * @return
+ * @return The Class for the T parameter type. If this was an upper bound,
+ * this will have been added to the boundedTypes set.
*/
protected Class getProcessorMetaDataType(Processor processor)
{
- Type type = processor.getClass().getGenericInterfaces()[0];
- ParameterizedType pt = (ParameterizedType) type;
+ // Find the Proccessor<T, ?> interface
+ Type[] interfaces = processor.getClass().getGenericInterfaces();
+ Type processorType = null;
+ for(Type t : interfaces)
+ {
+ ParameterizedType pt = (ParameterizedType) t;
+ Type rawType = pt.getRawType();
+ if((rawType instanceof Class) && ((Class)rawType).getName().equals("org.jboss.metadata.annotation.creator.Processor"))
+ {
+ processorType = t;
+ break;
+ }
+ }
+ if(processorType == null)
+ throw new IllegalStateException("No generic Processor interface found on: "+processor);
+
+ // Get the type of the T parameter
+ ParameterizedType pt = (ParameterizedType) processorType;
Type t0 = pt.getActualTypeArguments()[0];
Class t = null;
if(t0 instanceof Class)
@@ -210,6 +271,7 @@
{
TypeVariable tv = (TypeVariable) t0;
t = (Class)tv.getBounds()[0];
+ boundedTypes.add(t);
}
return t;
}
Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java 2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractEnterpriseBeanProcessor.java 2007-11-15 02:41:46 UTC (rev 67112)
@@ -22,10 +22,6 @@
package org.jboss.metadata.annotation.creator;
import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
import org.jboss.metadata.annotation.finder.AnnotationFinder;
import org.jboss.metadata.ejb.spec.EjbJar3xMetaData;
Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/AbstractSessionBeanProcessor.java
===================================================================
Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java 2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/EjbJar30Creator.java 2007-11-15 02:41:46 UTC (rev 67112)
@@ -48,6 +48,7 @@
processors = new ArrayList<Processor<EjbJar3xMetaData,Class<?>>>();
processors.add(new StatefulProcessor(finder));
processors.add(new StatelessProcessor(finder));
+ processors.add(new ApplicationExceptionProcessor(finder));
}
public EjbJar30MetaData create(Collection<Class> classes)
Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java 2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/annotation/creator/TransactionAttributeClassProcessor.java 2007-11-15 02:41:46 UTC (rev 67112)
@@ -36,7 +36,8 @@
* @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
* @version $Revision: $
*/
-public class TransactionAttributeClassProcessor<T extends EnterpriseBeanMetaData> extends AbstractTransactionAttributeProcessor<Class<?>, T> implements Processor<T, Class<?>>
+public class TransactionAttributeClassProcessor<T extends EnterpriseBeanMetaData> extends AbstractTransactionAttributeProcessor<Class<?>, T>
+ implements Processor<T, Class<?>>
{
private static final Logger log = Logger.getLogger(TransactionAttributeClassProcessor.class);
Modified: projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java
===================================================================
--- projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java 2007-11-15 00:23:45 UTC (rev 67111)
+++ projects/metadata/trunk/src/test/java/org/jboss/test/metadata/annotation/ejb3/AnnotationEjb3UnitTestCase.java 2007-11-15 02:41:46 UTC (rev 67112)
@@ -43,6 +43,7 @@
import org.jboss.metadata.ejb.spec.SessionBeanMetaData;
import org.jboss.metadata.ejb.spec.SessionType;
import org.jboss.metadata.ejb.spec.TransAttributeType;
+import org.jboss.test.BaseTestCase;
/**
* This tests the annotation translation framework.
@@ -50,8 +51,16 @@
* @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
* @version $Revision$
*/
-public class AnnotationEjb3UnitTestCase extends TestCase
+public class AnnotationEjb3UnitTestCase extends BaseTestCase
{
+ /**
+ * @param name
+ */
+ public AnnotationEjb3UnitTestCase(String name)
+ {
+ super(name);
+ }
+
private void assertMyStatefulBean(IEnterpriseBeanMetaData enterpriseBean)
{
assertTrue(enterpriseBean instanceof SessionBeanMetaData);
@@ -152,7 +161,9 @@
AnnotationFinder<AnnotatedElement> finder = new DefaultAnnotationFinder<AnnotatedElement>();
Collection<Class> classes = loadClassesFromCurrentClassDir();
-
+ System.out.println("Processing classes: "+classes);
+
+ enableTrace("org.jboss.metadata.annotation.creator");
EjbJar30Creator creator = new EjbJar30Creator(finder);
EjbJar30MetaData metaData = creator.create(classes);
More information about the jboss-cvs-commits
mailing list