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 2013/01/21 19:11:03 UTC
svn commit: r1436524 -
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
Author: struberg
Date: Mon Jan 21 18:11:02 2013
New Revision: 1436524
URL: http://svn.apache.org/viewvc?rev=1436524&view=rev
Log:
OWB_344 adopt our eventing to the new split proxies
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.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=1436524&r1=1436523&r2=1436524&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 Jan 21 18:11:02 2013
@@ -59,6 +59,7 @@ import org.apache.webbeans.logger.WebBea
import org.apache.webbeans.portable.AnnotatedElementFactory;
import org.apache.webbeans.portable.EventProducer;
import org.apache.webbeans.portable.InjectionPointProducer;
+import org.apache.webbeans.proxy.OwbNormalScopeProxy;
import org.apache.webbeans.util.AnnotationUtil;
import org.apache.webbeans.util.ClassUtil;
import org.apache.webbeans.util.WebBeansUtil;
@@ -198,7 +199,6 @@ public class ObserverMethodImpl<T> imple
Object object = null;
- CreationalContext<Object> creationalContext = null;
List<ObserverParams> methodArgsMap;
if(annotatedMethod == null)
{
@@ -208,16 +208,14 @@ public class ObserverMethodImpl<T> imple
{
methodArgsMap = getAnnotatedMethodArguments(event);
}
-
+
+ BeanManagerImpl manager = bean.getWebBeansContext().getBeanManagerImpl();
+ CreationalContext<Object> creationalContext = manager.createCreationalContext(component);
+
+
ObserverParams[] obargs = null;
try
{
- boolean isPrivateMethod = !observerMethod.isAccessible();
- if (isPrivateMethod)
- {
- bean.getWebBeansContext().getSecurityService().doPrivilegedSetAccessible(observerMethod, true);
- }
-
obargs = new ObserverParams[methodArgsMap.size()];
obargs = methodArgsMap.toArray(obargs);
Object[] args = new Object[obargs.length];
@@ -230,12 +228,15 @@ public class ObserverMethodImpl<T> imple
//Static or not
if (Modifier.isStatic(observerMethod.getModifiers()))
{
+ if (!observerMethod.isAccessible())
+ {
+ observerMethod.setAccessible(true);
+ }
//Invoke Method
- observerMethod.invoke(object, args);
+ observerMethod.invoke(null, args);
}
else
{
- BeanManagerImpl manager = bean.getWebBeansContext().getBeanManagerImpl();
Context context;
try
{
@@ -257,25 +258,14 @@ public class ObserverMethodImpl<T> imple
return;
}
- creationalContext = manager.createCreationalContext(component);
-
- if (isPrivateMethod)
+ if (object == null)
{
- // 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(component, creationalContext);
- }
+ object = context.get(component, creationalContext);
}
- else
+
+ if (object == null)
{
- // 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."
-
+ // this might happen for EJB components.
Type t = component.getBeanClass();
// If the bean is an EJB, its beanClass may not be one of
@@ -286,10 +276,25 @@ public class ObserverMethodImpl<T> imple
}
object = manager.getReference(component, t, creationalContext);
+
}
if (object != null)
{
+ if (!observerMethod.isAccessible())
+ {
+ bean.getWebBeansContext().getSecurityService().doPrivilegedSetAccessible(observerMethod, true);
+ }
+
+ if (Modifier.isPrivate(observerMethod.getModifiers()))
+ {
+ // since private methods cannot be intercepted, we have to unwrap anny possible proxy
+ if (object instanceof OwbNormalScopeProxy)
+ {
+ object = getWebBeansContext().getInterceptorDecoratorProxyFactory().getInternalInstance(object);
+ }
+ }
+
//Invoke Method
observerMethod.invoke(object, args);
}