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 2017/07/29 18:27:06 UTC

svn commit: r1803385 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/event/ test/java/org/apache/webbeans/test/events/injectiontarget/

Author: struberg
Date: Sat Jul 29 18:27:06 2017
New Revision: 1803385

URL: http://svn.apache.org/viewvc?rev=1803385&view=rev
Log:
OWB-1205 omit sending ProcessInjectionPoint when parsing Extension lifecycle observer methods

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/injectiontarget/ProcessInjectionPointTest.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java?rev=1803385&r1=1803384&r2=1803385&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ContainerEventObserverMethodImpl.java Sat Jul 29 18:27:06 2017
@@ -38,7 +38,9 @@ public class ContainerEventObserverMetho
     public ContainerEventObserverMethodImpl(AbstractOwbBean<?> bean, AnnotatedMethod<T> annotatedObserverMethod,
                                             AnnotatedParameter<T> annotatedObservesParameter)
     {
-        super(bean, annotatedObserverMethod, annotatedObservesParameter);
+        // we do NOT fire any further events while building this ObserverMethod, e.g for ProcessInjectionPoint...
+        super(bean, annotatedObserverMethod, annotatedObservesParameter, false);
+
         WithAnnotations withAnnotationsAnn = annotatedObservesParameter.getAnnotation(WithAnnotations.class);
         if (withAnnotationsAnn != null)
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java?rev=1803385&r1=1803384&r2=1803385&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java Sat Jul 29 18:27:06 2017
@@ -134,6 +134,11 @@ public class ObserverMethodImpl<T> imple
      */
     public ObserverMethodImpl(AbstractOwbBean<?> ownerBean, AnnotatedMethod<T> annotatedObserverMethod, AnnotatedParameter<T> annotatedObservesParameter)
     {
+        this(ownerBean, annotatedObserverMethod, annotatedObservesParameter, true);
+    }
+
+    protected ObserverMethodImpl(AbstractOwbBean<?> ownerBean, AnnotatedMethod<T> annotatedObserverMethod, AnnotatedParameter<T> annotatedObservesParameter, boolean fireEvent)
+    {
         this.ownerBean = ownerBean;
         this.annotatedObservesParameter = annotatedObservesParameter;
         this.annotatedObserverMethod = annotatedObserverMethod;
@@ -189,7 +194,7 @@ public class ObserverMethodImpl<T> imple
         {
             if (!parameter.isAnnotationPresent(observerAnnotation))
             {
-                injectionPoints.add(getWebBeansContext().getInjectionPointFactory().buildInjectionPoint(ownerBean, parameter, true));
+                injectionPoints.add(getWebBeansContext().getInjectionPointFactory().buildInjectionPoint(ownerBean, parameter, fireEvent));
             }
         }
 

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/injectiontarget/ProcessInjectionPointTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/injectiontarget/ProcessInjectionPointTest.java?rev=1803385&r1=1803384&r2=1803385&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/injectiontarget/ProcessInjectionPointTest.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/events/injectiontarget/ProcessInjectionPointTest.java Sat Jul 29 18:27:06 2017
@@ -20,6 +20,8 @@ import javax.enterprise.context.Dependen
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.Typed;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
 import javax.enterprise.inject.spi.Extension;
 import javax.enterprise.inject.spi.ProcessInjectionPoint;
 import javax.inject.Inject;
@@ -30,6 +32,15 @@ import org.junit.Test;
 
 public class ProcessInjectionPointTest extends AbstractUnitTest
 {
+    @Test
+    public void testBeforeBeanDiscoveryMustNotTriggerProcessInjectionPoint()
+    {
+        addExtension(new TestExtension2());
+        startContainer(X.class);
+
+        TestExtension2 extensionBeanInstance = getInstance(TestExtension2.class);
+        Assert.assertNotNull(extensionBeanInstance);
+    }
 
     @Test
     public void testConsumerAScanning()
@@ -43,6 +54,9 @@ public class ProcessInjectionPointTest e
 
         Assert.assertFalse(extension.isBInjectionPointParsed());
         Assert.assertFalse(extension.isOtherInjectionPointParsed());
+
+        TestExtension extensionBeanInstance = getInstance(TestExtension.class);
+        Assert.assertNotNull(extensionBeanInstance);
     }
 
     @Test
@@ -110,11 +124,13 @@ public class ProcessInjectionPointTest e
         Assert.assertTrue(extension.isRawInstanceInjectionPointParsed());
     }
 
-    public interface SomeInterface {
+    public interface SomeInterface
+    {
         void doSomething();
     }
 
-    public static class SomeImpl implements SomeInterface {
+    public static class SomeImpl implements SomeInterface
+    {
         @Override
         public void doSomething()
         {
@@ -276,4 +292,21 @@ public class ProcessInjectionPointTest e
             return explicitInstanceInjectionPointParsed;
         }
     }
-}
+
+    public static class TestExtension2 implements Extension
+    {
+        void TestWeirdBeforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd, BeanManager unusedBeanManager)
+        {
+            // all fine, this is just to test an old problem with firing
+            // ProcessInjectionPoint for Extension observers as well.
+            // Which created a problem because the Extensions are not yet ready.
+        }
+
+        void testExplicitInstance(@Observes ProcessInjectionPoint<?, ?> pip, BeanManager unusedBeanManager)
+        {
+            // nothing to do
+        }
+
+
+    }
+}
\ No newline at end of file