[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