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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 9 07:34:08 EST 2008


Author: wolfc
Date: 2008-01-09 07:34:08 -0500 (Wed, 09 Jan 2008)
New Revision: 68728

Added:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisor.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorHelper.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorSupport.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorWrapper.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/package.html
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/TestInterceptorFactory.java
Modified:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/DirectContainer.java
   projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java
   projects/ejb3/trunk/interceptors/src/test/resources/proxy/jboss-aop.xml
Log:
Annotation advisor via container (not finished yet)

Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisor.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisor.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -0,0 +1,49 @@
+/*
+ * 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.interceptors.annotation;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * A container can advise multiple classes for annotations.
+ * 
+ * (An AOP Advisor can only do one.)
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public interface AnnotationAdvisor
+{
+   <T extends Annotation> T getAnnotation(Class<?> cls, Class<T> annotationClass);
+   
+   <T extends Annotation> T getAnnotation(Class<?> cls, Field field, Class<T> annotationClass);
+   
+   <T extends Annotation> T getAnnotation(Class<?> cls, Method method, Class<T> annotationClass);
+   
+   boolean isAnnotationPresent(Class<?> cls, Class<? extends Annotation> annotationClass);
+   
+   boolean isAnnotationPresent(Class<?> cls, Field field, Class<? extends Annotation> annotationClass);
+   
+   boolean isAnnotationPresent(Class<?> cls, Method method, Class<? extends Annotation> annotationClass);
+}


Property changes on: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisor.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorHelper.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorHelper.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorHelper.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -0,0 +1,49 @@
+/*
+ * 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.interceptors.annotation;
+
+import org.jboss.aop.Advised;
+import org.jboss.aop.Advisor;
+import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
+import org.jboss.logging.Logger;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AnnotationAdvisorHelper
+{
+   private static final Logger log = Logger.getLogger(AnnotationAdvisorHelper.class);
+   
+   public static AnnotationAdvisor getAnnotationAdvisor(Advisor advisor, Object target)
+   {
+      if(target instanceof Advised)
+         return new AnnotationAdvisorWrapper(((Advised) target)._getAdvisor());
+      
+      if(advisor instanceof ManagedObjectAdvisor)
+         return ((ManagedObjectAdvisor<?, ?>) advisor).getContainer();
+      
+      throw new RuntimeException("NYI");
+   }
+}


Property changes on: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorHelper.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorSupport.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorSupport.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorSupport.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -0,0 +1,69 @@
+/*
+ * 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.interceptors.annotation;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.jboss.logging.Logger;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class AnnotationAdvisorSupport implements AnnotationAdvisor
+{
+   private static final Logger log = Logger.getLogger(AnnotationAdvisorSupport.class);
+
+   public <T extends Annotation> T getAnnotation(Class<?> cls, Class<T> annotationClass)
+   {
+      return cls.getAnnotation(annotationClass);
+   }
+
+   public <T extends Annotation> T getAnnotation(Class<?> cls, Field field, Class<T> annotationClass)
+   {
+      return field.getAnnotation(annotationClass);
+   }
+
+   public <T extends Annotation> T getAnnotation(Class<?> cls, Method method, Class<T> annotationClass)
+   {
+      return method.getAnnotation(annotationClass);
+   }
+
+   public boolean isAnnotationPresent(Class<?> cls, Class<? extends Annotation> annotationClass)
+   {
+      return cls.isAnnotationPresent(annotationClass);
+   }
+
+   public boolean isAnnotationPresent(Class<?> cls, Field field, Class<? extends Annotation> annotationClass)
+   {
+      return field.isAnnotationPresent(annotationClass);
+   }
+
+   public boolean isAnnotationPresent(Class<?> cls, Method method, Class<? extends Annotation> annotationClass)
+   {
+      return method.isAnnotationPresent(annotationClass);
+   }
+}


Property changes on: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorSupport.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorWrapper.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorWrapper.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorWrapper.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -0,0 +1,93 @@
+/*
+ * 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.interceptors.annotation;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+import org.jboss.aop.Advisor;
+import org.jboss.logging.Logger;
+
+/**
+ * Wraps an AOP Advisor to become an AnnotationAdvisor.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+class AnnotationAdvisorWrapper implements AnnotationAdvisor
+{
+   private static final Logger log = Logger.getLogger(AnnotationAdvisorWrapper.class);
+
+   private Advisor advisor;
+   
+   AnnotationAdvisorWrapper(Advisor advisor)
+   {
+      assert advisor != null : "advisor is null";
+      this.advisor = advisor;
+   }
+   
+   private final void checkClass(Class<?> cls)
+   {
+      if(cls != advisor.getClazz())
+         throw new IllegalArgumentException("Can't advise on " + cls + " (only on " + advisor.getClazz() + ")");
+   }
+   
+   @SuppressWarnings("unchecked")
+   public <T extends Annotation> T getAnnotation(Class<?> cls, Class<T> annotationClass)
+   {
+      checkClass(cls);
+      return (T) advisor.resolveAnnotation(annotationClass);
+   }
+
+   @SuppressWarnings("unchecked")
+   public <T extends Annotation> T getAnnotation(Class<?> cls, Field field, Class<T> annotationClass)
+   {
+      checkClass(cls);
+      return (T) advisor.resolveAnnotation(field, annotationClass);
+   }
+
+   @SuppressWarnings("unchecked")
+   public <T extends Annotation> T getAnnotation(Class<?> cls, Method method, Class<T> annotationClass)
+   {
+      checkClass(cls);
+      return (T) advisor.resolveAnnotation(method, annotationClass);
+   }
+
+   public boolean isAnnotationPresent(Class<?> cls, Class<? extends Annotation> annotationClass)
+   {
+      return advisor.hasAnnotation(cls, annotationClass);
+   }
+
+   public boolean isAnnotationPresent(Class<?> cls, Field field, Class<? extends Annotation> annotationClass)
+   {
+      checkClass(cls);
+      // I hate AOP
+      return advisor.resolveAnnotation(field, annotationClass) != null;
+   }
+   
+   public boolean isAnnotationPresent(Class<?> cls, Method method, Class<? extends Annotation> annotationClass)
+   {
+      checkClass(cls);
+      return advisor.hasAnnotation(method, annotationClass);
+   }
+}


Property changes on: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/AnnotationAdvisorWrapper.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/package.html
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/package.html	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/annotation/package.html	2008-01-09 12:34:08 UTC (rev 68728)
@@ -0,0 +1,6 @@
+<html>
+	<body>
+		Nobody should consult the advisor for annotations, but go through
+		an AnnotationAdvisor.
+	</body>
+</html>
\ No newline at end of file

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-09 12:25:58 UTC (rev 68727)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -34,6 +34,8 @@
 import org.jboss.aop.advice.Interceptor;
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.ejb3.interceptors.annotation.AnnotationAdvisor;
+import org.jboss.ejb3.interceptors.annotation.AnnotationAdvisorHelper;
 import org.jboss.ejb3.interceptors.lang.ClassHelper;
 import org.jboss.logging.Logger;
 
@@ -55,6 +57,8 @@
          log.debug(" advisor " + advisor.getClass().getName());
          log.debug(" instanceAdvisor " + toString(instanceAdvisor));
          
+         // TODO: the whole interceptor advisor & annotation stuff is butt ugly
+         
          Interceptors interceptorsAnnotation = (Interceptors) advisor.resolveAnnotation(Interceptors.class);
          assert interceptorsAnnotation != null : "interceptors annotation not found"; // FIXME: not correct, bean can be without interceptors
          List<Interceptor> postConstructs = new ArrayList<Interceptor>();
@@ -63,18 +67,19 @@
          {
             Object interceptor = interceptorClass.newInstance();
             //Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
-            Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
-            log.debug("  interceptorAdvisor = " + interceptorAdvisor.getName());
+            //Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
+            AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);
+            log.debug("  interceptorAdvisor = " + interceptorAdvisor);
 //            InstanceAdvisor interceptorInstanceAdvisor = ((Advised) interceptor)._getInstanceAdvisor();
 //            log.debug("  interceptorInstanceAdvisor = " + interceptorInstanceAdvisor.getClass().getName());
             // TODO: should be only non-overriden methods (EJB 3 12.4.1 last bullet)
             for(Method method : ClassHelper.getAllMethods(interceptorClass))
             {
-               if(interceptorAdvisor.hasAnnotation(method, PostConstruct.class))
+               if(interceptorAdvisor.isAnnotationPresent(interceptorClass, method, PostConstruct.class))
                {
                   postConstructs.add(new LifecycleCallbackInterceptorMethodInterceptor(interceptor, method));
                }
-               if(interceptorAdvisor.hasAnnotation(method, AroundInvoke.class))
+               if(interceptorAdvisor.isAnnotationPresent(interceptorClass, method, AroundInvoke.class))
                {
                   classInterceptors.add(new BusinessMethodInterceptorMethodInterceptor(interceptor, method));
                }
@@ -97,16 +102,17 @@
                   // FIXME: do not create perse, we might already have done that
                   Object interceptor = interceptorClass.newInstance();
                   //Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
-                  Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
+                  //Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
+                  AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);
                   for(Method method : ClassHelper.getAllMethods(interceptorClass))
                   {
                      /* EJB 3 12.7 footnote 57: no lifecycle callbacks on business method interceptors
-                     if(interceptorAdvisor.hasAnnotation(method, PostConstruct.class))
+                     if(interceptorAdvisor.isAnnotationPresent(interceptorClass, method, PostConstruct.class))
                      {
                         postConstructs.add(new LifecycleCallbackInterceptorMethodInterceptor(interceptor, method));
                      }
                      */
-                     if(interceptorAdvisor.hasAnnotation(method, AroundInvoke.class))
+                     if(interceptorAdvisor.isAnnotationPresent(interceptorClass, method, AroundInvoke.class))
                      {
                         businessMethodInterceptors.add(new BusinessMethodInterceptorMethodInterceptor(interceptor, method));
                      }

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java	2008-01-09 12:25:58 UTC (rev 68727)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/container/AbstractContainer.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -30,6 +30,8 @@
 import org.jboss.aop.MethodInfo;
 import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.aop.util.MethodHashing;
+import org.jboss.ejb3.interceptors.annotation.AnnotationAdvisor;
+import org.jboss.ejb3.interceptors.annotation.AnnotationAdvisorSupport;
 import org.jboss.ejb3.interceptors.lang.ClassHelper;
 import org.jboss.logging.Logger;
 
@@ -39,7 +41,7 @@
  * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
  * @version $Revision: $
  */
-public abstract class AbstractContainer<T, C extends AbstractContainer<T, C>>
+public abstract class AbstractContainer<T, C extends AbstractContainer<T, C>> extends AnnotationAdvisorSupport implements AnnotationAdvisor
 {
    private static final Logger log = Logger.getLogger(AbstractContainer.class);
    

Modified: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/DirectContainer.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/DirectContainer.java	2008-01-09 12:25:58 UTC (rev 68727)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/direct/DirectContainer.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -21,7 +21,9 @@
  */
 package org.jboss.ejb3.interceptors.direct;
 
+import org.jboss.aop.Advisor;
 import org.jboss.aop.Domain;
+import org.jboss.ejb3.interceptors.container.ManagedObjectAdvisor;
 import org.jboss.logging.Logger;
 
 /**
@@ -46,4 +48,10 @@
    {
       super(name, domainName, beanClass);
    }
+   
+   @SuppressWarnings("unchecked")
+   public static <C extends DirectContainer<?>> C getContainer(Advisor advisor)
+   {
+      return (C) ((ManagedObjectAdvisor<?, DirectContainer<C>>) advisor).getContainer();
+   }
 }

Added: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/TestInterceptorFactory.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/TestInterceptorFactory.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/TestInterceptorFactory.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -0,0 +1,49 @@
+/*
+ * 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.direct;
+
+import org.jboss.aop.Advisor;
+import org.jboss.aop.advice.Interceptor;
+import org.jboss.ejb3.interceptors.aop.AbstractInterceptorFactory;
+import org.jboss.ejb3.interceptors.aop.InterceptorSequencer;
+import org.jboss.ejb3.interceptors.direct.DirectContainer;
+import org.jboss.logging.Logger;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class TestInterceptorFactory extends AbstractInterceptorFactory
+{
+   private static final Logger log = Logger.getLogger(TestInterceptorFactory.class);
+   
+   @Override
+   public Object createPerClass(Advisor advisor)
+   {
+      log.info("advisor = " + advisor);
+      // This must not throw a ClassCastException
+      DirectContainer.getContainer(advisor);
+      return new InterceptorSequencer(new Interceptor[0]);
+   }
+}


Property changes on: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/TestInterceptorFactory.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java	2008-01-09 12:25:58 UTC (rev 68727)
+++ projects/ejb3/trunk/interceptors/src/test/java/org/jboss/ejb3/test/interceptors/direct/unit/DirectTestCase.java	2008-01-09 12:34:08 UTC (rev 68728)
@@ -74,7 +74,7 @@
       
       assertEquals(0, DirectInterceptor.postConstructs);
       
-      MyContainer<DirectBean> container = new MyContainer<DirectBean>("DirectBean", "InterceptorContainer", DirectBean.class);
+      MyContainer<DirectBean> container = new MyContainer<DirectBean>("DirectBean", "Test", DirectBean.class);
       container.testAdvisor();
       
       DirectBean bean = container.construct();

Modified: projects/ejb3/trunk/interceptors/src/test/resources/proxy/jboss-aop.xml
===================================================================
--- projects/ejb3/trunk/interceptors/src/test/resources/proxy/jboss-aop.xml	2008-01-09 12:25:58 UTC (rev 68727)
+++ projects/ejb3/trunk/interceptors/src/test/resources/proxy/jboss-aop.xml	2008-01-09 12:34:08 UTC (rev 68728)
@@ -115,4 +115,12 @@
 			<around name="aroundInvoke" aspect="InjectInterceptorsFactory"/>
 		</bind>
 	</domain>
+	
+	<aspect name="org.jboss.ejb3.test.interceptors.direct.TestInterceptor" factory="org.jboss.ejb3.test.interceptors.direct.TestInterceptorFactory" scope="PER_CLASS"/>
+	
+	<domain name="Test" extends="InterceptorContainer" inheritBindings="true">
+		<bind pointcut="execution(public * *->*(..))">
+			<around name="aroundInvoke" aspect="org.jboss.ejb3.test.interceptors.direct.TestInterceptor"/>
+		</bind>
+	</domain>
 </aop>
\ No newline at end of file




More information about the jboss-cvs-commits mailing list