[jboss-cvs] JBossAS SVN: r68877 - in projects/ejb3/trunk/metadata/src: main/java/org/jboss/ejb3/metadata/annotation and 6 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jan 11 06:47:47 EST 2008
Author: wolfc
Date: 2008-01-11 06:47:47 -0500 (Fri, 11 Jan 2008)
New Revision: 68877
Added:
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java
projects/ejb3/trunk/metadata/src/test/resources/log4j.xml
Removed:
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/spi/retrieval/
Modified:
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java
projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml
Log:
Added interceptors annotation
Modified: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java 2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java 2008-01-11 11:47:47 UTC (rev 68877)
@@ -24,12 +24,21 @@
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import javax.interceptor.Interceptors;
+
import org.jboss.ejb3.annotation.SecurityDomain;
+import org.jboss.ejb3.annotation.impl.InterceptorsImpl;
import org.jboss.ejb3.annotation.impl.SecurityDomainImpl;
+import org.jboss.ejb3.metadata.plugins.loader.ClassMetaDataLoader;
+import org.jboss.ejb3.metadata.plugins.loader.InterceptorClassMetaDataLoader;
+import org.jboss.ejb3.metadata.spi.signature.ClassSignature;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorBindingMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorBindingsMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorClassesMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
import org.jboss.metadata.spi.retrieval.AnnotationItem;
import org.jboss.metadata.spi.retrieval.AnnotationsItem;
@@ -46,27 +55,58 @@
* @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
-public class EJBMetaDataLoader extends BasicMetaDataLoader
+public class EJBMetaDataLoader extends ClassMetaDataLoader
{
/** The container */
private JBossEnterpriseBeanMetaData beanMetaData;
- /** Component cache */
- private Map<Signature, MetaDataRetrieval> cache = new ConcurrentHashMap<Signature, MetaDataRetrieval>();
+ private ClassLoader classLoader;
/**
* Create a new EJBMetaDataLoader.
*
- * @param key the scope
- * @param container the container
+ * @param key the scope
+ * @param beanMetaData the meta data associated with this EJB or null
+ * @param classLoader the class loader that must be used to load new classes
*/
- public EJBMetaDataLoader(ScopeKey key, JBossEnterpriseBeanMetaData beanMetaData)
+ public EJBMetaDataLoader(ScopeKey key, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
{
super(key);
- assert beanMetaData != null : "beanMetaData is null";
+ assert classLoader != null : "classLoader is null";
+
this.beanMetaData = beanMetaData;
+ this.classLoader = classLoader;
}
+ protected MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature)
+ {
+ JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
+ if (beanMetaData == null)
+ return null;
+
+ MetaDataRetrieval retrieval = null;
+ if(signature instanceof ClassSignature)
+ {
+ // FIXME: it's not always an interceptor, could be a super class
+ retrieval = new InterceptorClassMetaDataLoader(getScope(), findInterceptor(signature.getName()));
+ }
+ else if(signature instanceof MethodSignature)
+ retrieval = new MethodMetaDataRetrieval((MethodSignature) signature);
+
+ return retrieval;
+ }
+
+ private InterceptorMetaData findInterceptor(String name)
+ {
+ InterceptorsMetaData interceptors = beanMetaData.getEjbJarMetaData().getInterceptors();
+ for(InterceptorMetaData interceptorMetaData : interceptors)
+ {
+ if(interceptorMetaData.getInterceptorClass().equals(name))
+ return interceptorMetaData;
+ }
+ return null;
+ }
+
/**
* Get the bean metadata
*
@@ -77,35 +117,66 @@
return beanMetaData;
}
- public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+ public boolean isEmpty()
{
- JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
- if (beanMetaData == null)
- return null;
-
- if (signature instanceof MethodSignature == false)
- return null;
-
- MetaDataRetrieval retrieval = cache.get(signature);
- if (retrieval != null)
- return retrieval;
-
- retrieval = new MethodMetaDataRetrieval((MethodSignature) signature);
- cache.put(signature, retrieval);
- return retrieval;
+ return getBeanMetaData() != null;
}
- public boolean isEmpty()
+ private Class<?> loadClass(String name)
{
- return getBeanMetaData() != null;
+ try
+ {
+ return classLoader.loadClass(name);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException(e);
+ }
}
-
+
public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
{
JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
if (beanMetaData == null)
return null;
+ String ejbName = beanMetaData.getEjbName();
+
+ if(annotationType == Interceptors.class)
+ {
+ InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
+ if(bindings != null)
+ {
+ for(InterceptorBindingMetaData binding : bindings)
+ {
+ // For the method component
+ if(binding.getMethod() != null)
+ continue;
+
+ String bindingEjbName = binding.getEjbName();
+ if(bindingEjbName.equals("*") || bindingEjbName.equals(ejbName))
+ {
+ //List<Class<?>> interceptorClasses = new ArrayList<Class<?>>();
+ InterceptorsImpl interceptors = new InterceptorsImpl();
+ InterceptorClassesMetaData interceptorClassesMetaData;
+ if(binding.isTotalOrdering())
+ {
+ interceptorClassesMetaData = binding.getInterceptorOrder();
+ }
+ else
+ {
+ interceptorClassesMetaData = binding.getInterceptorClasses();
+ }
+ for(String interceptorClassName : interceptorClassesMetaData)
+ {
+ interceptors.addValue(loadClass(interceptorClassName));
+ }
+ return new SimpleAnnotationItem<T>(annotationType.cast(interceptors));
+ }
+ }
+ }
+ }
+
if (annotationType == SecurityDomain.class)
{
String securityDomain = beanMetaData.getSecurityDomain();
Modified: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java 2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java 2008-01-11 11:47:47 UTC (rev 68877)
@@ -74,10 +74,16 @@
/** The classloader */
private ClassLoader classLoader;
+ /**
+ *
+ * @param beanClass
+ * @param beanMetaData the bean meta data or null
+ * @param canonicalObjectName
+ * @param classLoader
+ */
public AnnotationRepositoryToMetaData(Class<?> beanClass, JBossEnterpriseBeanMetaData beanMetaData, String canonicalObjectName, ClassLoader classLoader)
{
assert beanClass != null : "beanClass is null";
- assert beanMetaData != null : "beanMetaData is null";
assert canonicalObjectName != null : "canonicalObjectName is null";
assert classLoader != null : "classLoader is null";
@@ -86,7 +92,7 @@
MetaDataRetrieval classMetaData = ClassMetaDataRetrievalFactory.INSTANCE.getMetaDataRetrieval(new Scope(CommonLevels.CLASS, beanClass));
ScopeKey instanceScope = new ScopeKey(CommonLevels.INSTANCE, canonicalObjectName);
mutableMetaData = new MemoryMetaDataLoader(instanceScope);
- MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, beanMetaData);
+ MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, beanMetaData, classLoader);
MetaDataContext classContext = new AbstractMetaDataContext(classMetaData);
MetaDataRetrieval[] instance = { dynamicXml, mutableMetaData };
@@ -270,6 +276,8 @@
if(annotationType == null)
throw new IllegalArgumentException("annotationType is null");
MetaData classComponent = getComponentMetaData(cls);
+ if(classComponent == null)
+ return false;
MetaData component = classComponent.getComponentMetaData(Signature.getSignature(member));
if(component == null)
return false;
@@ -362,6 +370,8 @@
if(annotationType == null)
throw new IllegalArgumentException("annotationType is null");
MetaData classComponent = getComponentMetaData(cls);
+ if(classComponent == null)
+ return null;
MetaData component = classComponent.getComponentMetaData(Signature.getSignature(member));
if (component == null)
return null;
Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java 2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb3.metadata.plugins.loader;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
+import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AbstractMethodMetaDataLoader extends BasicMetaDataLoader
+{
+ private static final Logger log = Logger.getLogger(AbstractMethodMetaDataLoader.class);
+
+ @Override
+ public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+ {
+ return null;
+ }
+
+ public boolean isEmpty()
+ {
+ return false;
+ }
+
+ public AnnotationsItem retrieveAnnotations()
+ {
+ throw new RuntimeException("NYI");
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java 2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb3.metadata.plugins.loader;
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
+import org.jboss.metadata.spi.retrieval.AnnotationItem;
+import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public abstract class ClassMetaDataLoader extends BasicMetaDataLoader
+{
+ private static final Logger log = Logger.getLogger(ClassMetaDataLoader.class);
+
+ /** Component cache */
+ private Map<Signature, MetaDataRetrieval> cache = new ConcurrentHashMap<Signature, MetaDataRetrieval>();
+
+ protected abstract MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature);
+
+ protected ClassMetaDataLoader(ScopeKey key)
+ {
+ super(key);
+ }
+
+ @Override
+ public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+ {
+ MetaDataRetrieval retrieval = cache.get(signature);
+ if (retrieval != null)
+ return retrieval;
+
+ retrieval = createComponentMetaDataRetrieval(signature);
+
+ if(retrieval != null)
+ cache.put(signature, retrieval);
+
+ return retrieval;
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.metadata.spi.retrieval.MetaDataRetrieval#isEmpty()
+ */
+ public boolean isEmpty()
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.metadata.spi.retrieval.MetaDataRetrieval#retrieveAnnotations()
+ */
+ public AnnotationsItem retrieveAnnotations()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+ {
+ // Resources, EJBs etc
+ return null;
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java 2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.ejb3.metadata.plugins.loader;
+
+import java.lang.annotation.Annotation;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.interceptor.AroundInvoke;
+
+import org.jboss.ejb3.annotation.impl.AroundInvokeImpl;
+import org.jboss.ejb3.annotation.impl.PostConstructImpl;
+import org.jboss.ejb3.annotation.impl.PreDestroyImpl;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.spec.AroundInvokesMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
+import org.jboss.metadata.spi.retrieval.AnnotationItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.retrieval.simple.SimpleAnnotationItem;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.signature.MethodSignature;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class InterceptorClassMetaDataLoader extends ClassMetaDataLoader
+{
+ private static final Logger log = Logger.getLogger(InterceptorClassMetaDataLoader.class);
+
+ /**
+ * MethodMetaDataRetrieval.
+ */
+ protected class MethodMetaDataRetrieval extends AbstractMethodMetaDataLoader
+ {
+ /** The signature */
+ private MethodSignature signature;
+
+ /**
+ * Create a new MethodMetaDataRetrieval.
+ *
+ * @param methodSignature the signature
+ */
+ public MethodMetaDataRetrieval(MethodSignature methodSignature)
+ {
+ this.signature = methodSignature;
+ }
+
+ private <T extends Annotation> T createAnnotationImpl(Class<T> annotationImplType)
+ {
+ try
+ {
+ return annotationImplType.newInstance();
+ }
+ catch (InstantiationException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private AroundInvoke getAroundInvokeAnnotation(AroundInvokesMetaData callbacks)
+ {
+ if(callbacks == null || callbacks.isEmpty())
+ return null;
+
+ assert callbacks.size() == 1;
+ String methodName = callbacks.get(0).getMethodName();
+ if(methodName.equals(signature.getName()))
+ return new AroundInvokeImpl();
+ return null;
+ }
+
+ private <T extends Annotation> T getLifeCycleAnnotation(LifecycleCallbacksMetaData callbacks, Class<T> annotationImplType)
+ {
+ if(callbacks == null || callbacks.isEmpty())
+ return null;
+
+ assert callbacks.size() == 1;
+ String methodName = callbacks.get(0).getMethodName();
+ if(methodName.equals(signature.getName()))
+ return createAnnotationImpl(annotationImplType);
+ return null;
+ }
+
+ public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+ {
+ if(annotationType == AroundInvoke.class)
+ {
+ Annotation annotation = getAroundInvokeAnnotation(interceptorMetaData.getAroundInvokes());
+ if(annotation != null)
+ return new SimpleAnnotationItem<T>(annotationType.cast(annotation));
+ }
+ if(annotationType == PostConstruct.class)
+ {
+ Annotation lifeCycleAnnotation = getLifeCycleAnnotation(interceptorMetaData.getPostConstructs(), PostConstructImpl.class);
+ if(lifeCycleAnnotation != null)
+ return new SimpleAnnotationItem<T>(annotationType.cast(lifeCycleAnnotation));
+ }
+ else if(annotationType == PreDestroy.class)
+ {
+ Annotation lifeCycleAnnotation = getLifeCycleAnnotation(interceptorMetaData.getPreDestroys(), PreDestroyImpl.class);
+ if(lifeCycleAnnotation != null)
+ return new SimpleAnnotationItem<T>(annotationType.cast(lifeCycleAnnotation));
+ }
+ /* Example
+ JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
+ if (beanMetaData == null)
+ return null;
+
+ if (annotationType == TransactionTimeout.class)
+ {
+ MethodAttributesMetaData methodAttributes = beanMetaData.getMethodAttributes();
+ int timeout = methodAttributes.getMethodTransactionTimeout(signature.getName());
+ return new SimpleAnnotationItem(new TransactionTimeoutImpl(timeout));
+ }
+ */
+ return null;
+ }
+ }
+
+ private InterceptorMetaData interceptorMetaData;
+
+ public InterceptorClassMetaDataLoader(ScopeKey key, InterceptorMetaData interceptorMetaData)
+ {
+ super(key);
+ assert interceptorMetaData != null;
+ this.interceptorMetaData = interceptorMetaData;
+ }
+
+ @Override
+ protected MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature)
+ {
+ if(signature instanceof MethodSignature)
+ return new MethodMetaDataRetrieval((MethodSignature) signature);
+ return null;
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java 2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java 2008-01-11 11:47:47 UTC (rev 68877)
@@ -21,13 +21,19 @@
*/
package org.jboss.ejb3.test.metadata.interceptor.unit;
+import java.lang.reflect.Method;
import java.net.URL;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptors;
+import javax.interceptor.InvocationContext;
import junit.framework.TestCase;
import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.ejb3.test.metadata.interceptor.DummyInterceptor;
import org.jboss.ejb3.test.metadata.securitydomain.SecurityDomainBean;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
@@ -76,6 +82,17 @@
};
}
+ private void assertArrayEquals(Object expected[], Object actual[])
+ {
+ if(expected == actual)
+ return;
+ assertEquals(expected.length, actual.length);
+ for(int i = 0; i < expected.length; i++)
+ {
+ assertEquals(expected[i], actual[i]);
+ }
+ }
+
public void test1() throws Exception
{
// Bootstrap metadata
@@ -87,12 +104,25 @@
metaData.merge(null, ejbJarMetaData);
JBossEnterpriseBeanMetaData beanMetaData = metaData.getEnterpriseBean("InterceptedBean");
+ assertNotNull("beanMetaData is null", beanMetaData);
String canonicalObjectName = "Not important";
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
AnnotationRepositoryToMetaData repository = new AnnotationRepositoryToMetaData(SecurityDomainBean.class, beanMetaData, canonicalObjectName, classLoader);
Interceptors interceptors = (Interceptors) repository.resolveClassAnnotation(Interceptors.class);
assertNotNull(interceptors);
+ Class<?> expected[] = { DummyInterceptor.class };
+ assertArrayEquals(expected, interceptors.value());
- fail("NYI");
+ Class<?> parameterTypes[] = { InvocationContext.class };
+
+ Method aroundInvoke = DummyInterceptor.class.getMethod("aroundInvoke", parameterTypes);
+ assertTrue(repository.hasAnnotation(DummyInterceptor.class, aroundInvoke, AroundInvoke.class));
+ assertFalse(repository.hasAnnotation(DummyInterceptor.class, aroundInvoke, PostConstruct.class));
+
+ Method postConstruct = DummyInterceptor.class.getMethod("postConstruct", parameterTypes);
+ assertTrue(repository.hasAnnotation(DummyInterceptor.class, postConstruct, PostConstruct.class));
+
+ Method preDestroy = DummyInterceptor.class.getMethod("preDestroy", parameterTypes);
+ assertTrue(repository.hasAnnotation(DummyInterceptor.class, preDestroy, PreDestroy.class));
}
}
Modified: projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml 2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml 2008-01-11 11:47:47 UTC (rev 68877)
@@ -6,6 +6,11 @@
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<display-name>InterceptorsTest</display-name>
+ <enterprise-beans>
+ <session>
+ <ejb-name>InterceptedBean</ejb-name>
+ </session>
+ </enterprise-beans>
<interceptors>
<interceptor>
<interceptor-class>org.jboss.ejb3.test.metadata.interceptor.DummyInterceptor</interceptor-class>
Added: projects/ejb3/trunk/metadata/src/test/resources/log4j.xml
===================================================================
--- projects/ejb3/trunk/metadata/src/test/resources/log4j.xml (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/resources/log4j.xml 2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!-- -->
+<!-- Log4j Configuration -->
+<!-- -->
+<!-- ===================================================================== -->
+
+<!-- $Id$ -->
+
+<!--
+ | For more configuration infromation and examples see the Jakarta Log4j
+ | owebsite: http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+ <!-- ================================= -->
+ <!-- Preserve messages in a local file -->
+ <!-- ================================= -->
+
+ <!-- A time/date based rolling appender -->
+ <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
+ <param name="File" value="target/test.log"/>
+ <param name="Append" value="false"/>
+
+ <!-- Rollover at midnight each day -->
+ <param name="DatePattern" value="'.'yyyy-MM-dd"/>
+
+ <!-- Rollover at the top of each hour
+ <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
+ -->
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+
+ <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
+ <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+ -->
+ </layout>
+ </appender>
+
+ <!-- A size based file rolling appender
+ <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
+ <param name="File" value="${jboss.server.home.dir}/log/server.log"/>
+ <param name="Append" value="false"/>
+ <param name="MaxFileSize" value="500KB"/>
+ <param name="MaxBackupIndex" value="1"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+ </layout>
+ </appender>
+ -->
+
+ <!-- ============================== -->
+ <!-- Append messages to the console -->
+ <!-- ============================== -->
+
+ <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+ <param name="Target" value="System.out"/>
+ <param name="Threshold" value="INFO"/>
+
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+ </layout>
+ </appender>
+
+
+ <!-- ================ -->
+ <!-- Limit categories -->
+ <!-- ================ -->
+
+ <!-- Limit JBoss categories to INFO
+ <category name="org.jboss">
+ <priority value="INFO" class="org.jboss.logging.XLevel"/>
+ </category>
+ -->
+
+ <!-- Increase the priority threshold for the DefaultDS category
+ <category name="DefaultDS">
+ <priority value="FATAL"/>
+ </category>
+ -->
+
+ <!-- Decrease the priority threshold for the org.jboss.varia category
+ <category name="org.jboss.varia">
+ <priority value="DEBUG"/>
+ </category>
+ -->
+
+ <!--
+ | An example of enabling the custom TRACE level priority that is used
+ | by the JBoss internals to diagnose low level details. This example
+ | turns on TRACE level msgs for the org.jboss.ejb.plugins package and its
+ | subpackages. This will produce A LOT of logging output.
+ <category name="org.jboss.system">
+ <priority value="TRACE" class="org.jboss.logging.XLevel"/>
+ </category>
+ -->
+
+ <!-- ======================= -->
+ <!-- Setup the Root category -->
+ <!-- ======================= -->
+
+ <root>
+ <appender-ref ref="CONSOLE"/>
+ <appender-ref ref="FILE"/>
+ </root>
+
+</log4j:configuration>
Property changes on: projects/ejb3/trunk/metadata/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
More information about the jboss-cvs-commits
mailing list