[jboss-cvs] JBossAS SVN: r68936 - projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jan 14 04:44:50 EST 2008


Author: wolfc
Date: 2008-01-14 04:44:50 -0500 (Mon, 14 Jan 2008)
New Revision: 68936

Added:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisor.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorHelper.java
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorWrapper.java
Modified:
   projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java
Log:
Extended advisor

Added: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisor.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisor.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisor.java	2008-01-14 09:44:50 UTC (rev 68936)
@@ -0,0 +1,46 @@
+/*
+ * 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.aop;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Member;
+
+/**
+ * An advisor which has access to an extended annotation repository.
+ * 
+ * (Basically it has the same methods as the extended annotation repository)
+ * 
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public interface ExtendedAdvisor
+{
+   // Advisor has hasAnnotation methods (which don't work correctly)
+   
+   boolean isAnnotationPresent(Class<?> cls, Class<? extends Annotation> annotationType);
+
+   boolean isAnnotationPresent(Class<?> cls, Member member, Class<? extends Annotation> annotationType);
+   
+   <A extends Annotation> A resolveAnnotation(Class<?> cls, Class<A> annotationType);
+
+   <A extends Annotation> A resolveAnnotation(Class<?> cls, Member member, Class<A> annotationType);
+}


Property changes on: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisor.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/aop/ExtendedAdvisorHelper.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorHelper.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorHelper.java	2008-01-14 09:44:50 UTC (rev 68936)
@@ -0,0 +1,48 @@
+/*
+ * 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.aop;
+
+import org.jboss.aop.Advised;
+import org.jboss.aop.Advisor;
+import org.jboss.logging.Logger;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ExtendedAdvisorHelper
+{
+   private static final Logger log = Logger.getLogger(ExtendedAdvisorHelper.class);
+   
+   public static ExtendedAdvisor getExtendedAdvisor(Advisor advisor, Object target)
+   {
+      if(advisor instanceof ExtendedAdvisor)
+         return ExtendedAdvisor.class.cast(advisor);
+      
+      if(target instanceof Advised)
+         return new ExtendedAdvisorWrapper(Advised.class.cast(target)._getAdvisor());
+      
+      throw new RuntimeException("NYI");
+   }
+}


Property changes on: projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorHelper.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/aop/ExtendedAdvisorWrapper.java
===================================================================
--- projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorWrapper.java	                        (rev 0)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/ExtendedAdvisorWrapper.java	2008-01-14 09:44:50 UTC (rev 68936)
@@ -0,0 +1,92 @@
+/*
+ * 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.aop;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Member;
+import java.lang.reflect.Method;
+
+import org.jboss.aop.Advisor;
+import org.jboss.logging.Logger;
+
+/**
+ * Wraps an AOP Advisor to become an extended advisor of itself.
+ *
+ * @author <a href="mailto:carlo.dewolf at jboss.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class ExtendedAdvisorWrapper implements ExtendedAdvisor
+{
+   private static final Logger log = Logger.getLogger(ExtendedAdvisorWrapper.class);
+
+   private Advisor advisor;
+   
+   ExtendedAdvisorWrapper(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() + ")");
+   }
+   
+   public boolean isAnnotationPresent(Class<?> cls, Class<? extends Annotation> annotationType)
+   {
+      checkClass(cls);
+      // AOP weirdness
+      return advisor.hasAnnotation(cls, annotationType);
+   }
+
+   public boolean isAnnotationPresent(Class<?> cls, Member member, Class<? extends Annotation> annotationType)
+   {
+      checkClass(cls);
+      if(member instanceof Constructor)
+         return advisor.resolveAnnotation((Constructor<?>) member, annotationType) != null; // don't ask
+      else if(member instanceof Field)
+         return advisor.resolveAnnotation((Field) member, annotationType) != null; // don't ask
+      else if(member instanceof Method)
+         return advisor.hasAnnotation((Method) member, annotationType);
+      throw new IllegalStateException("unknown type of member " + member);
+   }
+
+   public <A extends Annotation> A resolveAnnotation(Class<?> cls, Class<A> annotationType)
+   {
+      return annotationType.cast(advisor.resolveAnnotation(annotationType));
+   }
+
+   public <A extends Annotation> A resolveAnnotation(Class<?> cls, Member member, Class<A> annotationType)
+   {
+      checkClass(cls);
+      if(member instanceof Constructor)
+         return annotationType.cast(advisor.resolveAnnotation((Constructor<?>) member, annotationType));
+      else if(member instanceof Field)
+         return annotationType.cast(advisor.resolveAnnotation((Field) member, annotationType));
+      else if(member instanceof Method)
+         return annotationType.cast(advisor.resolveAnnotation((Method) member, annotationType));
+      throw new IllegalStateException("unknown type of member " + member);
+   }
+}


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

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-14 07:16:45 UTC (rev 68935)
+++ projects/ejb3/trunk/interceptors/src/main/java/org/jboss/ejb3/interceptors/aop/InterceptorsFactory.java	2008-01-14 09:44:50 UTC (rev 68936)
@@ -38,8 +38,6 @@
 import org.jboss.aop.joinpoint.MethodInvocation;
 import org.jboss.ejb3.interceptors.InterceptorFactory;
 import org.jboss.ejb3.interceptors.InterceptorFactoryRef;
-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;
 
@@ -66,6 +64,7 @@
          InterceptorFactoryRef interceptorFactoryRef = (InterceptorFactoryRef) advisor.resolveAnnotation(InterceptorFactoryRef.class);
          if(interceptorFactoryRef == null)
             throw new IllegalStateException("No InterceptorFactory specified on " + advisor.getName());
+         log.info("interceptor factory class = " + interceptorFactoryRef.value());
          InterceptorFactory interceptorFactory = interceptorFactoryRef.value().newInstance();
          
          Interceptors interceptorsAnnotation = (Interceptors) advisor.resolveAnnotation(Interceptors.class);
@@ -85,7 +84,8 @@
                }
                //Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
                //Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
-               AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);
+               //AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);
+               ExtendedAdvisor interceptorAdvisor = ExtendedAdvisorHelper.getExtendedAdvisor(advisor, interceptor);
                log.debug("  interceptorAdvisor = " + interceptorAdvisor);
                // TODO: should be only non-overriden methods (EJB 3 12.4.1 last bullet)
                for(Method method : ClassHelper.getAllMethods(interceptorClass))
@@ -123,7 +123,7 @@
                   }
                   //Advisor interceptorAdvisor = ((Advised) interceptor)._getAdvisor();
                   //Advisor interceptorAdvisor = advisor.getManager().getAdvisor(interceptorClass);
-                  AnnotationAdvisor interceptorAdvisor = AnnotationAdvisorHelper.getAnnotationAdvisor(advisor, interceptor);
+                  ExtendedAdvisor interceptorAdvisor = ExtendedAdvisorHelper.getExtendedAdvisor(advisor, interceptor);
                   for(Method method : ClassHelper.getAllMethods(interceptorClass))
                   {
                      /* EJB 3 12.7 footnote 57: no lifecycle callbacks on business method interceptors




More information about the jboss-cvs-commits mailing list