You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by li...@apache.org on 2012/10/02 19:23:26 UTC

git commit: Fixing DELTASPIKE-275

Updated Branches:
  refs/heads/master 13ab29b44 -> 5864a5509


Fixing DELTASPIKE-275

All tests pass (for standalone CDI impls), things look like they should be
good. We're building up the list of injection points lazily now during the
AfterDeploymentValidation phase, so everything should be good.


Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/5864a550
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/5864a550
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/5864a550

Branch: refs/heads/master
Commit: 5864a550996a7f5083f469a71a23e0a102839895
Parents: 13ab29b
Author: Jason Porter <li...@apache.org>
Authored: Tue Oct 2 11:16:08 2012 -0600
Committer: Jason Porter <li...@apache.org>
Committed: Tue Oct 2 11:21:46 2012 -0600

----------------------------------------------------------------------
 .../core/api/exception/control/HandlerMethod.java  |    4 +-
 .../control/ExceptionHandlerDispatch.java          |    6 +-
 .../impl/exception/control/HandlerMethodImpl.java  |   76 +++++----------
 .../control/OutboundParameterValueRedefiner.java   |    4 +-
 .../extension/ExceptionControlExtension.java       |   12 +-
 5 files changed, 39 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/5864a550/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/exception/control/HandlerMethod.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/exception/control/HandlerMethod.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/exception/control/HandlerMethod.java
index e571c8b..ecf114b 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/exception/control/HandlerMethod.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/exception/control/HandlerMethod.java
@@ -21,6 +21,7 @@ package org.apache.deltaspike.core.api.exception.control;
 
 import org.apache.deltaspike.core.api.exception.control.event.ExceptionEvent;
 
+import javax.enterprise.inject.spi.BeanManager;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.Set;
@@ -53,8 +54,9 @@ public interface HandlerMethod<T extends Throwable>
      * Calls the handler method, passing the given event object.
      *
      * @param event event to pass to the handler.
+     * @param beanManager The BeanManager to use
      */
-    void notify(ExceptionEvent<T> event);
+    void notify(ExceptionEvent<T> event, BeanManager beanManager);
 
     /**
      * Obtains the precedence of the handler, relative to other handlers for the same type.

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/5864a550/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
index 40517d2..55bf8ee 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/ExceptionHandlerDispatch.java
@@ -19,9 +19,9 @@
 
 package org.apache.deltaspike.core.impl.exception.control;
 
+import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
 import org.apache.deltaspike.core.api.exception.control.event.ExceptionStackEvent;
 import org.apache.deltaspike.core.api.exception.control.event.ExceptionToCatchEvent;
-import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
 import org.apache.deltaspike.core.api.provider.BeanProvider;
 
 import javax.enterprise.context.ApplicationScoped;
@@ -93,7 +93,7 @@ public class ExceptionHandlerDispatch
                         final DefaultExceptionEvent callbackEvent = new DefaultExceptionEvent(stack, true,
                                 exceptionEventEvent.isHandled());
 
-                        handler.notify(callbackEvent);
+                        handler.notify(callbackEvent, beanManager);
 
                         LOG.fine(String.format("Handler %s returned status %s", handler,
                                 callbackEvent.getCurrentExceptionHandlingFlow().name()));
@@ -149,7 +149,7 @@ public class ExceptionHandlerDispatch
                         @SuppressWarnings("rawtypes")
                         final DefaultExceptionEvent depthFirstEvent = new DefaultExceptionEvent(stack, false,
                                 exceptionEventEvent.isHandled());
-                        handler.notify(depthFirstEvent);
+                        handler.notify(depthFirstEvent, beanManager);
 
                         LOG.fine(String.format("Handler %s returned status %s", handler,
                                 depthFirstEvent.getCurrentExceptionHandlingFlow().name()));

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/5864a550/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/HandlerMethodImpl.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/HandlerMethodImpl.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/HandlerMethodImpl.java
index b0a9301..2bc5e83 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/HandlerMethodImpl.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/HandlerMethodImpl.java
@@ -19,16 +19,15 @@
 
 package org.apache.deltaspike.core.impl.exception.control;
 
+import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
 import org.apache.deltaspike.core.api.exception.control.annotation.BeforeHandles;
 import org.apache.deltaspike.core.api.exception.control.annotation.Handles;
 import org.apache.deltaspike.core.api.exception.control.event.ExceptionEvent;
-import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
 import org.apache.deltaspike.core.api.literal.AnyLiteral;
-import org.apache.deltaspike.core.util.metadata.builder.ImmutableInjectionPoint;
-import org.apache.deltaspike.core.util.metadata.builder.InjectableMethod;
-import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
 import org.apache.deltaspike.core.api.provider.BeanProvider;
 import org.apache.deltaspike.core.util.BeanUtils;
+import org.apache.deltaspike.core.util.metadata.builder.ImmutableInjectionPoint;
+import org.apache.deltaspike.core.util.metadata.builder.InjectableMethod;
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Typed;
@@ -53,8 +52,8 @@ import java.util.Set;
 @Typed()
 public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
 {
-    private final Class beanClass;
-    private Bean<?> bean;
+    private final Class declaringBeanClass;
+    private final Bean<?> declaringBean;
     private final Set<Annotation> qualifiers;
     private final Type exceptionType;
     private final AnnotatedMethod<?> handler;
@@ -63,7 +62,6 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
     private final Method javaMethod;
     private final AnnotatedParameter<?> handlerParameter;
     private Set<InjectionPoint> injectionPoints;
-    private BeanManager beanManager;
 
     /**
      * Sole Constructor.
@@ -73,12 +71,13 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
      * @throws IllegalArgumentException if method is null, has no params or first param is not annotated with
      *                                  {@link Handles} or {@link BeforeHandles}
      */
-    public HandlerMethodImpl(final AnnotatedMethod<?> method, final BeanManager bm)
+    public HandlerMethodImpl(final Bean<?> handlerDeclaringBean, final AnnotatedMethod<?> method, final BeanManager bm)
     {
         //validation is done by the extension
 
         final Set<Annotation> tmpQualifiers = new HashSet<Annotation>();
 
+        declaringBean = handlerDeclaringBean;
         handler = method;
         javaMethod = method.getJavaMember();
 
@@ -109,7 +108,7 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
         }
 
         qualifiers = tmpQualifiers;
-        beanClass = method.getJavaMember().getDeclaringClass();
+        declaringBeanClass = method.getJavaMember().getDeclaringClass();
         exceptionType = ((ParameterizedType) handlerParameter.getBaseType()).getActualTypeArguments()[0];
     }
 
@@ -158,31 +157,9 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
         return returnParam;
     }
 
-    public Bean<?> getBean()
+    public Bean<?> getDeclaringBean()
     {
-        if (bean == null)
-        {
-            initBean();
-        }
-        return bean;
-    }
-
-    private synchronized void initBean()
-    {
-        if (bean != null)
-        {
-            return;
-        }
-
-        @SuppressWarnings("unchecked")
-        Set<Bean<?>> beans = BeanProvider.getBeanDefinitions(beanClass, false, true);
-
-        if (beans.size() > 1)
-        {
-            //TODO improve exception
-            throw new IllegalStateException(beans.size() + " types found - base type: " + beanClass.getName());
-        }
-        bean = beans.iterator().next();
+        return declaringBean;
     }
 
     /**
@@ -207,15 +184,15 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
      * {@inheritDoc}
      */
     @Override
-    public void notify(final ExceptionEvent<T> event)
+    public void notify(final ExceptionEvent<T> event, BeanManager beanManager)
     {
         CreationalContext<?> ctx = null;
         try
         {
-            ctx = getBeanManager().createCreationalContext(null);
+            ctx = beanManager.createCreationalContext(null);
             @SuppressWarnings("unchecked")
-            Object handlerInstance = BeanProvider.getContextualReference(beanClass);
-            InjectableMethod<?> im = createInjectableMethod(handler, getBean());
+            Object handlerInstance = BeanProvider.getContextualReference(declaringBeanClass);
+            InjectableMethod<?> im = createInjectableMethod(handler, getDeclaringBean(), beanManager);
             im.invoke(handlerInstance, ctx, new OutboundParameterValueRedefiner(event, this));
         }
         finally
@@ -227,9 +204,10 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
         }
     }
 
-    private <X> InjectableMethod<X> createInjectableMethod(AnnotatedMethod<X> handlerMethod, Bean<?> bean)
+    private <X> InjectableMethod<X> createInjectableMethod(AnnotatedMethod<X> handlerMethod, Bean<?> bean,
+                                                           BeanManager bm)
     {
-        return new InjectableMethod<X>(handlerMethod, bean, getBeanManager());
+        return new InjectableMethod<X>(handlerMethod, bean, bm);
     }
 
     /**
@@ -255,7 +233,12 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
         return handlerParameter;
     }
 
-    public Set<InjectionPoint> getInjectionPoints()
+    /**
+     * Obtain all the injection points for the handler
+     *
+     * @param bm a BeanManager to use to obtain the beans
+     */
+    public Set<InjectionPoint> getInjectionPoints(final BeanManager bm)
     {
         if (injectionPoints == null)
         {
@@ -266,7 +249,7 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
                 if (!param.equals(handlerParameter))
                 {
                     injectionPoints.add(
-                            new ImmutableInjectionPoint(param, getBeanManager(), getBean(), false, false));
+                            new ImmutableInjectionPoint(param, bm, getDeclaringBean(), false, false));
                 }
             }
 
@@ -274,15 +257,6 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
         return new HashSet<InjectionPoint>(injectionPoints);
     }
 
-    private BeanManager getBeanManager()
-    {
-        if (beanManager == null)
-        {
-            beanManager = BeanManagerProvider.getInstance().getBeanManager();
-        }
-        return beanManager;
-    }
-
     @Override
     public boolean equals(Object o)
     {
@@ -313,7 +287,7 @@ public class HandlerMethodImpl<T extends Throwable> implements HandlerMethod<T>
     @Override
     public int hashCode()
     {
-        int result = beanClass.hashCode();
+        int result = declaringBeanClass.hashCode();
         result = 5 * result + qualifiers.hashCode();
         result = 5 * result + exceptionType.hashCode();
         result = 5 * result + ordinal;

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/5864a550/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/OutboundParameterValueRedefiner.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/OutboundParameterValueRedefiner.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/OutboundParameterValueRedefiner.java
index c735eb6..044169e 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/OutboundParameterValueRedefiner.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/OutboundParameterValueRedefiner.java
@@ -20,8 +20,8 @@
 package org.apache.deltaspike.core.impl.exception.control;
 
 import org.apache.deltaspike.core.api.exception.control.event.ExceptionEvent;
-import org.apache.deltaspike.core.util.metadata.builder.ParameterValueRedefiner;
 import org.apache.deltaspike.core.api.provider.BeanManagerProvider;
+import org.apache.deltaspike.core.util.metadata.builder.ParameterValueRedefiner;
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
@@ -45,7 +45,7 @@ class OutboundParameterValueRedefiner implements ParameterValueRedefiner
     OutboundParameterValueRedefiner(final ExceptionEvent<?> event, final HandlerMethodImpl<?> handlerMethod)
     {
         this.event = event;
-        declaringBean = handlerMethod.getBean();
+        declaringBean = handlerMethod.getDeclaringBean();
         this.handlerMethod = handlerMethod;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/5864a550/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/extension/ExceptionControlExtension.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/extension/ExceptionControlExtension.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/extension/ExceptionControlExtension.java
index 48a168e..ef2bfe4 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/extension/ExceptionControlExtension.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/exception/control/extension/ExceptionControlExtension.java
@@ -19,8 +19,8 @@
 
 package org.apache.deltaspike.core.impl.exception.control.extension;
 
-import org.apache.deltaspike.core.api.exception.control.annotation.ExceptionHandler;
 import org.apache.deltaspike.core.api.exception.control.HandlerMethod;
+import org.apache.deltaspike.core.api.exception.control.annotation.ExceptionHandler;
 import org.apache.deltaspike.core.impl.exception.control.HandlerMethodImpl;
 import org.apache.deltaspike.core.spi.activation.Deactivatable;
 import org.apache.deltaspike.core.util.ClassDeactivationUtils;
@@ -112,7 +112,7 @@ public class ExceptionControlExtension implements Extension, Deactivatable
                     }
 
                     //beanManager won't be stored in the instance -> no issue with wls12c
-                    registerHandlerMethod(new HandlerMethodImpl(method, beanManager));
+                    registerHandlerMethod(new HandlerMethodImpl(processBean.getBean(), method, beanManager));
                 }
             }
         }
@@ -122,11 +122,11 @@ public class ExceptionControlExtension implements Extension, Deactivatable
      * Verifies all injection points for every handler are valid.
      *
      * @param afterDeploymentValidation Lifecycle event
-     * @param beanManager  BeanManager instance
+     * @param bm  BeanManager instance
      */
     @SuppressWarnings("UnusedDeclaration")
     public void verifyInjectionPoints(@Observes final AfterDeploymentValidation afterDeploymentValidation,
-                                      final BeanManager beanManager)
+                                      final BeanManager bm)
     {
         if (!isActivated)
         {
@@ -137,11 +137,11 @@ public class ExceptionControlExtension implements Extension, Deactivatable
         {
             for (HandlerMethod<? extends Throwable> handler : entry.getValue())
             {
-                for (InjectionPoint ip : ((HandlerMethodImpl<? extends Throwable>) handler).getInjectionPoints())
+                for (InjectionPoint ip : ((HandlerMethodImpl<? extends Throwable>) handler).getInjectionPoints(bm))
                 {
                     try
                     {
-                        beanManager.validate(ip);
+                        bm.validate(ip);
                     }
                     catch (InjectionException e)
                     {