You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2013/01/12 21:43:54 UTC

svn commit: r1432509 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/component/ main/java/org/apache/webbeans/component/creation/ test/java/org/apache/webbeans/newtests/interceptors/resolution/ test/java/org/apache/webbeans/ne...

Author: struberg
Date: Sat Jan 12 20:43:54 2013
New Revision: 1432509

URL: http://svn.apache.org/viewvc?rev=1432509&view=rev
Log:
OWB-344 fix EjbInterceptorBean and introduce SelfInterceptorBeanBuilder

Added:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java
      - copied, changed from r1432492, openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/SelfInterceptorBeanBuilderTest.java
      - copied, changed from r1432492, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/interceptors/SelfInterceptedClass.java
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/CdiInterceptorBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/SelfInterceptorBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/CdiInterceptorBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/CdiInterceptorBean.java?rev=1432509&r1=1432508&r2=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/CdiInterceptorBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/CdiInterceptorBean.java Sat Jan 12 20:43:54 2013
@@ -18,16 +18,12 @@
  */
 package org.apache.webbeans.component;
 
-import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
 import java.util.Set;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.creational.CreationalContextImpl;
-import org.apache.webbeans.inject.InjectableConstructor;
-import org.apache.webbeans.portable.InjectionTargetImpl;
+
 
 /**
  * <p>{@link javax.enterprise.inject.spi.Interceptor}
@@ -52,21 +48,6 @@ public class CdiInterceptorBean<T> exten
     private Set<Annotation> interceptorBindings;
 
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected T createComponentInstance(CreationalContext<T> creationalContext)
-    {
-        Constructor<T> con = getConstructor();
-        InjectionTargetImpl<T> injectionTarget = new InjectionTargetImpl<T>(getAnnotatedType(), getInjectionPoints(), getWebBeansContext());
-        InjectableConstructor<T> ic = new InjectableConstructor<T>(con, injectionTarget, (CreationalContextImpl<T>) creationalContext);
-
-        T instance = ic.doInjection();
-
-        return instance;
-    }
-
 
     public void setInterceptorBindings(Set<Annotation> interceptorBindings)
     {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java?rev=1432509&r1=1432508&r2=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InterceptorBean.java Sat Jan 12 20:43:54 2013
@@ -19,6 +19,7 @@
 package org.apache.webbeans.component;
 
 import javax.enterprise.context.Dependent;
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.InterceptionType;
 import javax.enterprise.inject.spi.Interceptor;
@@ -31,7 +32,10 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.inject.InjectableConstructor;
+import org.apache.webbeans.portable.InjectionTargetImpl;
 import org.apache.webbeans.util.ExceptionUtil;
 
 /**
@@ -107,6 +111,19 @@ public abstract class InterceptorBean<T>
         super(webBeansContext, WebBeansType.INTERCEPTOR, annotatedType.getJavaClass(), annotatedType);
     }
 
+    @Override
+    protected T createComponentInstance(CreationalContext<T> creationalContext)
+    {
+        Constructor<T> con = getConstructor();
+        InjectionTargetImpl<T> injectionTarget = new InjectionTargetImpl<T>(getAnnotatedType(), getInjectionPoints(), getWebBeansContext());
+        InjectableConstructor<T> ic = new InjectableConstructor<T>(con, injectionTarget, (CreationalContextImpl<T>) creationalContext);
+
+        T instance = ic.doInjection();
+
+        return instance;
+    }
+
+
     /**
      * Get constructor.
      *

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/SelfInterceptorBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/SelfInterceptorBean.java?rev=1432509&r1=1432508&r2=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/SelfInterceptorBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/SelfInterceptorBean.java Sat Jan 12 20:43:54 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.webbeans.component;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Interceptor;
 import java.lang.annotation.Annotation;
@@ -25,6 +26,7 @@ import java.util.Collections;
 import java.util.Set;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.exception.WebBeansException;
 
 /**
  * <p>Implicit self-interceptor Bean implementation.
@@ -54,4 +56,9 @@ public class SelfInterceptorBean<T> exte
         return Collections.emptySet();
     }
 
+    public T create(CreationalContext<T> context)
+    {
+        throw new WebBeansException("You must not create an Interceptor instance of a self-intercepted bean!");
+    }
+
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java?rev=1432509&r1=1432508&r2=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/CdiInterceptorBeanBuilder.java Sat Jan 12 20:43:54 2013
@@ -19,17 +19,13 @@
 package org.apache.webbeans.component.creation;
 
 
-import javax.enterprise.inject.spi.AnnotatedConstructor;
 import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.InjectionPoint;
 
 import java.lang.annotation.Annotation;
-import java.util.List;
 
 import org.apache.webbeans.component.CdiInterceptorBean;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
-import org.apache.webbeans.inject.impl.InjectionPointFactory;
 import org.apache.webbeans.util.ArrayUtil;
 
 /**
@@ -37,7 +33,6 @@ import org.apache.webbeans.util.ArrayUti
  */
 public class CdiInterceptorBeanBuilder<T> extends InterceptorBeanBuilder<T>
 {
-    private AnnotatedConstructor<T> constructor;
 
     public CdiInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType)
     {
@@ -69,30 +64,6 @@ public class CdiInterceptorBeanBuilder<T
         getBean().setInterceptorBindings(ArrayUtil.asSet(bindings));
     }
 
-    public void defineConstructor()
-    {
-        constructor = getBeanConstructor();
-        addConstructorInjectionPointMetaData();
-    }
-
-
-    protected void addConstructorInjectionPointMetaData()
-    {
-        if (constructor == null)
-        {
-            return;
-        }
-        CdiInterceptorBean<T> bean = getBean();
-        InjectionPointFactory injectionPointFactory = webBeansContext.getInjectionPointFactory();
-        List<InjectionPoint> injectionPoints = injectionPointFactory.getConstructorInjectionPointData(bean, constructor);
-        for (InjectionPoint injectionPoint : injectionPoints)
-        {
-            addImplicitComponentForInjectionPoint(injectionPoint);
-            bean.addInjectionPoint(injectionPoint);
-        }
-        bean.setConstructor(constructor.getJavaMember());
-    }
-
     public CdiInterceptorBean<T> getBean()
     {
         return (CdiInterceptorBean<T>)super.getBean();

Copied: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java (from r1432492, openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java?p2=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java&p1=openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java&r1=1432492&r2=1432509&rev=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/EjbInterceptorBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/SelfInterceptorBeanBuilder.java Sat Jan 12 20:43:54 2013
@@ -21,25 +21,24 @@ package org.apache.webbeans.component.cr
 
 import javax.enterprise.inject.spi.AnnotatedType;
 
-import org.apache.webbeans.component.EjbInterceptorBean;
+import org.apache.webbeans.component.SelfInterceptorBean;
 import org.apache.webbeans.config.WebBeansContext;
 
 /**
  * Bean builder for {@link org.apache.webbeans.component.InterceptorBean}s.
  */
-public class EjbInterceptorBeanBuilder<T> extends InterceptorBeanBuilder<T>
+public class SelfInterceptorBeanBuilder<T> extends InterceptorBeanBuilder<T>
 {
 
-    public EjbInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType)
+    public SelfInterceptorBeanBuilder(WebBeansContext webBeansContext, AnnotatedType<T> annotatedType)
     {
-        super(new EjbInterceptorBean<T>(webBeansContext, annotatedType));
+        super(new SelfInterceptorBean<T>(webBeansContext, annotatedType));
     }
 
-    public void defineEjbInterceptorRules()
+    public void defineSelfInterceptorRules()
     {
         checkInterceptorConditions();
         defineInterceptorRules();
-
     }
 
     public boolean isInterceptorEnabled()
@@ -48,8 +47,8 @@ public class EjbInterceptorBeanBuilder<T
     }
 
 
-    public EjbInterceptorBean<T> getBean()
+    public SelfInterceptorBean<T> getBean()
     {
-        return (EjbInterceptorBean<T>)super.getBean();
+        return (SelfInterceptorBean<T>)super.getBean();
     }
 }

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java?rev=1432509&r1=1432508&r2=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java Sat Jan 12 20:43:54 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.webbeans.newtests.interceptors.resolution;
 
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -56,6 +57,10 @@ public class EjbInterceptorBeanBuilderTe
         InterceptorBean<EjbInterceptor> bean = ibb.getBean();
         Assert.assertNotNull(bean);
 
+        CreationalContext<EjbInterceptor> cc = getBeanManager().createCreationalContext(bean);
+
+        EjbInterceptor ebi = bean.create(cc);
+        Assert.assertNotNull(ebi);
 
         shutDownContainer();
     }

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/SelfInterceptorBeanBuilderTest.java (from r1432492, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/SelfInterceptorBeanBuilderTest.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/SelfInterceptorBeanBuilderTest.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java&r1=1432492&r2=1432509&rev=1432509&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/EjbInterceptorBeanBuilderTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/SelfInterceptorBeanBuilderTest.java Sat Jan 12 20:43:54 2013
@@ -23,37 +23,32 @@ import java.util.ArrayList;
 import java.util.Collection;
 
 import org.apache.webbeans.component.InterceptorBean;
-import org.apache.webbeans.component.creation.EjbInterceptorBeanBuilder;
+import org.apache.webbeans.component.creation.SelfInterceptorBeanBuilder;
 import org.apache.webbeans.newtests.AbstractUnitTest;
-
-import org.apache.webbeans.newtests.interceptors.ejb.EjbInterceptor;
-import org.apache.webbeans.newtests.interceptors.ejb.ManagedBeanWithEjbInterceptor;
-import org.apache.webbeans.newtests.interceptors.resolution.beans.UtilitySampleBean;
+import org.apache.webbeans.newtests.interceptors.resolution.interceptors.SelfInterceptedClass;
 import org.junit.Assert;
 import org.junit.Test;
 
 /**
  * Test for building EJB-style interceptor beans
  */
-public class EjbInterceptorBeanBuilderTest extends AbstractUnitTest
+public class SelfInterceptorBeanBuilderTest extends AbstractUnitTest
 {
 
     @Test
     public void testEjbInterceptorBeanCreation()
     {
         Collection<Class<?>> beanClasses = new ArrayList<Class<?>>();
-        beanClasses.add(UtilitySampleBean.class);
-        beanClasses.add(EjbInterceptor.class);
-        beanClasses.add(ManagedBeanWithEjbInterceptor.class);
+        beanClasses.add(SelfInterceptedClass.class);
 
         startContainer(beanClasses, null);
 
-        AnnotatedType<EjbInterceptor> annotatedType = getBeanManager().createAnnotatedType(EjbInterceptor.class);
+        AnnotatedType<SelfInterceptedClass> annotatedType = getBeanManager().createAnnotatedType(SelfInterceptedClass.class);
 
-        EjbInterceptorBeanBuilder<EjbInterceptor> ibb
-                = new EjbInterceptorBeanBuilder<EjbInterceptor>(getWebBeansContext(), annotatedType);
-        ibb.defineEjbInterceptorRules();
-        InterceptorBean<EjbInterceptor> bean = ibb.getBean();
+        SelfInterceptorBeanBuilder<SelfInterceptedClass> ibb
+                = new SelfInterceptorBeanBuilder<SelfInterceptedClass>(getWebBeansContext(), annotatedType);
+        ibb.defineSelfInterceptorRules();
+        InterceptorBean<SelfInterceptedClass> bean = ibb.getBean();
         Assert.assertNotNull(bean);
 
 

Added: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/interceptors/SelfInterceptedClass.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/interceptors/SelfInterceptedClass.java?rev=1432509&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/interceptors/SelfInterceptedClass.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/interceptors/resolution/interceptors/SelfInterceptedClass.java Sat Jan 12 20:43:54 2013
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.webbeans.newtests.interceptors.resolution.interceptors;
+
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.InvocationContext;
+
+/**
+ * Sample bean which has an AroundInvoke interceptor on itself.
+ */
+public class SelfInterceptedClass
+{
+    public static int interceptionCount = 0;
+
+    private int meaningOfLife = 0;
+
+    public void someBusinessMethod()
+    {
+        meaningOfLife = 42;
+    }
+
+    public int getMeaningOfLife()
+    {
+        return meaningOfLife;
+    }
+
+    @AroundInvoke
+    private Object interceptMe(InvocationContext ic) throws Exception
+    {
+        interceptionCount++;
+        return ic.proceed();
+    }
+}
+