[jboss-cvs] JBossAS SVN: r68904 - 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 15:27:07 EST 2008
Author: wolfc
Date: 2008-01-11 15:27:07 -0500 (Fri, 11 Jan 2008)
New Revision: 68904
Added:
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/ComponentMetaDataLoaderFactory.java
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/MetaDataBridge.java
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMetaDataLoader.java
projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/BridgedMetaDataLoader.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/BeanInterceptorMetaDataBridge.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/EnvironmentInterceptorMetaDataBridge.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorComponentMetaDataLoaderFactory.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorMetaDataBridge.java
projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/SecurityDomainMetaDataBridge.java
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/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/java/org/jboss/ejb3/test/metadata/interceptor/InterceptedBean.java
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/securitydomain/unit/SecurityDomainTestCase.java
projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml
Log:
Created meta data bridge
Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/ComponentMetaDataLoaderFactory.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/ComponentMetaDataLoaderFactory.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/ComponentMetaDataLoaderFactory.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,50 @@
+/*
+ * 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;
+
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * The EJBMetaDataLoader visits all ComponentMetaDataLoaderFactories
+ * until it finds one that will create a MetaDataRetrieval for the given
+ * signature.
+ *
+ * For example it could ask for a retrieval given the signature
+ * of an interceptor class. In that case an interceptor meta data loader must
+ * be instantiated using the interceptor meta data from the bean meta data.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public interface ComponentMetaDataLoaderFactory<M>
+{
+ /**
+ * @param metaData meta data to find the component in
+ * @param signature the signature of the sub-component
+ * @param key
+ * @param classLoader
+ * @return the retrieval for the sub-component or null if nothing sensible is found
+ */
+ MetaDataRetrieval createComponentMetaDataRetrieval(M metaData, Signature signature, ScopeKey key, ClassLoader classLoader);
+}
Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/ComponentMetaDataLoaderFactory.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
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 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -25,6 +25,7 @@
import java.util.ArrayList;
import java.util.List;
+import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptors;
import org.jboss.ejb3.annotation.SecurityDomain;
@@ -34,12 +35,14 @@
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.jboss.JBossMessageDrivenBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.spec.AroundInvokesMetaData;
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;
import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
@@ -55,7 +58,7 @@
* @author <a href="adrian at jboss.com">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
-public class EJBMetaDataLoader extends ClassMetaDataLoader
+public class EJBMetaDataLoader extends ClassMetaDataLoader<JBossEnterpriseBeanMetaData>
{
/** The container */
private JBossEnterpriseBeanMetaData beanMetaData;
@@ -71,7 +74,7 @@
*/
public EJBMetaDataLoader(ScopeKey key, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
{
- super(key);
+ super(key, beanMetaData);
assert classLoader != null : "classLoader is null";
this.beanMetaData = beanMetaData;
@@ -201,11 +204,8 @@
/**
* MethodMetaDataRetrieval.
*/
- private class MethodMetaDataRetrieval extends BasicMetaDataLoader
+ private class MethodMetaDataRetrieval extends ClassMetaDataLoader<JBossEnterpriseBeanMetaData>.MethodMetaDataRetrieval
{
- /** The signature */
- private MethodSignature signature;
-
/**
* Create a new MethodMetaDataRetrieval.
*
@@ -213,7 +213,7 @@
*/
public MethodMetaDataRetrieval(MethodSignature methodSignature)
{
- this.signature = methodSignature;
+ super(methodSignature);
}
public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
@@ -228,6 +228,25 @@
public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
{
+ if(beanMetaData == null)
+ return null;
+
+ if(annotationType == AroundInvoke.class)
+ {
+ AroundInvokesMetaData aroundInvokes = null;
+// if(beanMetaData instanceof JBossGenericBeanMetaData)
+// aroundInvokes = ((JBossGenericBeanMetaData) beanMetaData).getAroundInvokes();
+ if(beanMetaData instanceof JBossMessageDrivenBeanMetaData)
+ aroundInvokes = ((JBossMessageDrivenBeanMetaData) beanMetaData).getAroundInvokes();
+ else if(beanMetaData instanceof JBossSessionBeanMetaData)
+ aroundInvokes = ((JBossSessionBeanMetaData) beanMetaData).getAroundInvokes();
+ if(aroundInvokes != null)
+ {
+ Annotation annotation = getAroundInvokeAnnotation(aroundInvokes);
+ if(annotation != null)
+ return new SimpleAnnotationItem<T>(annotationType.cast(annotation));
+ }
+ }
/* Example
JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
if (beanMetaData == null)
@@ -240,7 +259,7 @@
return new SimpleAnnotationItem(new TransactionTimeoutImpl(timeout));
}
*/
- return null;
+ return super.retrieveAnnotation(annotationType);
}
public AnnotationsItem retrieveAnnotations()
Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/MetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/MetaDataBridge.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/MetaDataBridge.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,57 @@
+/*
+ * 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;
+
+import java.lang.annotation.Annotation;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public interface MetaDataBridge<M>
+{
+ /**
+ * Retrieve a class annotation.
+ *
+ * @param <A>
+ * @param annotationClass
+ * @param metaData
+ * @param classLoader
+ * @return the annotation or null if not found
+ */
+ <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, M metaData, ClassLoader classLoader);
+
+ /**
+ * Retrieve a method annotation.
+ *
+ * @param <A>
+ * @param annotationClass
+ * @param metaData
+ * @param classLoader
+ * @param methodName
+ * @param parameterNames
+ * @return the annotation of null if not found
+ */
+ <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, M metaData, ClassLoader classLoader, String methodName, String ... parameterNames);
+}
Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/MetaDataBridge.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
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 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -35,7 +35,9 @@
import org.jboss.annotation.factory.AnnotationCreator;
import org.jboss.aop.annotation.AnnotationRepository;
-import org.jboss.ejb3.metadata.EJBMetaDataLoader;
+import org.jboss.ejb3.metadata.ComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ejb3.metadata.plugins.loader.BridgedMetaDataLoader;
import org.jboss.ejb3.metadata.spi.signature.ClassSignature;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
@@ -73,6 +75,8 @@
/** The classloader */
private ClassLoader classLoader;
+
+ private BridgedMetaDataLoader<JBossEnterpriseBeanMetaData> bridgedMetaDataLoader;
/**
*
@@ -92,14 +96,25 @@
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, classLoader);
+ //MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, beanMetaData, classLoader);
+ this.bridgedMetaDataLoader = new BridgedMetaDataLoader<JBossEnterpriseBeanMetaData>(instanceScope, beanMetaData, classLoader);
MetaDataContext classContext = new AbstractMetaDataContext(classMetaData);
- MetaDataRetrieval[] instance = { dynamicXml, mutableMetaData };
+ MetaDataRetrieval[] instance = { bridgedMetaDataLoader, mutableMetaData };
MetaDataContext instanceContext = new AbstractMetaDataContext(classContext, Arrays.asList(instance));
metaData = new MetaDataRetrievalToMetaDataBridge(instanceContext);
}
+ public boolean addComponentMetaDataLoaderFactory(ComponentMetaDataLoaderFactory<JBossEnterpriseBeanMetaData> componentMetaDataLoaderFactory)
+ {
+ return bridgedMetaDataLoader.addComponentMetaDataLoaderFactory(componentMetaDataLoaderFactory);
+ }
+
+ public boolean addMetaDataBridge(MetaDataBridge<JBossEnterpriseBeanMetaData> bridge)
+ {
+ return bridgedMetaDataLoader.addMetaDataBridge(bridge);
+ }
+
protected static Signature getSignature(Class<?> cls)
{
return new ClassSignature(cls);
Copied: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMetaDataLoader.java (from rev 68877, 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/AbstractMetaDataLoader.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMetaDataLoader.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,61 @@
+/*
+ * 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.scope.ScopeKey;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public abstract class AbstractMetaDataLoader extends BasicMetaDataLoader
+{
+ private static final Logger log = Logger.getLogger(AbstractMetaDataLoader.class);
+
+ protected AbstractMetaDataLoader(ScopeKey key)
+ {
+ super(key);
+ }
+
+ /**
+ * It depends on the question being asked. For now the easy
+ * way out: not empty.
+ */
+ public boolean isEmpty()
+ {
+ return false;
+ }
+
+ /**
+ * Do not call.
+ */
+ @Deprecated
+ public AnnotationsItem retrieveAnnotations()
+ {
+ throw new RuntimeException("NYI");
+ }
+}
Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/BridgedMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/BridgedMetaDataLoader.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/BridgedMetaDataLoader.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,157 @@
+/*
+ * 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.ArrayList;
+import java.util.List;
+
+import org.jboss.ejb3.metadata.ComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.logging.Logger;
+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 BridgedMetaDataLoader<M> extends AbstractMetaDataLoader
+{
+ private static final Logger log = Logger.getLogger(BridgedMetaDataLoader.class);
+
+ /**
+ * MethodMetaDataRetrieval.
+ */
+ private class MethodMetaDataRetrieval extends AbstractMethodMetaDataLoader
+ {
+ /** The signature */
+ private MethodSignature signature;
+
+ /**
+ * Create a new MethodMetaDataRetrieval.
+ *
+ * @param methodSignature the signature
+ */
+ public MethodMetaDataRetrieval(MethodSignature methodSignature)
+ {
+ this.signature = methodSignature;
+ }
+
+ public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+ {
+ if(metaData == null)
+ return null;
+
+ for(MetaDataBridge<M> bridge : bridges)
+ {
+ T annotation = bridge.retrieveAnnotation(annotationType, metaData, classLoader, signature.getName(), signature.getParameters());
+ if(annotation != null)
+ return new SimpleAnnotationItem<T>(annotation);
+ }
+ return null;
+ }
+ }
+
+ private List<ComponentMetaDataLoaderFactory<M>> factories = new ArrayList<ComponentMetaDataLoaderFactory<M>>();
+
+ private List<MetaDataBridge<M>> bridges = new ArrayList<MetaDataBridge<M>>();
+
+ private M metaData;
+
+ private ClassLoader classLoader;
+
+ /**
+ *
+ * @param key
+ * @param metaData the meta data or null
+ * @param classLoader
+ */
+ public BridgedMetaDataLoader(ScopeKey key, M metaData, ClassLoader classLoader)
+ {
+ this(key, metaData, classLoader, null);
+ }
+
+ public BridgedMetaDataLoader(ScopeKey key, M metaData, ClassLoader classLoader, List<MetaDataBridge<M>> defaultBridges)
+ {
+ super(key);
+
+ assert classLoader != null : "classLoader is null";
+
+ this.metaData = metaData;
+ this.classLoader = classLoader;
+ if(defaultBridges != null)
+ bridges.addAll(defaultBridges);
+ }
+
+ public boolean addComponentMetaDataLoaderFactory(ComponentMetaDataLoaderFactory<M> componentMetaDataLoaderFactory)
+ {
+ return factories.add(componentMetaDataLoaderFactory);
+ }
+
+ public boolean addMetaDataBridge(MetaDataBridge<M> bridge)
+ {
+ return bridges.add(bridge);
+ }
+
+ @Override
+ public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+ {
+ if(metaData == null)
+ return null;
+
+ for(ComponentMetaDataLoaderFactory<M> factory : factories)
+ {
+ MetaDataRetrieval retrieval = factory.createComponentMetaDataRetrieval(metaData, signature, getScope(), classLoader);
+ if(retrieval != null)
+ return retrieval;
+ }
+
+ // TODO: shouldn't this be a factory?
+ if(signature instanceof MethodSignature)
+ return new MethodMetaDataRetrieval((MethodSignature) signature);
+
+ return super.getComponentMetaDataRetrieval(signature);
+ }
+
+ @Override
+ public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+ {
+ if(metaData == null)
+ return null;
+
+ // Resources, EJBs etc
+ for(MetaDataBridge<M> bridge : bridges)
+ {
+ T annotation = bridge.retrieveAnnotation(annotationType, metaData, classLoader);
+ if(annotation != null)
+ return new SimpleAnnotationItem<T>(annotation);
+ }
+ return null;
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/BridgedMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Modified: 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 2008-01-11 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -25,12 +25,24 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+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.javaee.spec.Environment;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
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.retrieval.simple.SimpleAnnotationItem;
import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.signature.MethodSignature;
import org.jboss.metadata.spi.signature.Signature;
/**
@@ -39,18 +51,110 @@
* @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
* @version $Revision: $
*/
-public abstract class ClassMetaDataLoader extends BasicMetaDataLoader
+public abstract class ClassMetaDataLoader<M extends Environment> extends BasicMetaDataLoader
{
private static final Logger log = Logger.getLogger(ClassMetaDataLoader.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;
+ }
+
+ protected <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);
+ }
+ }
+
+ protected 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 == PostConstruct.class)
+ {
+ Annotation lifeCycleAnnotation = getLifeCycleAnnotation(metaData.getPostConstructs(), PostConstructImpl.class);
+ if(lifeCycleAnnotation != null)
+ return new SimpleAnnotationItem<T>(annotationType.cast(lifeCycleAnnotation));
+ }
+ else if(annotationType == PreDestroy.class)
+ {
+ Annotation lifeCycleAnnotation = getLifeCycleAnnotation(metaData.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;
+ }
+ }
+
+ /** The meta data */
+ private M metaData;
+
/** Component cache */
private Map<Signature, MetaDataRetrieval> cache = new ConcurrentHashMap<Signature, MetaDataRetrieval>();
protected abstract MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature);
- protected ClassMetaDataLoader(ScopeKey key)
+ protected ClassMetaDataLoader(ScopeKey key, M metaData)
{
super(key);
+ this.metaData = metaData;
}
@Override
Modified: 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 2008-01-11 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -23,17 +23,10 @@
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;
@@ -47,18 +40,15 @@
* @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
* @version $Revision: $
*/
-public class InterceptorClassMetaDataLoader extends ClassMetaDataLoader
+public class InterceptorClassMetaDataLoader extends ClassMetaDataLoader<InterceptorMetaData>
{
private static final Logger log = Logger.getLogger(InterceptorClassMetaDataLoader.class);
/**
* MethodMetaDataRetrieval.
*/
- protected class MethodMetaDataRetrieval extends AbstractMethodMetaDataLoader
+ protected class MethodMetaDataRetrieval extends ClassMetaDataLoader<InterceptorMetaData>.MethodMetaDataRetrieval
{
- /** The signature */
- private MethodSignature signature;
-
/**
* Create a new MethodMetaDataRetrieval.
*
@@ -66,49 +56,10 @@
*/
public MethodMetaDataRetrieval(MethodSignature methodSignature)
{
- this.signature = methodSignature;
+ super(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;
- }
-
+ @Override
public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
{
if(annotationType == AroundInvoke.class)
@@ -117,18 +68,6 @@
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)
@@ -141,7 +80,7 @@
return new SimpleAnnotationItem(new TransactionTimeoutImpl(timeout));
}
*/
- return null;
+ return super.retrieveAnnotation(annotationType);
}
}
@@ -149,7 +88,7 @@
public InterceptorClassMetaDataLoader(ScopeKey key, InterceptorMetaData interceptorMetaData)
{
- super(key);
+ super(key, interceptorMetaData);
assert interceptorMetaData != null;
this.interceptorMetaData = interceptorMetaData;
}
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/BeanInterceptorMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/BeanInterceptorMetaDataBridge.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/BeanInterceptorMetaDataBridge.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,124 @@
+/*
+ * 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.test.metadata.interceptor;
+
+import java.lang.annotation.Annotation;
+
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptors;
+
+import org.jboss.ejb3.annotation.impl.InterceptorsImpl;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.spec.AroundInvokesMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorBindingMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorBindingsMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorClassesMetaData;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class BeanInterceptorMetaDataBridge extends EnvironmentInterceptorMetaDataBridge<JBossEnterpriseBeanMetaData> implements MetaDataBridge<JBossEnterpriseBeanMetaData>
+{
+ private static final Logger log = Logger.getLogger(BeanInterceptorMetaDataBridge.class);
+
+ private Class<?> loadClass(ClassLoader classLoader, String name)
+ {
+ try
+ {
+ return classLoader.loadClass(name);
+ }
+ catch (ClassNotFoundException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
+ {
+ if(annotationClass == 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 ejbName = beanMetaData.getEjbName();
+ 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(classLoader, interceptorClassName));
+ }
+ return annotationClass.cast(interceptors);
+ }
+ }
+ }
+ }
+ return super.retrieveAnnotation(annotationClass, beanMetaData, classLoader);
+ }
+
+ @Override
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader, String methodName, String... parameterNames)
+ {
+ if(annotationClass == AroundInvoke.class)
+ {
+ AroundInvokesMetaData aroundInvokes = null;
+// if(beanMetaData instanceof JBossGenericBeanMetaData)
+// aroundInvokes = ((JBossGenericBeanMetaData) beanMetaData).getAroundInvokes();
+ if(beanMetaData instanceof JBossMessageDrivenBeanMetaData)
+ aroundInvokes = ((JBossMessageDrivenBeanMetaData) beanMetaData).getAroundInvokes();
+ else if(beanMetaData instanceof JBossSessionBeanMetaData)
+ aroundInvokes = ((JBossSessionBeanMetaData) beanMetaData).getAroundInvokes();
+ if(aroundInvokes != null)
+ {
+ Annotation annotation = getAroundInvokeAnnotation(aroundInvokes, methodName);
+ if(annotation != null)
+ return annotationClass.cast(annotation);
+ }
+ }
+ return super.retrieveAnnotation(annotationClass, beanMetaData, classLoader, methodName, parameterNames);
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/BeanInterceptorMetaDataBridge.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/EnvironmentInterceptorMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/EnvironmentInterceptorMetaDataBridge.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/EnvironmentInterceptorMetaDataBridge.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,111 @@
+/*
+ * 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.test.metadata.interceptor;
+
+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.ejb3.metadata.MetaDataBridge;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.spec.AroundInvokesMetaData;
+import org.jboss.metadata.javaee.spec.Environment;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
+
+/**
+ * Does only interceptor stuff.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class EnvironmentInterceptorMetaDataBridge<M extends Environment> implements MetaDataBridge<M>
+{
+ private static final Logger log = Logger.getLogger(EnvironmentInterceptorMetaDataBridge.class);
+
+ protected <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);
+ }
+ }
+
+ protected AroundInvoke getAroundInvokeAnnotation(AroundInvokesMetaData callbacks, String methodName)
+ {
+ if(callbacks == null || callbacks.isEmpty())
+ return null;
+
+ assert callbacks.size() == 1;
+ String callbackMethodName = callbacks.get(0).getMethodName();
+ if(methodName.equals(callbackMethodName))
+ return new AroundInvokeImpl();
+ return null;
+ }
+
+ private <T extends Annotation> T getLifeCycleAnnotation(LifecycleCallbacksMetaData callbacks, Class<T> annotationImplType, String methodName)
+ {
+ if(callbacks == null || callbacks.isEmpty())
+ return null;
+
+ assert callbacks.size() == 1;
+ // TODO: callbacks[0].className
+ String callbackMethodName = callbacks.get(0).getMethodName();
+ if(methodName.equals(callbackMethodName))
+ return createAnnotationImpl(annotationImplType);
+ return null;
+ }
+
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, M metaData, ClassLoader classLoader)
+ {
+ return null;
+ }
+
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, M metaData, ClassLoader classLoader, String methodName, String... parameterNames)
+ {
+ if(annotationClass == PostConstruct.class)
+ {
+ PostConstruct lifeCycleAnnotation = getLifeCycleAnnotation(metaData.getPostConstructs(), PostConstructImpl.class, methodName);
+ if(lifeCycleAnnotation != null)
+ return annotationClass.cast(lifeCycleAnnotation);
+ }
+ else if(annotationClass == PreDestroy.class)
+ {
+ PreDestroy lifeCycleAnnotation = getLifeCycleAnnotation(metaData.getPreDestroys(), PreDestroyImpl.class, methodName);
+ if(lifeCycleAnnotation != null)
+ return annotationClass.cast(lifeCycleAnnotation);
+ }
+ return null;
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/EnvironmentInterceptorMetaDataBridge.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/InterceptedBean.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptedBean.java 2008-01-11 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptedBean.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -21,6 +21,8 @@
*/
package org.jboss.ejb3.test.metadata.interceptor;
+import javax.interceptor.InvocationContext;
+
/**
* Nothing to see, move along.
*
@@ -29,4 +31,8 @@
*/
public class InterceptedBean
{
+ public void aroundInvoke(InvocationContext ctx)
+ {
+
+ }
}
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorComponentMetaDataLoaderFactory.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorComponentMetaDataLoaderFactory.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorComponentMetaDataLoaderFactory.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,79 @@
+/*
+ * 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.test.metadata.interceptor;
+
+import java.util.List;
+
+import org.jboss.ejb3.metadata.ComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ejb3.metadata.plugins.loader.BridgedMetaDataLoader;
+import org.jboss.ejb3.metadata.spi.signature.ClassSignature;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
+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 class InterceptorComponentMetaDataLoaderFactory implements ComponentMetaDataLoaderFactory<JBossEnterpriseBeanMetaData>
+{
+ private static final Logger log = Logger.getLogger(InterceptorComponentMetaDataLoaderFactory.class);
+
+ private List<MetaDataBridge<InterceptorMetaData>> defaultBridges;
+
+ public InterceptorComponentMetaDataLoaderFactory(List<MetaDataBridge<InterceptorMetaData>> defaultBridges)
+ {
+ assert defaultBridges != null : "defaultBridges is null";
+ assert !defaultBridges.isEmpty() : "defaultBridges is empty"; // equally stupid
+ this.defaultBridges = defaultBridges;
+ }
+
+ public MetaDataRetrieval createComponentMetaDataRetrieval(JBossEnterpriseBeanMetaData beanMetaData, Signature signature, ScopeKey key, ClassLoader classLoader)
+ {
+ if(signature instanceof ClassSignature)
+ {
+ InterceptorMetaData interceptorMetaData = findInterceptor(beanMetaData, signature.getName());
+ if(interceptorMetaData != null)
+ return new BridgedMetaDataLoader<InterceptorMetaData>(key, interceptorMetaData, classLoader, defaultBridges);
+ }
+ return null;
+ }
+
+ private InterceptorMetaData findInterceptor(JBossEnterpriseBeanMetaData beanMetaData, String name)
+ {
+ InterceptorsMetaData interceptors = beanMetaData.getEjbJarMetaData().getInterceptors();
+ for(InterceptorMetaData interceptorMetaData : interceptors)
+ {
+ if(interceptorMetaData.getInterceptorClass().equals(name))
+ return interceptorMetaData;
+ }
+ return null;
+ }
+
+}
Property changes on: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorComponentMetaDataLoaderFactory.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:eol-style
+ native
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorMetaDataBridge.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorMetaDataBridge.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,59 @@
+/*
+ * 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.test.metadata.interceptor;
+
+import java.lang.annotation.Annotation;
+
+import javax.interceptor.AroundInvoke;
+
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class InterceptorMetaDataBridge extends EnvironmentInterceptorMetaDataBridge<InterceptorMetaData> implements MetaDataBridge<InterceptorMetaData>
+{
+ private static final Logger log = Logger.getLogger(InterceptorMetaDataBridge.class);
+
+ @Override
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, InterceptorMetaData metaData, ClassLoader classLoader)
+ {
+ return super.retrieveAnnotation(annotationClass, metaData, classLoader);
+ }
+
+ @Override
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, InterceptorMetaData interceptorMetaData, ClassLoader classLoader, String methodName, String... parameterNames)
+ {
+ if(annotationClass == AroundInvoke.class)
+ {
+ Annotation annotation = getAroundInvokeAnnotation(interceptorMetaData.getAroundInvokes(), methodName);
+ if(annotation != null)
+ return annotationClass.cast(annotation);
+ }
+ return super.retrieveAnnotation(annotationClass, interceptorMetaData, classLoader, methodName, parameterNames);
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/InterceptorMetaDataBridge.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 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -23,6 +23,8 @@
import java.lang.reflect.Method;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@@ -32,13 +34,19 @@
import junit.framework.TestCase;
+import org.jboss.ejb3.metadata.MetaDataBridge;
import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.ejb3.test.metadata.interceptor.BeanInterceptorMetaDataBridge;
import org.jboss.ejb3.test.metadata.interceptor.DummyInterceptor;
+import org.jboss.ejb3.test.metadata.interceptor.InterceptedBean;
+import org.jboss.ejb3.test.metadata.interceptor.InterceptorComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.test.metadata.interceptor.InterceptorMetaDataBridge;
import org.jboss.ejb3.test.metadata.securitydomain.SecurityDomainBean;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
import org.jboss.metadata.ejb.spec.EjbJar30MetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
import org.jboss.xb.binding.Unmarshaller;
import org.jboss.xb.binding.UnmarshallerFactory;
import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
@@ -105,9 +113,16 @@
JBossEnterpriseBeanMetaData beanMetaData = metaData.getEnterpriseBean("InterceptedBean");
assertNotNull("beanMetaData is null", beanMetaData);
+
+ // Bootstrap meta data bridge
String canonicalObjectName = "Not important";
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
AnnotationRepositoryToMetaData repository = new AnnotationRepositoryToMetaData(SecurityDomainBean.class, beanMetaData, canonicalObjectName, classLoader);
+ List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
+ interceptorBridges.add(new InterceptorMetaDataBridge());
+ repository.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
+ repository.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+
Interceptors interceptors = (Interceptors) repository.resolveClassAnnotation(Interceptors.class);
assertNotNull(interceptors);
Class<?> expected[] = { DummyInterceptor.class };
@@ -124,5 +139,8 @@
Method preDestroy = DummyInterceptor.class.getMethod("preDestroy", parameterTypes);
assertTrue(repository.hasAnnotation(DummyInterceptor.class, preDestroy, PreDestroy.class));
+
+ Method beanAroundInvoke = InterceptedBean.class.getMethod("aroundInvoke", InvocationContext.class);
+ assertTrue(repository.hasAnnotation(beanAroundInvoke, AroundInvoke.class));
}
}
Added: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/SecurityDomainMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/SecurityDomainMetaDataBridge.java (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/SecurityDomainMetaDataBridge.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -0,0 +1,57 @@
+/*
+ * 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.test.metadata.securitydomain;
+
+import java.lang.annotation.Annotation;
+
+import org.jboss.ejb3.annotation.SecurityDomain;
+import org.jboss.ejb3.annotation.impl.SecurityDomainImpl;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class SecurityDomainMetaDataBridge implements MetaDataBridge<JBossEnterpriseBeanMetaData>
+{
+ private static final Logger log = Logger.getLogger(SecurityDomainMetaDataBridge.class);
+
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
+ {
+ if (annotationClass == SecurityDomain.class)
+ {
+ String securityDomain = beanMetaData.getSecurityDomain();
+ if (securityDomain != null)
+ return annotationClass.cast(new SecurityDomainImpl(securityDomain));
+ }
+ return null;
+ }
+
+ public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader, String methodName, String... parameterNames)
+ {
+ return null;
+ }
+}
Property changes on: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/SecurityDomainMetaDataBridge.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/securitydomain/unit/SecurityDomainTestCase.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/unit/SecurityDomainTestCase.java 2008-01-11 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/securitydomain/unit/SecurityDomainTestCase.java 2008-01-11 20:27:07 UTC (rev 68904)
@@ -28,6 +28,7 @@
import org.jboss.ejb3.annotation.SecurityDomain;
import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
import org.jboss.ejb3.test.metadata.securitydomain.SecurityDomainBean;
+import org.jboss.ejb3.test.metadata.securitydomain.SecurityDomainMetaDataBridge;
import org.jboss.logging.Logger;
import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
@@ -83,9 +84,14 @@
JBoss50MetaData metaData = (JBoss50MetaData) unmarshaller.unmarshal(url.toString(), schemaResolverForClass(JBoss50MetaData.class));
JBossEnterpriseBeanMetaData beanMetaData = metaData.getEnterpriseBean("SecurityDomainBean");
+ assertNotNull(beanMetaData);
+
+ // Bootstrap meta data bridge
String canonicalObjectName = "Not important";
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
AnnotationRepositoryToMetaData repository = new AnnotationRepositoryToMetaData(SecurityDomainBean.class, beanMetaData, canonicalObjectName, classLoader);
+ repository.addMetaDataBridge(new SecurityDomainMetaDataBridge());
+
SecurityDomain securityDomain = (SecurityDomain) repository.resolveClassAnnotation(SecurityDomain.class);
assertNotNull(securityDomain);
assertEquals("test", securityDomain.value());
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 20:00:10 UTC (rev 68903)
+++ projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml 2008-01-11 20:27:07 UTC (rev 68904)
@@ -9,6 +9,9 @@
<enterprise-beans>
<session>
<ejb-name>InterceptedBean</ejb-name>
+ <around-invoke>
+ <method-name>aroundInvoke</method-name>
+ </around-invoke>
</session>
</enterprise-beans>
<interceptors>
More information about the jboss-cvs-commits
mailing list