[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