[webbeans-commits] Webbeans SVN: r1762 - in ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans: event and 2 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Wed Mar 4 13:26:49 EST 2009


Author: pete.muir at jboss.org
Date: 2009-03-04 13:26:47 -0500 (Wed, 04 Mar 2009)
New Revision: 1762

Modified:
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/Exceptions.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java
   ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
Log:
Rework Observer's use of MethodInjectionPoint

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java	2009-03-04 15:55:27 UTC (rev 1761)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/AbstractClassBean.java	2009-03-04 18:26:47 UTC (rev 1762)
@@ -26,6 +26,7 @@
 import javax.context.ScopeType;
 import javax.event.Observes;
 import javax.inject.BindingType;
+import javax.inject.CreationException;
 import javax.inject.DefinitionException;
 import javax.inject.DeploymentType;
 import javax.inject.Disposes;
@@ -111,7 +112,7 @@
    {
       for (MethodInjectionPoint<?> initializer : getInitializerMethods())
       {
-         initializer.invoke(instance, manager, creationalContext);
+         initializer.invoke(instance, manager, creationalContext, CreationException.class);
       }
    }
 

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java	2009-03-04 15:55:27 UTC (rev 1761)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/bean/ProducerMethodBean.java	2009-03-04 18:26:47 UTC (rev 1762)
@@ -23,6 +23,7 @@
 
 import javax.context.CreationalContext;
 import javax.event.Observes;
+import javax.inject.CreationException;
 import javax.inject.DefinitionException;
 import javax.inject.Disposes;
 
@@ -78,7 +79,7 @@
 
    protected T produceInstance(CreationalContext<T> creationalContext)
    {
-      return method.invoke(getReceiver(creationalContext), manager, creationalContext);
+      return method.invoke(getReceiver(creationalContext), manager, creationalContext, CreationException.class);
    }
 
    /**

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2009-03-04 15:55:27 UTC (rev 1761)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/event/ObserverImpl.java	2009-03-04 18:26:47 UTC (rev 1762)
@@ -170,7 +170,8 @@
          {
             return;
          }
-         observerMethod.invokeWithSpecialValue(instance, Observes.class, event, manager, null, ObserverException.class);
+         // As we are working with the contextual instance, we may not have the actual object, but a container proxy (e.g. EJB)
+         observerMethod.invokeOnInstanceWithSpecialValue(instance, Observes.class, event, manager, null, ObserverException.class);
       }
       finally
       {

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/Exceptions.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/Exceptions.java	2009-03-04 15:55:27 UTC (rev 1761)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/Exceptions.java	2009-03-04 18:26:47 UTC (rev 1762)
@@ -90,6 +90,16 @@
        rethrowException(e.getCause() != null ? e.getCause() : e, exceptionToThrow);
    }
    
+   public static void rethrowException(SecurityException e, Class<? extends RuntimeException> exceptionToThrow)
+   {
+       rethrowException(e.getCause() != null ? e.getCause() : e, exceptionToThrow);
+   }
+   
+   public static void rethrowException(NoSuchMethodException e, Class<? extends RuntimeException> exceptionToThrow)
+   {
+       rethrowException(e.getCause() != null ? e.getCause() : e, exceptionToThrow);
+   }
+   
    public static void rethrowException(InvocationTargetException e)
    {
        rethrowException(e.getCause() != null ? e.getCause() : e);

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java	2009-03-04 15:55:27 UTC (rev 1761)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/injection/MethodInjectionPoint.java	2009-03-04 18:26:47 UTC (rev 1762)
@@ -33,7 +33,6 @@
 import org.jboss.webbeans.introspector.AnnotatedMethod;
 import org.jboss.webbeans.introspector.AnnotatedParameter;
 import org.jboss.webbeans.introspector.ForwardingAnnotatedMethod;
-import org.jboss.webbeans.util.Reflections;
 
 public class MethodInjectionPoint<T> extends ForwardingAnnotatedMethod<T> implements AnnotatedInjectionPoint<T, Method>
 {
@@ -96,7 +95,7 @@
       return delegate().getBindings();
    }
    
-   public T invoke(Object declaringInstance, ManagerImpl manager, CreationalContext<?> creationalContext)
+   public T invoke(Object declaringInstance, ManagerImpl manager, CreationalContext<?> creationalContext, Class<? extends RuntimeException> exceptionTypeToThrow)
    {
       try
       {
@@ -104,6 +103,49 @@
       }
       catch (IllegalArgumentException e)
       {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      catch (IllegalAccessException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      catch (InvocationTargetException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      return null;
+   }
+   
+   @SuppressWarnings("unchecked")
+   public T invokeWithSpecialValue(Object declaringInstance, Class<? extends Annotation> annotatedParameter, Object parameter, ManagerImpl manager, CreationalContext<?> creationalContext, Class<? extends RuntimeException> exceptionTypeToThrow)
+   {
+      try
+      {
+         return invoke(declaringInstance, getParameterValues(getParameters(), annotatedParameter, parameter, manager, creationalContext), exceptionTypeToThrow);
+      }
+      catch (IllegalArgumentException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      catch (IllegalAccessException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      catch (InvocationTargetException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      return null;
+   }
+   
+   public T invokeOnInstance(Object declaringInstance, ManagerImpl manager, CreationalContext<?> creationalContext, Class<? extends RuntimeException> exceptionTypeToThrow)
+   {
+      try
+      {
+         return delegate().invokeOnInstance(declaringInstance, getParameterValues(getParameters(), null, null, manager, creationalContext));
+      }
+      catch (IllegalArgumentException e)
+      {
          rethrowException(e);
       }
       catch (IllegalAccessException e)
@@ -114,28 +156,32 @@
       {
          rethrowException(e);
       }
+      catch (SecurityException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
+      catch (NoSuchMethodException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
       return null;
    }
    
    @SuppressWarnings("unchecked")
-   public T invokeWithSpecialValue(Object declaringInstance, Class<? extends Annotation> annotatedParameter, Object parameter, ManagerImpl manager, CreationalContext<?> creationalContext, Class<? extends RuntimeException> exceptionTypeToThrow)
+   public T invokeOnInstanceWithSpecialValue(Object declaringInstance, Class<? extends Annotation> annotatedParameter, Object parameter, ManagerImpl manager, CreationalContext<?> creationalContext, Class<? extends RuntimeException> exceptionTypeToThrow)
    {
       try
       {
-         if (delegate().getDeclaringClass().getType().equals(declaringInstance.getClass()))
-         {
-            return delegate().invoke(declaringInstance, getParameterValues(getParameters(), annotatedParameter, parameter, manager, creationalContext));
-         }
-         else
-         {
-            Method proxiedMethod = Reflections.lookupMethod(delegate().getAnnotatedMethod(), declaringInstance);
-            return (T) proxiedMethod.invoke(declaringInstance, getParameterValues(getParameters(), annotatedParameter, parameter, manager, creationalContext));
-         }
+         return invokeOnInstance(declaringInstance, getParameterValues(getParameters(), annotatedParameter, parameter, manager, creationalContext));
       }
       catch (IllegalArgumentException e)
       {
          rethrowException(e, exceptionTypeToThrow);
       }
+      catch (SecurityException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
       catch (IllegalAccessException e)
       {
          rethrowException(e, exceptionTypeToThrow);
@@ -144,6 +190,10 @@
       {
          rethrowException(e, exceptionTypeToThrow);
       }
+      catch (NoSuchMethodException e)
+      {
+         rethrowException(e, exceptionTypeToThrow);
+      }
       return null;
    }
    

Modified: ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java
===================================================================
--- ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2009-03-04 15:55:27 UTC (rev 1761)
+++ ri/trunk/webbeans-ri/src/main/java/org/jboss/webbeans/introspector/jlr/AnnotatedMethodImpl.java	2009-03-04 18:26:47 UTC (rev 1762)
@@ -206,8 +206,10 @@
    
    public T invokeOnInstance(Object instance, Object...parameters) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException
    {
+      Method method = instance.getClass().getMethod(getName(), getParameterTypesAsArray());
+      method.setAccessible(true);
       @SuppressWarnings("unchecked")
-      T result = (T) instance.getClass().getMethod(getName(), getParameterTypesAsArray()).invoke(instance, parameters);
+      T result = (T) method.invoke(instance, parameters);
       return result;
    }
 




More information about the weld-commits mailing list