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();
}