[jboss-cvs] JBossAS SVN: r72439 - in projects/ejb3/trunk: interceptors and 38 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 18 07:44:48 EDT 2008


Author: kabir.khan at jboss.com
Date: 2008-04-18 07:44:47 -0400 (Fri, 18 Apr 2008)
New Revision: 72439

Added:
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/InterceptorOrderBean.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/MetadataBean.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/unit/
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/unit/BadBindingTestCase.java
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding-with-method/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding-with-method/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding-with-method/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding-with-method/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding-with-method/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding-with-method/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding-with-method/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding-with-method/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding-with-method/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding-with-method/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding-with-method/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding-with-method/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding-with-method/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding-with-method/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding-with-method/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding-with-method/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding/META-INF/
   projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding/META-INF/ejb-jar.xml
Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
   projects/ejb3/trunk/interceptors/
   projects/ejb3/trunk/interceptors/pom.xml
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/lang/ClassHelper.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/AdditiveBeanInterceptorMetaDataBridge.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/additive/unit/AdditiveTestCase.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/AnnotatedBean.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/unit/DefaultInterceptorsTestCase.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/lifecycle/unit/CallbackMethodDescriptorTestCase.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/metadata/unit/MetadataTestCase.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/order/unit/InterceptorChainTestCase.java
   projects/ejb3/trunk/interceptors/src/test/resources/defaultinterceptors/META-INF/ejb-jar.xml
Log:
[EJBTHREE-1295] Optimize BeanInterceptorMetaDataBridge

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -191,7 +191,7 @@
       List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
       interceptorBridges.add(new InterceptorMetaDataBridge());
       annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-      annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass));
+      annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
       
       //Add a security domain bridge
       annotations.addMetaDataBridge(new SecurityDomainMetaDataBridge());


Property changes on: projects/ejb3/trunk/interceptors
___________________________________________________________________
Name: svn:ignore
   - target
eclipse-target
coverage.ec

   + target
eclipse-target
coverage.ec
test-output


Modified: projects/ejb3/trunk/interceptors/pom.xml
===================================================================
--- projects/ejb3/trunk/interceptors/pom.xml	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/pom.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -47,6 +47,11 @@
 
     <!-- External -->
     <dependency>
+      <groupId>org.jboss</groupId>
+      <artifactId>jboss-reflect</artifactId>
+      <version>2.0.0.Beta12</version>
+    </dependency>
+    <dependency>
       <groupId>org.jboss.logging</groupId>
       <artifactId>jboss-logging-spi</artifactId>
     </dependency>

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/lang/ClassHelper.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/lang/ClassHelper.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/lang/ClassHelper.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -23,13 +23,15 @@
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Methods which should have been in Class.
  *
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
+ * @version $Revision$
  */
 public class ClassHelper
 {
@@ -80,6 +82,34 @@
    }
    
    /**
+    * Returns all public, private and package protected methods including
+    * inherited ones in a map indexed by name.
+    * 
+    * (Slow method)
+    * 
+    * @param cls
+    * @return
+    */
+   public static Map<String, List<Method>> getAllMethodsMap(Class<?> cls) 
+   {
+      Map<String, List<Method>> methodMap = new HashMap<String, List<Method>>();  
+      ArrayList<Method> list = new ArrayList<Method>();
+      populateAllMethods(cls, list);
+      
+      for (Method method : list)
+      {
+         List<Method> methods = methodMap.get(method.getName());
+         if (methods == null)
+         {
+            methods = new ArrayList<Method>();
+            methodMap.put(method.getName(), methods);
+         }
+         methods.add(method);
+      }
+      return methodMap;
+   }
+   
+   /**
     * Find all methods starting with the most general super class.
     * (See 12.4.1 bullet 4)
     * 

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/AdditiveBeanInterceptorMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/AdditiveBeanInterceptorMetaDataBridge.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/AdditiveBeanInterceptorMetaDataBridge.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -37,18 +37,15 @@
  * TODO: additivity is probably also a cross component function
  *
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
- * @version $Revision: $
+ * @version $Revision$
  */
 public class AdditiveBeanInterceptorMetaDataBridge extends BeanInterceptorMetaDataBridge
 {
    private static final Logger log = Logger.getLogger(AdditiveBeanInterceptorMetaDataBridge.class);
    
-   private Class<?> beanClass;
-   
-   public AdditiveBeanInterceptorMetaDataBridge(Class<?> beanClass)
+   public AdditiveBeanInterceptorMetaDataBridge(Class<?> beanClass, ClassLoader classLoader, JBossEnterpriseBeanMetaData beanMetaData)
    {
-      assert beanClass != null : "beanClass is null";
-      this.beanClass = beanClass;
+      super(beanClass, classLoader, beanMetaData);
    }
    
    private static boolean isMetadataComplete(JBossEnterpriseBeanMetaData beanMetaData)
@@ -63,7 +60,7 @@
       {
          InterceptorsImpl interceptors = new InterceptorsImpl();
          if(!isMetadataComplete(beanMetaData))
-            interceptors.add(beanClass.getAnnotation(Interceptors.class));
+            interceptors.add(getBeanClass().getAnnotation(Interceptors.class));
          
          interceptors.add(super.retrieveAnnotation(Interceptors.class, beanMetaData, classLoader));
          

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/metadata/BeanInterceptorMetaDataBridge.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -22,9 +22,12 @@
 package org.jboss.ejb3.interceptors.metadata;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -32,6 +35,7 @@
 import javax.ejb.PrePassivate;
 import javax.interceptor.AroundInvoke;
 import javax.interceptor.Interceptors;
+import javax.interceptor.InvocationContext;
 
 import org.jboss.ejb3.interceptors.annotation.impl.InterceptorsImpl;
 import org.jboss.ejb3.interceptors.annotation.impl.PostActivateImpl;
@@ -42,10 +46,13 @@
 import org.jboss.ejb3.interceptors.aop.annotation.DefaultInterceptorsImpl;
 import org.jboss.ejb3.interceptors.aop.annotation.InterceptorOrder;
 import org.jboss.ejb3.interceptors.aop.annotation.InterceptorOrderImpl;
+import org.jboss.ejb3.interceptors.lang.ClassHelper;
 import org.jboss.ejb3.interceptors.util.InterceptorCollection;
 import org.jboss.ejb3.metadata.MetaDataBridge;
 import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.jboss.JBossAssemblyDescriptorMetaData;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
 import org.jboss.metadata.ejb.jboss.JBossMessageDrivenBeanMetaData;
 import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
 import org.jboss.metadata.ejb.spec.AroundInvokesMetaData;
@@ -54,6 +61,8 @@
 import org.jboss.metadata.ejb.spec.InterceptorClassesMetaData;
 import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
 import org.jboss.metadata.ejb.spec.NamedMethodMetaData;
+import org.jboss.metadata.spi.signature.MethodSignature;
+import org.jboss.metadata.spi.signature.Signature;
 
 /**
  * Comment
@@ -65,6 +74,46 @@
 {
    private static final Logger log = Logger.getLogger(BeanInterceptorMetaDataBridge.class);
 
+   private volatile boolean initialisedBean;
+   
+   //Class level stuff
+   private DefaultInterceptors defaultInterceptors;
+   private Interceptors interceptors;
+   private InterceptorOrder interceptorOrder;
+   
+   //Method-level things
+   private Map<Signature, Interceptors> methodInterceptors = new HashMap<Signature, Interceptors>(); 
+   private Map<Signature, InterceptorOrder> methodInterceptorOrders = new HashMap<Signature, InterceptorOrder>();
+   
+   
+   //Bean class methods
+   private Map<String, AroundInvoke> aroundInvokes;
+   private Map<String, PostConstruct> postConstructs;
+   private Map<String, PostActivate> postActivates;
+   private Map<String, PrePassivate> prePassivates;
+   private Map<String, PreDestroy> preDestroys;
+   
+   private Class<?> beanClass;
+   private ClassLoader classLoader;
+   private JBossEnterpriseBeanMetaData beanMetaData;
+
+   public static long time;
+   
+   public BeanInterceptorMetaDataBridge(Class<?> beanClass, ClassLoader classLoader, JBossEnterpriseBeanMetaData beanMetaData)
+   {
+      assert beanClass != null : "beanClass is null";
+      this.beanClass = beanClass;
+      this.classLoader = classLoader;
+      this.beanMetaData = beanMetaData;
+      
+      initialise();
+   }
+
+   protected Class<?> getBeanClass()
+   {
+      return beanClass;
+   }
+   
    private static boolean add(InterceptorCollection interceptors, ClassLoader classLoader, InterceptorBindingMetaData binding)
    {
       boolean result = false;
@@ -117,213 +166,413 @@
       }
    }
    
-   @Override
-   public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
+   private synchronized void initialise()
    {
-      if(annotationClass == DefaultInterceptors.class)
+      if (initialisedBean)
       {
+         return;
+      }
+      
+      List<InterceptorBindingMetaData> defaultInterceptorBindingMetaData = new ArrayList<InterceptorBindingMetaData>();
+      List<InterceptorBindingMetaData> classInterceptorBindingMetaData = new ArrayList<InterceptorBindingMetaData>();
+      List<InterceptorBindingMetaData> classInterceptorOrderMetaData = new ArrayList<InterceptorBindingMetaData>();
+      List<InterceptorBindingMetaData> methodInterceptorBindingMetaData = new ArrayList<InterceptorBindingMetaData>();
+      List<InterceptorBindingMetaData> methodInterceptorOrderMetaData = new ArrayList<InterceptorBindingMetaData>();
+      
+      
+      setupMetaDataLists(beanMetaData, 
+            defaultInterceptorBindingMetaData, 
+            classInterceptorBindingMetaData, 
+            classInterceptorOrderMetaData, 
+            methodInterceptorBindingMetaData, 
+            methodInterceptorOrderMetaData);
+
+      initialiseDefaultInterceptors(defaultInterceptorBindingMetaData);
+      initialiseInterceptors(classInterceptorBindingMetaData);
+      initialiseInterceptorOrder(classInterceptorOrderMetaData);
+
+      Map<String, List<Method>> methodMap = ClassHelper.getAllMethodsMap(beanClass);
+      MethodSignatures methodSignatures = new MethodSignatures();
+      initialiseMethodInterceptors(methodMap, methodSignatures, methodInterceptorBindingMetaData);
+      initialiseMethodInterceptorOrders(methodMap, methodSignatures, methodInterceptorOrderMetaData);
+
+      initialiseAroundInvoke(methodMap);
+   }
+   
+   private void setupMetaDataLists(JBossEnterpriseBeanMetaData beanMetaData,
+                                 List<InterceptorBindingMetaData> defaultInterceptorBindingMetaData, 
+                                 List<InterceptorBindingMetaData> classInterceptorBindingMetaData, 
+                                 List<InterceptorBindingMetaData> classInterceptorOrderMetaData, 
+                                 List<InterceptorBindingMetaData> methodInterceptorBindingMetaData,
+                                 List<InterceptorBindingMetaData> methodInterceptorOrderMetaData)
+   {
+      try
+      {
          InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
-         if(bindings != null)
+
+         if (bindings != null)
          {
-            List<Class<?>> interceptors = new ArrayList<Class<?>>();
-            for(InterceptorBindingMetaData binding : bindings)
+            String ejbName = beanMetaData.getEjbName();;
+            for (InterceptorBindingMetaData binding : bindings)
             {
                String bindingEjbName = binding.getEjbName();
-               if(bindingEjbName.equals("*"))
+               checkBeanExistsInDeployment(beanMetaData, bindingEjbName);
+               if (bindingEjbName.equals("*")) 
                {
                   assert binding.getMethod() == null : "method binding not allowed on default interceptor";
-                  
-                  add(interceptors, classLoader, binding);
+                  defaultInterceptorBindingMetaData.add(binding);
+                  continue;
                }
+               if (bindingEjbName.equals(ejbName))
+               {
+                  if (binding.getMethod() == null)
+                  {
+                     if (binding.isTotalOrdering())
+                     {
+                        classInterceptorOrderMetaData.add(binding);
+                     }
+                     else
+                     {
+                        classInterceptorBindingMetaData.add(binding);
+                     }
+                  }
+                  else
+                  {
+                     if (binding.isTotalOrdering())
+                     {
+                        methodInterceptorOrderMetaData.add(binding);
+                     }
+                     else
+                     {
+                        methodInterceptorBindingMetaData.add(binding);
+                     }
+                  }
+               }
             }
-            if(!interceptors.isEmpty())
-               return annotationClass.cast(new DefaultInterceptorsImpl(interceptors));
          }
       }
-      else if(annotationClass == InterceptorOrder.class)
+      catch (NullPointerException e)
       {
-         InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
-         if(bindings != null)
+         if (beanMetaData == null)
          {
-            InterceptorOrderImpl interceptorOrder = new InterceptorOrderImpl();
-            for(InterceptorBindingMetaData binding : bindings)
+            throw new IllegalStateException("Null beannMetaData", e);
+         }
+         else if (beanMetaData.getEjbJarMetaData() == null)
+         {
+            throw new IllegalStateException("Null ejbJarMetaData", e);
+         }
+         else if (beanMetaData.getEjbJarMetaData().getAssemblyDescriptor() == null)
+         {
+            throw new IllegalStateException("Null AssemblyDescriptor", e);
+         }
+         throw e;
+      }
+   }
+
+   
+   private void initialiseDefaultInterceptors(List<InterceptorBindingMetaData> bindings)
+   {
+      if (bindings != null && bindings.size() > 0)
+      {
+         List<Class<?>> classes = new ArrayList<Class<?>>();
+         for (InterceptorBindingMetaData binding : bindings)
+         {
+            add(classes, classLoader, binding);
+         }
+         if(!classes.isEmpty())
+            defaultInterceptors = new DefaultInterceptorsImpl(classes);
+      }
+   }
+   
+   private void initialiseInterceptors(List<InterceptorBindingMetaData> bindings)
+   {
+      if (bindings != null && bindings.size() > 0)
+      {
+         InterceptorsImpl interceptors = new InterceptorsImpl();
+         for (InterceptorBindingMetaData binding : bindings)
+         {
+            add(interceptors, classLoader, binding);
+         }
+         if(!interceptors.isEmpty())
+            this.interceptors = interceptors;
+      }
+   }
+   
+   private void initialiseInterceptorOrder(List<InterceptorBindingMetaData> bindings)
+   {
+      if (bindings != null && bindings.size() > 0)
+      {
+         InterceptorOrderImpl interceptors = new InterceptorOrderImpl();
+         for (InterceptorBindingMetaData binding : bindings)
+         {
+            add(interceptors, classLoader, binding);
+         }
+         if(!interceptors.isEmpty())
+            this.interceptorOrder = interceptors;
+      }
+   }
+
+   private void initialiseMethodInterceptors(Map<String, List<Method>> methodMap, MethodSignatures methodSignatures, List<InterceptorBindingMetaData> bindings)
+   {
+      if (bindings != null && bindings.size() > 0)
+      {
+         this.methodInterceptors = new HashMap<Signature, Interceptors>();
+         for (InterceptorBindingMetaData binding : bindings)
+         {
+            NamedMethodMetaData method = binding.getMethod();
+
+            // TODO: this is weird, it should have been caught earlier (invalid xml)
+            if(method.getMethodName() == null)
+               continue;
+            
+            List<Method> methods = methodMap.get(method.getMethodName());
+            for (Method refMethod : methods)
             {
-               // Only for specifying order
-               if(!binding.isTotalOrdering())
-                  continue;
-               
-               // For the method component
-               if(binding.getMethod() != null)
-                  continue;
-               
-               String ejbName = beanMetaData.getEjbName();
-               String bindingEjbName = binding.getEjbName();
-               if(bindingEjbName.equals(ejbName))
-                  add(interceptorOrder, classLoader, binding);
+               Signature signature = methodSignatures.getSignature(refMethod);
+               if (matchesMethod(signature, refMethod, method))
+               {
+                  InterceptorsImpl interceptors = (InterceptorsImpl)methodInterceptors.get(signature);
+                  if (interceptors == null)
+                  {
+                     interceptors = new InterceptorsImpl();
+                     methodInterceptors.put(signature, interceptors);
+                  }
+                  add(interceptors, classLoader, binding);
+               }
             }
-            if(!interceptorOrder.isEmpty())
-               return annotationClass.cast(interceptorOrder);
          }
       }
-      else if(annotationClass == Interceptors.class)
+   }
+   
+   private void initialiseMethodInterceptorOrders(Map<String, List<Method>> methodMap, MethodSignatures methodSignatures, List<InterceptorBindingMetaData> bindings)
+   {
+      if (bindings != null && bindings.size() > 0)
       {
-         InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
-         if(bindings != null)
+         this.methodInterceptorOrders = new HashMap<Signature, InterceptorOrder>();
+         for (InterceptorBindingMetaData binding : bindings)
          {
-            InterceptorsImpl interceptors = new InterceptorsImpl();
-            for(InterceptorBindingMetaData binding : bindings)
+            NamedMethodMetaData method = binding.getMethod();
+
+            // TODO: this is weird, it should have been caught earlier (invalid xml)
+            if(method.getMethodName() == null)
+               continue;
+            
+            List<Method> methods = methodMap.get(method.getMethodName());
+            for (Method refMethod : methods)
             {
-               // Only for specifying order
-               if(binding.isTotalOrdering())
-                  continue;
-               
-               // For the method component
-               if(binding.getMethod() != null)
-                  continue;
-               
-               String ejbName = beanMetaData.getEjbName();
-               String bindingEjbName = binding.getEjbName();
-               if(bindingEjbName.equals(ejbName))
+               Signature signature = methodSignatures.getSignature(refMethod);
+               if (matchesMethod(signature, refMethod, method))
+               {
+                  InterceptorOrderImpl interceptors = (InterceptorOrderImpl)methodInterceptors.get(signature);
+                  if (interceptors == null)
+                  {
+                     interceptors = new InterceptorOrderImpl();
+                     methodInterceptorOrders.put(signature, interceptors);
+                  }
                   add(interceptors, classLoader, binding);
+               }
             }
-            if(!interceptors.isEmpty())
-               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)
+   
+   private boolean matchesMethod(Signature sig, Method refMethod, NamedMethodMetaData method)
    {
-      if(annotationClass == AroundInvoke.class)
+      assert refMethod.getName().equals(method.getMethodName());
+      MethodParametersMetaData methodParams = method.getMethodParams();
+      if(methodParams == null)
       {
-         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)
+         return true;
+      }
+      else
+      {
+         if(Arrays.equals(methodParams.toArray(), sig.getParameters()))
          {
-            Annotation annotation = getAroundInvokeAnnotation(aroundInvokes, methodName);
-            if(annotation != null)
-               return annotationClass.cast(annotation);
+            return true;
          }
       }
-      else if(annotationClass == InterceptorOrder.class)
+      
+      return false;      
+   }
+
+   private void initialiseAroundInvoke(Map<String, List<Method>> methodMap)
+   {
+      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)
       {
-         InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
-         if(bindings != null)
+         for (String methodName : methodMap.keySet())
          {
-            InterceptorOrderImpl interceptorOrder = new InterceptorOrderImpl();
-            for(InterceptorBindingMetaData binding : bindings)
+            AroundInvoke aroundInvoke = getAroundInvokeAnnotation(aroundInvokes, methodName);
+            if(aroundInvoke != null)
             {
-               // Only for specifying order
-               if(!binding.isTotalOrdering())
-                  continue;
-               
-               // For the bean
-               if(binding.getMethod() == null)
-                  continue;
-               
-               NamedMethodMetaData method = binding.getMethod();
-               
-               // TODO: this is weird, it should have been caught earlier (invalid xml)
-               if(method.getMethodName() == null)
-                  continue;
-               
-               if(method.getMethodName().equals(methodName))
+               if (this.aroundInvokes == null)
                {
-                  MethodParametersMetaData methodParams = method.getMethodParams();
-                  if(methodParams == null)
-                     add(interceptorOrder, classLoader, binding);
-                  else
-                  {
-                     if(Arrays.equals(methodParams.toArray(), parameterNames))
-                        add(interceptorOrder, classLoader, binding);
-                  }
+                  this.aroundInvokes = new HashMap<String, AroundInvoke>();
                }
+               this.aroundInvokes.put(methodName, aroundInvoke);
             }
-            if(!interceptorOrder.isEmpty())
-               return annotationClass.cast(interceptorOrder);
          }
       }
-      else if(annotationClass == Interceptors.class)
+   }
+   
+   private void initialiseLifecycleAnnotations(Map<String, List<Method>> methodMap)
+   {
+      if(beanMetaData instanceof JBossSessionBeanMetaData)
       {
-         InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
-         if(bindings != null)
+         for (String methodName : methodMap.keySet())
          {
-            InterceptorsImpl interceptors = new InterceptorsImpl();
-            for(InterceptorBindingMetaData binding : bindings)
+            
+            PostConstruct postConstruct = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPostConstructs(), PostConstructImpl.class, methodName);
+            if (postConstruct != null)
             {
-               // Only for specifying order
-               if(binding.isTotalOrdering())
-                  continue;
-               
-               // For the bean
-               if(binding.getMethod() == null)
-                  continue;
-               
-               NamedMethodMetaData method = binding.getMethod();
-               
-               // TODO: this is weird, it should have been caught earlier (invalid xml)
-               if(method.getMethodName() == null)
-                  continue;
-               
-               if(method.getMethodName().equals(methodName))
+               if (postConstructs == null)
                {
-                  MethodParametersMetaData methodParams = method.getMethodParams();
-                  if(methodParams == null)
-                     add(interceptors, classLoader, binding);
-                  else
-                  {
-                     if(Arrays.equals(methodParams.toArray(), parameterNames))
-                        add(interceptors, classLoader, binding);
-                  }
+                  postConstructs = new HashMap<String, PostConstruct>();
                }
+               postConstructs.put(methodName, postConstruct);
             }
-            if(!interceptors.isEmpty())
-               return annotationClass.cast(interceptors);
+            PostActivate postActivate = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPostActivates(), PostActivateImpl.class, methodName);
+            if(postActivate != null)
+            {
+               if (postActivates == null)
+               {
+                  postActivates = new HashMap<String, PostActivate>();
+               }
+               postActivates.put(methodName, postActivate);
+            }
+            PrePassivate prePassivate = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPrePassivates(), PrePassivateImpl.class, methodName);
+            if(prePassivate != null)
+            {
+               if (prePassivates == null)
+               {
+                  prePassivates = new HashMap<String, PrePassivate>();
+               }
+               prePassivates.put(methodName, prePassivate);
+            }
+            PreDestroy preDestroy = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPreDestroys(), PreDestroyImpl.class, methodName);
+            if(preDestroy != null)
+            {
+               if (preDestroys == null)
+               {
+                  preDestroys = new HashMap<String, PreDestroy>();
+               }
+               preDestroys.put(methodName, preDestroy);
+            }
          }
       }
+   }
+
+   @Override
+   public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
+   {
+      if(annotationClass == DefaultInterceptors.class)
+      {
+         return annotationClass.cast(defaultInterceptors);
+      }
+      else if(annotationClass == InterceptorOrder.class)
+      {
+         return annotationClass.cast(interceptorOrder);
+      }
+      else if(annotationClass == Interceptors.class)
+      {
+         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)
+      {
+         if (parameterNames.length == 1 && parameterNames[0].equals(InvocationContext.class.getName()) && aroundInvokes != null)
+         {
+            return annotationClass.cast(aroundInvokes.get(methodName));
+         }
+         return null;
+      }
+      else if(annotationClass == InterceptorOrder.class)
+      {
+         MethodSignature signature = new MethodSignature(methodName, parameterNames);
+         if (methodInterceptorOrders == null)
+         {
+            return null;
+         }
+         return annotationClass.cast(methodInterceptorOrders.get(signature));
+      }
+      else if(annotationClass == Interceptors.class)
+      {
+         MethodSignature signature = new MethodSignature(methodName, parameterNames);
+         if (methodInterceptors == null)
+         {
+            return null;
+         }
+         return annotationClass.cast(methodInterceptors.get(signature));
+      }
       else if(annotationClass == PostActivate.class)
       {
-         if(beanMetaData instanceof JBossSessionBeanMetaData)
+         if(beanMetaData instanceof JBossSessionBeanMetaData && parameterNames.length == 0 && postActivates != null) 
          {
-            PostActivate lifeCycleAnnotation = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPostActivates(), PostActivateImpl.class, methodName);
-            if(lifeCycleAnnotation != null)
-               return annotationClass.cast(lifeCycleAnnotation);
+            return annotationClass.cast(postActivates.get(methodName));
          }
       }
       else if(annotationClass == PostConstruct.class)
       {
-         if(beanMetaData instanceof JBossSessionBeanMetaData)
+         if(beanMetaData instanceof JBossSessionBeanMetaData && parameterNames.length == 0 && postConstructs != null) 
          {
-            PostConstruct lifeCycleAnnotation = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPostConstructs(), PostConstructImpl.class, methodName);
-            if(lifeCycleAnnotation != null)
-               return annotationClass.cast(lifeCycleAnnotation);
+            return annotationClass.cast(postConstructs.get(methodName));
          }
       }
       else if(annotationClass == PreDestroy.class)
       {
-         if(beanMetaData instanceof JBossSessionBeanMetaData)
+         if(beanMetaData instanceof JBossSessionBeanMetaData && parameterNames.length == 0 && preDestroys != null) 
          {
-            PreDestroy lifeCycleAnnotation = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPreDestroys(), PreDestroyImpl.class, methodName);
-            if(lifeCycleAnnotation != null)
-               return annotationClass.cast(lifeCycleAnnotation);
+            return annotationClass.cast(preDestroys.get(methodName));
          }
       }
       else if(annotationClass == PrePassivate.class)
       {
-         if(beanMetaData instanceof JBossSessionBeanMetaData)
+         if(beanMetaData instanceof JBossSessionBeanMetaData && parameterNames.length == 0 && prePassivates != null) 
          {
-            PrePassivate lifeCycleAnnotation = getLifeCycleAnnotation(((JBossSessionBeanMetaData) beanMetaData).getPrePassivates(), PrePassivateImpl.class, methodName);
-            if(lifeCycleAnnotation != null)
-               return annotationClass.cast(lifeCycleAnnotation);
+            return annotationClass.cast(prePassivates.get(methodName));
          }
       }
       return super.retrieveAnnotation(annotationClass, beanMetaData, classLoader, methodName, parameterNames);
    }
+   
+   private void checkBeanExistsInDeployment(JBossEnterpriseBeanMetaData beanMetaData, String ejbName)
+   {
+      if (ejbName.equals("*"))
+      {
+         return;
+      }
+      
+      JBossEnterpriseBeansMetaData beansMetaData = beanMetaData.getEnterpriseBeansMetaData();
+      if (beansMetaData.get(ejbName) == null)
+      {
+         throw new IllegalArgumentException("No bean with name specified in interceptor-binding: " + ejbName);
+      }
+   }
+   
+   private static class MethodSignatures
+   {
+      Map<Method, Signature> methodSignatures = new HashMap<Method, Signature>();
+      
+      Signature getSignature(Method m)
+      {
+         Signature s = methodSignatures.get(m);
+         if (s == null)
+         {
+            s = new MethodSignature(m);
+            methodSignatures.put(m, s);
+         }
+         return s;
+      }
+   }
 }

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/additive/unit/AdditiveTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/additive/unit/AdditiveTestCase.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/additive/unit/AdditiveTestCase.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -80,7 +80,7 @@
          List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
          interceptorBridges.add(new InterceptorMetaDataBridge());
          annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-         annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass));
+         annotations.addMetaDataBridge(new AdditiveBeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
          
          initializeAdvisor(name, getDomain(domainName), beanClass, annotations);
       }

Added: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/InterceptorOrderBean.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/InterceptorOrderBean.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/InterceptorOrderBean.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,43 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, 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.interceptors.badbinding;
+
+import org.jboss.ejb3.interceptors.ManagedObject;
+import org.jboss.logging.Logger;
+
+/**
+ * This one has an interceptor bound to it via an interceptor order.
+ * 
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+ at ManagedObject
+public class InterceptorOrderBean
+{
+   private static final Logger log = Logger.getLogger(InterceptorOrderBean.class);
+   
+   public String sayHi(String name)
+   {
+      log.debug("sayHi");
+      return "Hi " + name;
+   }   
+}

Added: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/MetadataBean.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/MetadataBean.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/MetadataBean.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,63 @@
+/*
+ * 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.interceptors.badbinding;
+
+import javax.interceptor.InvocationContext;
+
+import org.jboss.ejb3.interceptors.ManagedObject;
+import org.jboss.logging.Logger;
+
+/**
+ * All interceptors defined in metadata.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: 68939 $
+ */
+ at ManagedObject
+public class MetadataBean
+{
+   private static final Logger log = Logger.getLogger(MetadataBean.class);
+
+   public static int constructors = 0, aroundInvokes = 0;
+   
+   Object aroundInvoke(InvocationContext ctx) throws Exception
+   {
+      log.debug("aroundInvoke " + ctx);
+      if(ctx.getTarget() != this)
+         throw new IllegalStateException("target is not this");
+      if(ctx.getMethod().getDeclaringClass() != getClass())
+         throw new IllegalStateException("method " + ctx.getMethod() + " not of this class (" + ctx.getMethod().getDeclaringClass() + " != " +  getClass() + ")");
+      aroundInvokes++;
+      return ctx.proceed();
+   }
+   
+   public String sayHi(String name)
+   {
+      log.debug("sayHi");
+      return "Hi " + name;
+   }
+   
+   public void intercept()
+   {
+      log.debug("intercept");
+   }
+}

Added: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/unit/BadBindingTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/unit/BadBindingTestCase.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/badbinding/unit/BadBindingTestCase.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,234 @@
+/*
+ * 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.interceptors.badbinding.unit;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.jboss.aspects.common.AOPDeployer;
+import org.jboss.ejb3.interceptors.direct.AbstractDirectContainer;
+import org.jboss.ejb3.interceptors.metadata.BeanInterceptorMetaDataBridge;
+import org.jboss.ejb3.interceptors.metadata.InterceptorComponentMetaDataLoaderFactory;
+import org.jboss.ejb3.interceptors.metadata.InterceptorMetaDataBridge;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.ejb3.test.interceptors.common.CommonInterceptor;
+import org.jboss.ejb3.test.interceptors.metadata.MetadataBean;
+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;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.jboss.xb.builder.JBossXBBuilder;
+import org.w3c.dom.ls.LSInput;
+
+/**
+ * Test direct container advisement in combination with metadata.
+ * 
+ * There is no special class loader needed, because all invocations
+ * are routed through the direct container.
+ * 
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: 72166 $
+ */
+public class BadBindingTestCase extends TestCase
+{
+   private static final Logger log = Logger.getLogger(BadBindingTestCase.class);
+   
+   private class MyContainer<T> extends AbstractDirectContainer<T, MyContainer<T>>
+   {
+      public MyContainer(String name, String domainName, Class<? extends T> beanClass, JBossEnterpriseBeanMetaData beanMetaData)
+      {
+         super();
+         
+         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+         AnnotationRepositoryToMetaData annotations = new AnnotationRepositoryToMetaData(beanClass, beanMetaData, name, classLoader);
+         List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
+         interceptorBridges.add(new InterceptorMetaDataBridge());
+         annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
+         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
+         
+         initializeAdvisor(name, getDomain(domainName), beanClass, annotations);
+      }
+
+      public void testAdvisor()
+      {
+         MyContainer<?> container = getAdvisor().getContainer();
+         assertNotNull("container not set in managed object advisor", container);
+         assertTrue(container == this);
+      }
+   }
+   
+   protected static SchemaBindingResolver schemaResolverForClass(final Class<?> root)
+   {
+      return new SchemaBindingResolver()
+      {
+         public String getBaseURI()
+         {
+            return null;
+         }
+
+         public SchemaBinding resolve(String nsUri, String baseURI, String schemaLocation)
+         {
+            return JBossXBBuilder.build(root);
+         }
+
+         public LSInput resolveAsLSInput(String nsUri, String baseUri, String schemaLocation)
+         {
+            return null;
+         }
+
+         public void setBaseURI(String baseURI)
+         {
+         }
+      };
+   }
+
+   // FIXME: use the right jboss-aop.xml
+   AOPDeployer deployer = new AOPDeployer("proxy/jboss-aop.xml");
+   
+   @Override
+   protected void setUp() throws Exception
+   {
+      log.info(deployer.deploy());
+      CommonInterceptor.aroundInvokes = 0;
+      CommonInterceptor.postConstructs = 0;
+      CommonInterceptor.preDestroys = 0;
+   }
+
+   @Override
+   protected void tearDown() throws Exception
+   {
+      log.info(deployer.undeploy());
+   }
+   
+   public void testBadBeanInterceptorBinding() throws Throwable
+   {
+      try
+      {
+         testBinding("badbinding/badbean-interceptor-binding/META-INF/ejb-jar.xml");
+         fail("Should not have been able to create container since we have an interceptor-binding with the wrong name");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+
+   public void testDefaultInterceptorBinding() throws Throwable
+   {
+      testBinding("badbinding/default-interceptor-binding/META-INF/ejb-jar.xml");
+   }
+   
+   public void testGoodBeanInterceptorBinding() throws Throwable
+   {
+      testBinding("badbinding/goodbean-interceptor-binding/META-INF/ejb-jar.xml");
+   }
+
+   public void testBadBeanInterceptorOrderBinding() throws Throwable
+   {
+      try
+      {
+         testBinding("badbinding/badbean-interceptor-order-binding/META-INF/ejb-jar.xml");
+         fail("Should not have been able to create container since we have an interceptor-binding with the wrong name");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+
+   public void testDefaultInterceptorOrderBinding() throws Throwable
+   {
+      testBinding("badbinding/default-interceptor-order-binding/META-INF/ejb-jar.xml");
+   }
+
+   
+   public void testGoodBeanInterceptorOrderBinding() throws Throwable
+   {
+      testBinding("badbinding/goodbean-interceptor-order-binding/META-INF/ejb-jar.xml");
+   }
+
+   public void testBadBeanInterceptorBindingWithMethod() throws Throwable
+   {
+      try
+      {
+         testBinding("badbinding/badbean-interceptor-binding-with-method/META-INF/ejb-jar.xml");
+         fail("Should not have been able to create container since we have an interceptor-binding with the wrong name");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+
+   public void testGoodBeanInterceptorBindingWithMethod() throws Throwable
+   {
+      testBinding("badbinding/goodbean-interceptor-binding-with-method/META-INF/ejb-jar.xml");
+   }
+
+   public void testBadBeanInterceptorOrderBindingWithMethod() throws Throwable
+   {
+      try
+      {
+         testBinding("badbinding/badbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml");
+         fail("Should not have been able to create container since we have an interceptor-binding with the wrong name");
+      }
+      catch(Exception expected)
+      {
+      }
+   }
+
+   public void testGoodBeanInterceptorOrderBindingWithMethod() throws Throwable
+   {
+      testBinding("badbinding/goodbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml");
+   }
+
+   private MyContainer<MetadataBean> testBinding(String ejbJarXml) throws Throwable
+   {
+      // To make surefire happy
+      Thread.currentThread().setContextClassLoader(MetadataBean.class.getClassLoader());
+      
+      // Bootstrap metadata
+      UnmarshallerFactory unmarshallerFactory = UnmarshallerFactory.newInstance();
+      Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+      URL url = Thread.currentThread().getContextClassLoader().getResource(ejbJarXml);
+      EjbJar30MetaData metaData = (EjbJar30MetaData) unmarshaller.unmarshal(url.toString(), schemaResolverForClass(EjbJar30MetaData.class));
+      JBoss50MetaData jbossMetaData = new JBoss50MetaData();
+      jbossMetaData.merge(null, metaData);
+      
+      JBossEnterpriseBeanMetaData beanMetaData = jbossMetaData.getEnterpriseBean("MetadataBean");
+      assertNotNull(beanMetaData);
+      
+      assertEquals(0, CommonInterceptor.postConstructs);
+      
+      MyContainer<MetadataBean> container = new MyContainer<MetadataBean>("MetadataBean", "Test", MetadataBean.class, beanMetaData);
+
+      container.testAdvisor();
+      
+      return container;
+   }
+}

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/AnnotatedBean.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/AnnotatedBean.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/AnnotatedBean.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -40,7 +40,7 @@
    }
    
    @Interceptors(MethodInterceptor.class)
-   public int xmlOrderedMethod()
+   public int xmlOrderedMethod(int i, String s)
    {
       return 200;
    }

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/unit/DefaultInterceptorsTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/unit/DefaultInterceptorsTestCase.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/defaultinterceptors/unit/DefaultInterceptorsTestCase.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -75,7 +75,7 @@
          List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
          interceptorBridges.add(new InterceptorMetaDataBridge());
          annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
          
          initializeAdvisor(name, getDomain(domainName), beanClass, annotations);
       }
@@ -171,7 +171,7 @@
       assertEquals(AnnotatedBean.class, interceptions.get(3));
       
       Interceptions.clear();
-      annotatedBeanContainer.invoke(annotatedBean, "xmlOrderedMethod", new Object[0]);
+      annotatedBeanContainer.invoke(annotatedBean, "xmlOrderedMethod", new Object[] {1, "Hello"});
       interceptions = Interceptions.getInterceptions();
       assertEquals("Interceptions were " + interceptions, 4, interceptions.size());      
       assertEquals(MethodInterceptor.class, interceptions.get(0));

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/lifecycle/unit/CallbackMethodDescriptorTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/lifecycle/unit/CallbackMethodDescriptorTestCase.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/lifecycle/unit/CallbackMethodDescriptorTestCase.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -70,7 +70,7 @@
          List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
          interceptorBridges.add(new InterceptorMetaDataBridge());
          annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
          
          initializeAdvisor(name, getDomain(domainName), beanClass, annotations);
       }

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/metadata/unit/MetadataTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/metadata/unit/MetadataTestCase.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/metadata/unit/MetadataTestCase.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -77,7 +77,7 @@
          List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
          interceptorBridges.add(new InterceptorMetaDataBridge());
          annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
          
          initializeAdvisor(name, getDomain(domainName), beanClass, annotations);
       }

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/order/unit/InterceptorChainTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/order/unit/InterceptorChainTestCase.java	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/order/unit/InterceptorChainTestCase.java	2008-04-18 11:44:47 UTC (rev 72439)
@@ -75,7 +75,7 @@
          List<MetaDataBridge<InterceptorMetaData>> interceptorBridges = new ArrayList<MetaDataBridge<InterceptorMetaData>>();
          interceptorBridges.add(new InterceptorMetaDataBridge());
          annotations.addComponentMetaDataLoaderFactory(new InterceptorComponentMetaDataLoaderFactory(interceptorBridges));
-         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge());
+         annotations.addMetaDataBridge(new BeanInterceptorMetaDataBridge(beanClass, classLoader, beanMetaData));
          
          initializeAdvisor(name, getDomain(domainName), beanClass, annotations);
       }

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>BadBadBean</ejb-name>
+    		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding-with-method/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding-with-method/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-binding-with-method/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>BadBadBean</ejb-name>
+    		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         <method>
+            <method-name>sayHi</method-name>
+         </method>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>BadBadBean</ejb-name>
+    		<interceptor-order>
+       		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         </interceptor-order>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/badbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>BadBadBean</ejb-name>
+    		<interceptor-order>
+       		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         </interceptor-order>
+         <method>
+            <method-name>sayHi</method-name>
+         </method>
+     	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>*</ejb-name>
+    		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding-with-method/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding-with-method/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-binding-with-method/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>*</ejb-name>
+    		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         <method>
+            <method-name>sayHi</method-name>
+         </method>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>*</ejb-name>
+         <interceptor-order>
+       		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         </interceptor-order>       		
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding-with-method/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding-with-method/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/default-interceptor-order-binding-with-method/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>*</ejb-name>
+         <interceptor-order>
+       		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         </interceptor-order>       		
+         <method>
+            <method-name>sayHi</method-name>
+         </method>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding-with-method/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding-with-method/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-binding-with-method/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         <method>
+            <method-name>sayHi</method-name>
+         </method>
+
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>MetadataBean</ejb-name>
+         <interceptor-order>
+       		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         </interceptor-order>       		
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Added: projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/resources/badbinding/goodbean-interceptor-order-binding-with-method/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ejb-jar
+        xmlns="http://java.sun.com/xml/ns/javaee"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                            http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
+        version="3.0">
+    <display-name>InterceptorsTest</display-name>
+    <!-- Must define a bean here, because we have no annotation on it -->
+    <!-- (Can't use @Stateless within ejb3-interceptors) -->
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>MetadataBean</ejb-name>
+    		<around-invoke>
+    			<method-name>aroundInvoke</method-name>
+    		</around-invoke>
+    	</session>
+    </enterprise-beans>
+    <interceptors>
+		<interceptor>
+			<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+			<around-invoke>
+				<method-name>aroundInvoke</method-name>
+			</around-invoke>
+			<post-construct>
+				<lifecycle-callback-method>postConstruct</lifecycle-callback-method>
+			</post-construct>
+			<pre-destroy>
+				<lifecycle-callback-method>preDestroy</lifecycle-callback-method>
+			</pre-destroy>
+		</interceptor>	   
+    </interceptors>
+    <assembly-descriptor>
+    	<interceptor-binding>
+    		<ejb-name>MetadataBean</ejb-name>
+         <interceptor-order>
+       		<interceptor-class>org.jboss.ejb3.test.interceptors.common.CommonInterceptor</interceptor-class>
+         </interceptor-order>       		
+         <method>
+            <method-name>sayHi</method-name>
+         </method>
+    	</interceptor-binding>
+    </assembly-descriptor>
+</ejb-jar>
\ No newline at end of file

Modified: projects/ejb3/trunk/interceptors/src/test/resources/defaultinterceptors/META-INF/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/defaultinterceptors/META-INF/ejb-jar.xml	2008-04-18 11:41:39 UTC (rev 72438)
+++ projects/ejb3/trunk/interceptors/src/test/resources/defaultinterceptors/META-INF/ejb-jar.xml	2008-04-18 11:44:47 UTC (rev 72439)
@@ -39,6 +39,10 @@
          </interceptor-order>
          <method>
             <method-name>xmlOrderedMethod</method-name>
+            <method-params>
+               <method-param>int</method-param>
+               <method-param>java.lang.String</method-param>
+            </method-params>
          </method>
       </interceptor-binding>
       <interceptor-binding>




More information about the jboss-cvs-commits mailing list