[jboss-cvs] JBossAS SVN: r68877 - in projects/ejb3/trunk/metadata/src: main/java/org/jboss/ejb3/metadata/annotation and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 11 06:47:47 EST 2008


Author: wolfc
Date: 2008-01-11 06:47:47 -0500 (Fri, 11 Jan 2008)
New Revision: 68877

Added:
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java
   projects/ejb3/trunk/metadata/src/test/resources/log4j.xml
Removed:
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/spi/retrieval/
Modified:
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java
   projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java
   projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java
   projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml
Log:
Added interceptors annotation

Modified: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java	2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/EJBMetaDataLoader.java	2008-01-11 11:47:47 UTC (rev 68877)
@@ -24,12 +24,21 @@
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
+import javax.interceptor.Interceptors;
+
 import org.jboss.ejb3.annotation.SecurityDomain;
+import org.jboss.ejb3.annotation.impl.InterceptorsImpl;
 import org.jboss.ejb3.annotation.impl.SecurityDomainImpl;
+import org.jboss.ejb3.metadata.plugins.loader.ClassMetaDataLoader;
+import org.jboss.ejb3.metadata.plugins.loader.InterceptorClassMetaDataLoader;
+import org.jboss.ejb3.metadata.spi.signature.ClassSignature;
 import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorBindingMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorBindingsMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorClassesMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
 import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
 import org.jboss.metadata.spi.retrieval.AnnotationItem;
 import org.jboss.metadata.spi.retrieval.AnnotationsItem;
@@ -46,27 +55,58 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision: 1.1 $
  */
-public class EJBMetaDataLoader extends BasicMetaDataLoader
+public class EJBMetaDataLoader extends ClassMetaDataLoader
 {
    /** The container */
    private JBossEnterpriseBeanMetaData beanMetaData;
    
-   /** Component cache */
-   private Map<Signature, MetaDataRetrieval> cache = new ConcurrentHashMap<Signature, MetaDataRetrieval>();
+   private ClassLoader classLoader;
    
    /**
     * Create a new EJBMetaDataLoader.
     * 
-    * @param key the scope
-    * @param container the container
+    * @param key            the scope
+    * @param beanMetaData   the meta data associated with this EJB or null
+    * @param classLoader    the class loader that must be used to load new classes
     */
-   public EJBMetaDataLoader(ScopeKey key, JBossEnterpriseBeanMetaData beanMetaData)
+   public EJBMetaDataLoader(ScopeKey key, JBossEnterpriseBeanMetaData beanMetaData, ClassLoader classLoader)
    {
       super(key);
-      assert beanMetaData != null : "beanMetaData is null";
+      assert classLoader != null : "classLoader is null";
+      
       this.beanMetaData = beanMetaData;
+      this.classLoader = classLoader;
    }
    
+   protected MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature)
+   {
+      JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
+      if (beanMetaData == null)
+         return null;
+
+      MetaDataRetrieval retrieval = null;
+      if(signature instanceof ClassSignature)
+      {
+         // FIXME: it's not always an interceptor, could be a super class
+         retrieval = new InterceptorClassMetaDataLoader(getScope(), findInterceptor(signature.getName()));
+      }
+      else if(signature instanceof MethodSignature)
+         retrieval = new MethodMetaDataRetrieval((MethodSignature) signature);
+      
+      return retrieval;
+   }
+
+   private InterceptorMetaData findInterceptor(String name)
+   {
+      InterceptorsMetaData interceptors = beanMetaData.getEjbJarMetaData().getInterceptors();
+      for(InterceptorMetaData interceptorMetaData : interceptors)
+      {
+         if(interceptorMetaData.getInterceptorClass().equals(name))
+            return interceptorMetaData;
+      }
+      return null;
+   }
+   
    /**
     * Get the bean metadata
     * 
@@ -77,35 +117,66 @@
       return beanMetaData;
    }
    
-   public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+   public boolean isEmpty()
    {
-      JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
-      if (beanMetaData == null)
-         return null;
-
-      if (signature instanceof MethodSignature == false)
-         return null;
-      
-      MetaDataRetrieval retrieval = cache.get(signature);
-      if (retrieval != null)
-         return retrieval;
-
-      retrieval = new MethodMetaDataRetrieval((MethodSignature) signature);
-      cache.put(signature, retrieval);
-      return retrieval;
+      return getBeanMetaData() != null;
    }
 
-   public boolean isEmpty()
+   private Class<?> loadClass(String name)
    {
-      return getBeanMetaData() != null;
+      try
+      {
+         return classLoader.loadClass(name);
+      }
+      catch (ClassNotFoundException e)
+      {
+         throw new RuntimeException(e);
+      }
    }
-
+   
    public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
    {
       JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
       if (beanMetaData == null)
          return null;
       
+      String ejbName = beanMetaData.getEjbName();
+      
+      if(annotationType == Interceptors.class)
+      {
+         InterceptorBindingsMetaData bindings = beanMetaData.getEjbJarMetaData().getAssemblyDescriptor().getInterceptorBindings();
+         if(bindings != null)
+         {
+            for(InterceptorBindingMetaData binding : bindings)
+            {
+               // For the method component
+               if(binding.getMethod() != null)
+                  continue;
+               
+               String bindingEjbName = binding.getEjbName();
+               if(bindingEjbName.equals("*") || bindingEjbName.equals(ejbName))
+               {
+                  //List<Class<?>> interceptorClasses = new ArrayList<Class<?>>();
+                  InterceptorsImpl interceptors = new InterceptorsImpl();
+                  InterceptorClassesMetaData interceptorClassesMetaData;
+                  if(binding.isTotalOrdering())
+                  {
+                     interceptorClassesMetaData = binding.getInterceptorOrder();
+                  }
+                  else
+                  {
+                     interceptorClassesMetaData = binding.getInterceptorClasses();
+                  }
+                  for(String interceptorClassName : interceptorClassesMetaData)
+                  {
+                     interceptors.addValue(loadClass(interceptorClassName));
+                  }
+                  return new SimpleAnnotationItem<T>(annotationType.cast(interceptors));
+               }
+            }
+         }
+      }
+      
       if (annotationType == SecurityDomain.class)
       {
          String securityDomain = beanMetaData.getSecurityDomain();

Modified: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java	2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/annotation/AnnotationRepositoryToMetaData.java	2008-01-11 11:47:47 UTC (rev 68877)
@@ -74,10 +74,16 @@
    /** The classloader */
    private ClassLoader classLoader;
 
+   /**
+    * 
+    * @param beanClass
+    * @param beanMetaData           the bean meta data or null
+    * @param canonicalObjectName
+    * @param classLoader
+    */
    public AnnotationRepositoryToMetaData(Class<?> beanClass, JBossEnterpriseBeanMetaData beanMetaData, String canonicalObjectName, ClassLoader classLoader)
    {
       assert beanClass != null : "beanClass is null";
-      assert beanMetaData != null : "beanMetaData is null";
       assert canonicalObjectName != null : "canonicalObjectName is null";
       assert classLoader != null : "classLoader is null";
       
@@ -86,7 +92,7 @@
       MetaDataRetrieval classMetaData = ClassMetaDataRetrievalFactory.INSTANCE.getMetaDataRetrieval(new Scope(CommonLevels.CLASS, beanClass));
       ScopeKey instanceScope = new ScopeKey(CommonLevels.INSTANCE, canonicalObjectName);
       mutableMetaData = new MemoryMetaDataLoader(instanceScope);
-      MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, beanMetaData);
+      MetaDataRetrieval dynamicXml = new EJBMetaDataLoader(instanceScope, beanMetaData, classLoader);
       
       MetaDataContext classContext = new AbstractMetaDataContext(classMetaData);
       MetaDataRetrieval[] instance = { dynamicXml, mutableMetaData }; 
@@ -270,6 +276,8 @@
       if(annotationType == null)
          throw new IllegalArgumentException("annotationType is null");
       MetaData classComponent = getComponentMetaData(cls);
+      if(classComponent == null)
+         return false;
       MetaData component = classComponent.getComponentMetaData(Signature.getSignature(member));
       if(component == null)
          return false;
@@ -362,6 +370,8 @@
       if(annotationType == null)
          throw new IllegalArgumentException("annotationType is null");
       MetaData classComponent = getComponentMetaData(cls);
+      if(classComponent == null)
+         return null;
       MetaData component = classComponent.getComponentMetaData(Signature.getSignature(member));
       if (component == null)
          return null;

Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java	                        (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java	2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+  *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.metadata.plugins.loader;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
+import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AbstractMethodMetaDataLoader extends BasicMetaDataLoader
+{
+   private static final Logger log = Logger.getLogger(AbstractMethodMetaDataLoader.class);
+
+   @Override
+   public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+   {
+      return null;
+   }
+
+   public boolean isEmpty()
+   {
+      return false;
+   }
+
+   public AnnotationsItem retrieveAnnotations()
+   {
+      throw new RuntimeException("NYI");
+   }
+}


Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/AbstractMethodMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java	                        (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java	2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+  *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.metadata.plugins.loader;
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.jboss.logging.Logger;
+import org.jboss.metadata.plugins.loader.BasicMetaDataLoader;
+import org.jboss.metadata.spi.retrieval.AnnotationItem;
+import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public abstract class ClassMetaDataLoader extends BasicMetaDataLoader
+{
+   private static final Logger log = Logger.getLogger(ClassMetaDataLoader.class);
+
+   /** Component cache */
+   private Map<Signature, MetaDataRetrieval> cache = new ConcurrentHashMap<Signature, MetaDataRetrieval>();
+   
+   protected abstract MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature);
+   
+   protected ClassMetaDataLoader(ScopeKey key)
+   {
+      super(key);
+   }
+   
+   @Override
+   public MetaDataRetrieval getComponentMetaDataRetrieval(Signature signature)
+   {
+      MetaDataRetrieval retrieval = cache.get(signature);
+      if (retrieval != null)
+         return retrieval;
+      
+      retrieval = createComponentMetaDataRetrieval(signature);
+      
+      if(retrieval != null)
+         cache.put(signature, retrieval);
+      
+      return retrieval;
+   }
+   
+   /* (non-Javadoc)
+    * @see org.jboss.metadata.spi.retrieval.MetaDataRetrieval#isEmpty()
+    */
+   public boolean isEmpty()
+   {
+      // TODO Auto-generated method stub
+      return false;
+   }
+
+   /* (non-Javadoc)
+    * @see org.jboss.metadata.spi.retrieval.MetaDataRetrieval#retrieveAnnotations()
+    */
+   public AnnotationsItem retrieveAnnotations()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+   
+   @Override
+   public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+   {
+      // Resources, EJBs etc
+      return null;
+   }
+}


Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/ClassMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java
===================================================================
--- projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java	                        (rev 0)
+++ projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java	2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,164 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2007, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+  *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.metadata.plugins.loader;
+
+import java.lang.annotation.Annotation;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.interceptor.AroundInvoke;
+
+import org.jboss.ejb3.annotation.impl.AroundInvokeImpl;
+import org.jboss.ejb3.annotation.impl.PostConstructImpl;
+import org.jboss.ejb3.annotation.impl.PreDestroyImpl;
+import org.jboss.logging.Logger;
+import org.jboss.metadata.ejb.spec.AroundInvokesMetaData;
+import org.jboss.metadata.ejb.spec.InterceptorMetaData;
+import org.jboss.metadata.javaee.spec.LifecycleCallbacksMetaData;
+import org.jboss.metadata.spi.retrieval.AnnotationItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+import org.jboss.metadata.spi.retrieval.simple.SimpleAnnotationItem;
+import org.jboss.metadata.spi.scope.ScopeKey;
+import org.jboss.metadata.spi.signature.MethodSignature;
+import org.jboss.metadata.spi.signature.Signature;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class InterceptorClassMetaDataLoader extends ClassMetaDataLoader
+{
+   private static final Logger log = Logger.getLogger(InterceptorClassMetaDataLoader.class);
+   
+   /**
+    * MethodMetaDataRetrieval.
+    */
+   protected class MethodMetaDataRetrieval extends AbstractMethodMetaDataLoader
+   {
+      /** The signature */
+      private MethodSignature signature;
+      
+      /**
+       * Create a new MethodMetaDataRetrieval.
+       * 
+       * @param methodSignature the signature
+       */
+      public MethodMetaDataRetrieval(MethodSignature methodSignature)
+      {
+         this.signature = methodSignature;
+      }
+
+      private <T extends Annotation> T createAnnotationImpl(Class<T> annotationImplType)
+      {
+         try
+         {
+            return annotationImplType.newInstance();
+         }
+         catch (InstantiationException e)
+         {
+            throw new RuntimeException(e);
+         }
+         catch (IllegalAccessException e)
+         {
+            throw new RuntimeException(e);
+         }
+      }
+      
+      private AroundInvoke getAroundInvokeAnnotation(AroundInvokesMetaData callbacks)
+      {
+         if(callbacks == null || callbacks.isEmpty())
+            return null;
+         
+         assert callbacks.size() == 1;
+         String methodName = callbacks.get(0).getMethodName();
+         if(methodName.equals(signature.getName()))
+            return new AroundInvokeImpl();
+         return null;
+      }
+      
+      private <T extends Annotation> T getLifeCycleAnnotation(LifecycleCallbacksMetaData callbacks, Class<T> annotationImplType)
+      {
+         if(callbacks == null || callbacks.isEmpty())
+            return null;
+         
+         assert callbacks.size() == 1;
+         String methodName = callbacks.get(0).getMethodName();
+         if(methodName.equals(signature.getName()))
+            return createAnnotationImpl(annotationImplType);
+         return null;
+      }
+      
+      public <T extends Annotation> AnnotationItem<T> retrieveAnnotation(Class<T> annotationType)
+      {
+         if(annotationType == AroundInvoke.class)
+         {
+            Annotation annotation = getAroundInvokeAnnotation(interceptorMetaData.getAroundInvokes());
+            if(annotation != null)
+               return new SimpleAnnotationItem<T>(annotationType.cast(annotation));
+         }
+         if(annotationType == PostConstruct.class)
+         {
+            Annotation lifeCycleAnnotation = getLifeCycleAnnotation(interceptorMetaData.getPostConstructs(), PostConstructImpl.class);
+            if(lifeCycleAnnotation != null)
+               return new SimpleAnnotationItem<T>(annotationType.cast(lifeCycleAnnotation));
+         }
+         else if(annotationType == PreDestroy.class)
+         {
+            Annotation lifeCycleAnnotation = getLifeCycleAnnotation(interceptorMetaData.getPreDestroys(), PreDestroyImpl.class);
+            if(lifeCycleAnnotation != null)
+               return new SimpleAnnotationItem<T>(annotationType.cast(lifeCycleAnnotation));
+         }
+         /* Example 
+         JBossEnterpriseBeanMetaData beanMetaData = getBeanMetaData();
+         if (beanMetaData == null)
+            return null;
+         
+         if (annotationType == TransactionTimeout.class)
+         {
+            MethodAttributesMetaData methodAttributes = beanMetaData.getMethodAttributes();
+            int timeout = methodAttributes.getMethodTransactionTimeout(signature.getName());
+            return new SimpleAnnotationItem(new TransactionTimeoutImpl(timeout));
+         }
+         */
+         return null;
+      }
+   }
+   
+   private InterceptorMetaData interceptorMetaData;
+   
+   public InterceptorClassMetaDataLoader(ScopeKey key, InterceptorMetaData interceptorMetaData)
+   {
+      super(key);
+      assert interceptorMetaData != null;
+      this.interceptorMetaData = interceptorMetaData;
+   }
+   
+   @Override
+   protected MetaDataRetrieval createComponentMetaDataRetrieval(Signature signature)
+   {
+      if(signature instanceof MethodSignature)
+         return new MethodMetaDataRetrieval((MethodSignature) signature);
+      return null;
+   }
+}


Property changes on: projects/ejb3/trunk/metadata/src/main/java/org/jboss/ejb3/metadata/plugins/loader/InterceptorClassMetaDataLoader.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java
===================================================================
--- projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java	2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/test/java/org/jboss/ejb3/test/metadata/interceptor/unit/InterceptorTestCase.java	2008-01-11 11:47:47 UTC (rev 68877)
@@ -21,13 +21,19 @@
  */
 package org.jboss.ejb3.test.metadata.interceptor.unit;
 
+import java.lang.reflect.Method;
 import java.net.URL;
 
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.interceptor.AroundInvoke;
 import javax.interceptor.Interceptors;
+import javax.interceptor.InvocationContext;
 
 import junit.framework.TestCase;
 
 import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.ejb3.test.metadata.interceptor.DummyInterceptor;
 import org.jboss.ejb3.test.metadata.securitydomain.SecurityDomainBean;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.ejb.jboss.JBoss50MetaData;
@@ -76,6 +82,17 @@
       };
    }
 
+   private void assertArrayEquals(Object expected[], Object actual[])
+   {
+      if(expected == actual)
+         return;
+      assertEquals(expected.length, actual.length);
+      for(int i = 0; i < expected.length; i++)
+      {
+         assertEquals(expected[i], actual[i]);
+      }
+   }
+   
    public void test1() throws Exception
    {
       // Bootstrap metadata
@@ -87,12 +104,25 @@
       metaData.merge(null, ejbJarMetaData);
       
       JBossEnterpriseBeanMetaData beanMetaData = metaData.getEnterpriseBean("InterceptedBean");
+      assertNotNull("beanMetaData is null", beanMetaData);
       String canonicalObjectName = "Not important";
       ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
       AnnotationRepositoryToMetaData repository = new AnnotationRepositoryToMetaData(SecurityDomainBean.class, beanMetaData, canonicalObjectName, classLoader);
       Interceptors interceptors = (Interceptors) repository.resolveClassAnnotation(Interceptors.class);
       assertNotNull(interceptors);
+      Class<?> expected[] = { DummyInterceptor.class };
+      assertArrayEquals(expected, interceptors.value());
       
-      fail("NYI");
+      Class<?> parameterTypes[] = { InvocationContext.class };
+      
+      Method aroundInvoke = DummyInterceptor.class.getMethod("aroundInvoke", parameterTypes);
+      assertTrue(repository.hasAnnotation(DummyInterceptor.class, aroundInvoke, AroundInvoke.class));
+      assertFalse(repository.hasAnnotation(DummyInterceptor.class, aroundInvoke, PostConstruct.class));
+      
+      Method postConstruct = DummyInterceptor.class.getMethod("postConstruct", parameterTypes);
+      assertTrue(repository.hasAnnotation(DummyInterceptor.class, postConstruct, PostConstruct.class));
+      
+      Method preDestroy = DummyInterceptor.class.getMethod("preDestroy", parameterTypes);
+      assertTrue(repository.hasAnnotation(DummyInterceptor.class, preDestroy, PreDestroy.class));
    }
 }

Modified: projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml
===================================================================
--- projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml	2008-01-11 11:30:39 UTC (rev 68876)
+++ projects/ejb3/trunk/metadata/src/test/resources/interceptor/ejb-jar.xml	2008-01-11 11:47:47 UTC (rev 68877)
@@ -6,6 +6,11 @@
                             http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
         version="3.0">
     <display-name>InterceptorsTest</display-name>
+    <enterprise-beans>
+    	<session>
+    		<ejb-name>InterceptedBean</ejb-name>
+    	</session>
+    </enterprise-beans>
     <interceptors>
 		<interceptor>
 			<interceptor-class>org.jboss.ejb3.test.metadata.interceptor.DummyInterceptor</interceptor-class>

Added: projects/ejb3/trunk/metadata/src/test/resources/log4j.xml
===================================================================
--- projects/ejb3/trunk/metadata/src/test/resources/log4j.xml	                        (rev 0)
+++ projects/ejb3/trunk/metadata/src/test/resources/log4j.xml	2008-01-11 11:47:47 UTC (rev 68877)
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<!-- ===================================================================== -->
+<!--                                                                       -->
+<!--  Log4j Configuration                                                  -->
+<!--                                                                       -->
+<!-- ===================================================================== -->
+
+<!-- $Id$ -->
+
+<!--
+   | For more configuration infromation and examples see the Jakarta Log4j
+   | owebsite: http://jakarta.apache.org/log4j
+ -->
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+
+  <!-- ================================= -->
+  <!-- Preserve messages in a local file -->
+  <!-- ================================= -->
+
+  <!-- A time/date based rolling appender -->
+  <appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
+    <param name="File" value="target/test.log"/>
+    <param name="Append" value="false"/>
+
+    <!-- Rollover at midnight each day -->
+    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
+
+    <!-- Rollover at the top of each hour
+    <param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
+    -->
+
+    <layout class="org.apache.log4j.PatternLayout">
+      <!-- The default pattern: Date Priority [Category] Message\n -->
+      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+
+      <!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
+      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
+       -->
+    </layout>	    
+  </appender>
+
+  <!-- A size based file rolling appender
+  <appender name="FILE" class="org.jboss.logging.appender.RollingFileAppender">
+    <param name="File" value="${jboss.server.home.dir}/log/server.log"/>
+    <param name="Append" value="false"/>
+    <param name="MaxFileSize" value="500KB"/>
+    <param name="MaxBackupIndex" value="1"/>
+
+    <layout class="org.apache.log4j.PatternLayout">
+      <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+    </layout>	    
+  </appender>
+  -->
+
+  <!-- ============================== -->
+  <!-- Append messages to the console -->
+  <!-- ============================== -->
+
+  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+    <param name="Target" value="System.out"/>
+    <param name="Threshold" value="INFO"/>
+
+    <layout class="org.apache.log4j.PatternLayout">
+      <!-- The default pattern: Date Priority [Category] Message\n -->
+      <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
+    </layout>
+  </appender>
+
+
+  <!-- ================ -->
+  <!-- Limit categories -->
+  <!-- ================ -->
+
+  <!-- Limit JBoss categories to INFO
+  <category name="org.jboss">
+    <priority value="INFO" class="org.jboss.logging.XLevel"/>
+  </category>
+  -->
+
+  <!-- Increase the priority threshold for the DefaultDS category
+  <category name="DefaultDS">
+    <priority value="FATAL"/>
+  </category>
+  -->
+
+  <!-- Decrease the priority threshold for the org.jboss.varia category
+  <category name="org.jboss.varia">
+    <priority value="DEBUG"/>
+  </category>
+  -->
+
+  <!--
+     | An example of enabling the custom TRACE level priority that is used
+     | by the JBoss internals to diagnose low level details. This example
+     | turns on TRACE level msgs for the org.jboss.ejb.plugins package and its
+     | subpackages. This will produce A LOT of logging output.
+  <category name="org.jboss.system">
+    <priority value="TRACE" class="org.jboss.logging.XLevel"/>
+  </category>
+  -->
+
+  <!-- ======================= -->
+  <!-- Setup the Root category -->
+  <!-- ======================= -->
+
+  <root>
+    <appender-ref ref="CONSOLE"/>
+    <appender-ref ref="FILE"/>
+  </root>
+  
+</log4j:configuration>


Property changes on: projects/ejb3/trunk/metadata/src/test/resources/log4j.xml
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native




More information about the jboss-cvs-commits mailing list