Author: struberg
Date: Mon Nov 15 20:59:31 2010
New Revision: 1035452

URL: http://svn.apache.org/viewvc?rev=1035452&view=rev
Log:
OWB-492 enable event notification for private @Observes methods

Modified:
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves1.java
    
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java

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=1035452&r1=1035451&r2=1035452&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
 Mon Nov 15 20:59:31 2010
@@ -203,11 +203,12 @@ public class ObserverMethodImpl<T> imple
         ObserverParams[] obargs = null;
         try
         {
-            if (!this.observerMethod.isAccessible())
+            boolean isPrivateMethod = !this.observerMethod.isAccessible();
+            if (isPrivateMethod)
             {
                 SecurityUtil.doPrivilegedSetAccessible(observerMethod, true);
             }
-            
+
             obargs = new ObserverParams[methodArgsMap.size()];
             obargs = methodArgsMap.toArray(obargs);
             Object[] args = new Object[obargs.length];
@@ -239,17 +240,36 @@ public class ObserverMethodImpl<T> imple
                     return;
                 }
                 
-                creationalContext = 
manager.createCreationalContext(specializedComponent);
-                
+
                 // on Reception.IF_EXISTS: ignore this bean if a the 
contextual instance doesn't already exist
-                if (ifExist && context.get(specializedComponent) == null) 
+                object = context.get(specializedComponent);
+
+                if (ifExist && object == null)
                 {
                     return;
                 }
-                
-                // on Reception.ALWAYS we must get a contextual reference if 
we didn't find the contextual instance
-                object = manager.getReference(specializedComponent, 
specializedComponent.getBeanClass(), creationalContext);
-                
+
+                creationalContext = 
manager.createCreationalContext(specializedComponent);
+
+                if (isPrivateMethod)
+                {
+                    // since private methods cannot be intercepted, we can 
just call them directly
+                    // so we get the contextual instance directly from the 
context because we do not
+                    // proxy private methods (thus the invocation on the 
contextual reference would fail)
+                    if (object == null)
+                    {
+                        object = context.get(specializedComponent, 
creationalContext);
+                    }
+                }
+                else
+                {
+                    // on Reception.ALWAYS we must get a contextual reference 
if we didn't find the contextual instance
+                    // we need to pick the contextual reference because of 
section 7.2:
+                    //  "Invocations of producer, disposer and observer 
methods by the container are
+                    //  business method invocations and are in- tercepted by 
method interceptors and decorators."
+                    object = manager.getReference(specializedComponent, 
specializedComponent.getBeanClass(), creationalContext);
+                }
+
                 if (object != null)
                 {
                     //Invoke Method

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves1.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves1.java?rev=1035452&r1=1035451&r2=1035452&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves1.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves1.java
 Mon Nov 15 20:59:31 2010
@@ -37,7 +37,7 @@ public class ComponentWithObserves1
         this.userName = event.getUserName();
     }
 
-    public void afterLoggedInWithMember(@Observes @Check(type = "CHECK") 
LoggedInEvent event)
+    private void afterLoggedInWithMember(@Observes @Check(type = "CHECK") 
LoggedInEvent event)
     {
         this.userNameWithMember = event.getUserName();
     }

Modified: 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java?rev=1035452&r1=1035451&r2=1035452&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/component/event/normal/ComponentWithObserves2.java
 Mon Nov 15 20:59:31 2010
@@ -49,6 +49,7 @@ public class ComponentWithObserves2
     @Transactional
     public void afterAdminLogin(@Observes @Role(value = "ADMIN") LoggedInEvent 
event, PaymentProcessorComponent payment)
     {
+        hasBeenIntercepted = true;
         this.payment = payment.getPaymentCheck();
         this.user = event.getUserName();
     }


Reply via email to