[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