You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/04/12 20:20:06 UTC
svn commit: r933348 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept:
ApplicationScopedBeanIntereptorHandler.java
DependentScopedBeanInterceptorHandler.java InterceptorHandler.java
NormalScopedBeanInterceptorHandler.java
Author: gerdogdu
Date: Mon Apr 12 18:20:06 2010
New Revision: 933348
URL: http://svn.apache.org/viewvc?rev=933348&view=rev
Log:
[OWB-351] OWB picks up @SessionScoped contextual instances from expired sessions. Corrects eating client provided creational context via BeanManager#getReference
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java Mon Apr 12 18:20:06 2010
@@ -21,7 +21,6 @@ package org.apache.webbeans.intercept;
import javax.enterprise.context.spi.CreationalContext;
import org.apache.webbeans.component.OwbBean;
-import org.apache.webbeans.context.creational.CreationalContextImpl;
/**
@@ -43,7 +42,7 @@ public class ApplicationScopedBeanIntere
/**
* Creates a new handler.
* @param bean bean
- * @param creationalContext creational context
+ * @param creationalContext creaitonal context
*/
public ApplicationScopedBeanIntereptorHandler(OwbBean<?> bean, CreationalContext<?> creationalContext)
{
@@ -53,11 +52,11 @@ public class ApplicationScopedBeanIntere
/**
* {@inheritDoc}
*/
- protected Object getContextualInstance(OwbBean<Object> bean, CreationalContextImpl<?> creationalContext)
+ protected Object getContextualInstance(OwbBean<Object> bean)
{
if (cachedInstance == null)
{
- cachedInstance = super.getContextualInstance(bean, creationalContext);
+ cachedInstance = super.getContextualInstance(bean);
}
return cachedInstance;
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java Mon Apr 12 18:20:06 2010
@@ -67,12 +67,10 @@ public class DependentScopedBeanIntercep
/**
* {@inheritDoc}
*/
- protected Object callAroundInvokes(Method proceed, Object[] arguments, List<InterceptorData> stack,
- CreationalContextImpl<?> cc)
- throws Exception
+ protected Object callAroundInvokes(Method proceed, Object[] arguments, List<InterceptorData> stack) throws Exception
{
InvocationContextImpl impl = new InvocationContextImpl(this.bean, this.actualInstance ,proceed, arguments, stack, InterceptorType.AROUND_INVOKE);
- impl.setCreationalContext(cc);
+ impl.setCreationalContext(creationalContext);
return impl.proceed();
}
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java Mon Apr 12 18:20:06 2010
@@ -169,13 +169,11 @@ public abstract class InterceptorHandler
* @param method business method
* @param proceed proceed method
* @param arguments method arguments
- * @param creationalContext bean creational context
+ * @param ownerCreationalContext bean creational context
* @return method result
* @throws Exception for exception
*/
- public Object invoke(Object instance, Method method, Method proceed, Object[] arguments,
- CreationalContextImpl<?> creationalContext)
- throws Exception
+ public Object invoke(Object instance, Method method, Method proceed, Object[] arguments, CreationalContextImpl<?> ownerCreationalContext) throws Exception
{
//Result of invocation
Object result = null;
@@ -212,7 +210,7 @@ public abstract class InterceptorHandler
((ProxyObject)delegate).setHandler(this.delegateHandler);
// Gets component decorator stack
- decorators = WebBeansDecoratorConfig.getDecoratorStack(injectionTarget, instance, delegate, creationalContext);
+ decorators = WebBeansDecoratorConfig.getDecoratorStack(injectionTarget, instance, delegate, ownerCreationalContext);
//Sets decorator stack of delegate
this.delegateHandler.setDecorators(decorators);
@@ -249,10 +247,7 @@ public abstract class InterceptorHandler
// Call Around Invokes
if (WebBeansUtil.isContainsInterceptorMethod(this.interceptedMethodMap.get(method), InterceptorType.AROUND_INVOKE))
{
- return callAroundInvokes(method, arguments,
- InterceptorUtil.getInterceptorMethods(this.interceptedMethodMap.get(method),
- InterceptorType.AROUND_INVOKE),
- creationalContext);
+ return callAroundInvokes(method, arguments, InterceptorUtil.getInterceptorMethods(this.interceptedMethodMap.get(method), InterceptorType.AROUND_INVOKE));
}
}
@@ -307,9 +302,7 @@ public abstract class InterceptorHandler
* @return return of method
* @throws Exception for any exception
*/
- protected abstract Object callAroundInvokes(Method interceptedMethod, Object[] arguments,
- List<InterceptorData> stack, CreationalContextImpl<?> creationalContext)
- throws Exception;
+ protected abstract Object callAroundInvokes(Method interceptedMethod, Object[] arguments, List<InterceptorData> stack) throws Exception;
/**
*
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java Mon Apr 12 18:20:06 2010
@@ -18,6 +18,7 @@
*/
package org.apache.webbeans.intercept;
+import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.List;
@@ -42,6 +43,9 @@ public class NormalScopedBeanInterceptor
/**Serial id*/
private static final long serialVersionUID = 1L;
+ /**Creational context*/
+ private transient WeakReference<CreationalContext<?>> creationalContext = null;
+
/**
* Creates a new bean instance
* @param bean bean
@@ -50,6 +54,7 @@ public class NormalScopedBeanInterceptor
public NormalScopedBeanInterceptorHandler(OwbBean<?> bean, CreationalContext<?> creationalContext)
{
super(bean);
+ this.creationalContext = new WeakReference<CreationalContext<?>>(creationalContext);
}
/**
@@ -58,38 +63,21 @@ public class NormalScopedBeanInterceptor
@Override
public Object invoke(Object instance, Method method, Method proceed, Object[] arguments) throws Exception
{
- CreationalContextImpl<?> creationalContext = null;
-
- //Context of the bean
- Context webbeansContext = getBeanManager().getContext(bean.getScope());
-
- if (webbeansContext instanceof AbstractContext)
- {
- creationalContext = (CreationalContextImpl<?>) ((AbstractContext)webbeansContext).getCreationalContext(bean);
- }
- if (creationalContext == null)
- {
- // if there was no CreationalContext set from external, we create a new one
- creationalContext = (CreationalContextImpl<?>) CreationalContextFactory.getInstance().getCreationalContext(bean);
- }
-
//Get instance from context
- Object webbeansInstance = getContextualInstance((OwbBean<Object>) this.bean, creationalContext);
+ Object webbeansInstance = getContextualInstance((OwbBean<Object>) this.bean);
//Call super
- return super.invoke(webbeansInstance, method, proceed, arguments, creationalContext);
+ return super.invoke(webbeansInstance, method, proceed, arguments, (CreationalContextImpl<?>) this.creationalContext.get());
}
/**
* {@inheritDoc}
*/
- protected Object callAroundInvokes(Method proceed, Object[] arguments, List<InterceptorData> stack, CreationalContextImpl<?> creationalContext)
- throws Exception
+ protected Object callAroundInvokes(Method proceed, Object[] arguments, List<InterceptorData> stack) throws Exception
{
- InvocationContextImpl impl = new InvocationContextImpl(this.bean,
- getContextualInstance((OwbBean<Object>) this.bean, creationalContext),
+ InvocationContextImpl impl = new InvocationContextImpl(this.bean, getContextualInstance((OwbBean<Object>) this.bean),
proceed, arguments, stack, InterceptorType.AROUND_INVOKE);
- impl.setCreationalContext(creationalContext);
+ impl.setCreationalContext(creationalContext.get());
return impl.proceed();
@@ -99,10 +87,9 @@ public class NormalScopedBeanInterceptor
/**
* Gets instance from context.
* @param bean bean instance
- * @param creationalContext
* @return the underlying contextual instance, either cached or resolved from the context
*/
- protected Object getContextualInstance(OwbBean<Object> bean, CreationalContextImpl<?> creationalContext)
+ protected Object getContextualInstance(OwbBean<Object> bean)
{
Object webbeansInstance = null;
@@ -117,8 +104,22 @@ public class NormalScopedBeanInterceptor
return webbeansInstance;
}
+ if (webbeansContext instanceof AbstractContext)
+ {
+ CreationalContext<?> cc = ((AbstractContext)webbeansContext).getCreationalContext(bean);
+ if (cc != null)
+ {
+ creationalContext = new WeakReference<CreationalContext<?>>(cc);
+ }
+ }
+ if (creationalContext == null)
+ {
+ // if there was no CreationalContext set from external, we create a new one
+ creationalContext = new WeakReference<CreationalContext<?>>(CreationalContextFactory.getInstance().getCreationalContext(bean));
+ }
+
// finally, we create a new contextual instance
- webbeansInstance = webbeansContext.get((Contextual<Object>)this.bean, (CreationalContext<Object>) creationalContext);
+ webbeansInstance = webbeansContext.get((Contextual<Object>)this.bean, (CreationalContext<Object>) creationalContext.get());
return webbeansInstance;
}
AW: svn commit: r933348 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: ApplicationScopedBeanIntereptorHandler.java DependentScopedBeanInterceptorHandler.java InterceptorHandler.java NormalScopedBeanInterceptorHandler.java
Posted by Mark Struberg <st...@yahoo.de>.
Sorry, I think we need to rollback the rollback, since this re-introduces really heavy concurrency problems.
@SessionScoped public class User [
public String getEmail()..
}
@ApplicationScoped class MailService {
private @Inject User usr;
public void sendMail(String content) {
sendInternal(user.getEmail(), content);
}
}
now, with this change whenever 2 threads (from 2 sessions of a webserver) invoke sendMail and hit the user.getEmail() the NormalScopedBeanInterceptorHandler gets called and those 2 threads override each other the
private transient WeakReference<CreationalContext<?>> creationalContext = null;
because there is only one single proxy instance being used by those 2 threads.
Got me?
LieGrue,
strub
--- gerdogdu@apache.org <ge...@apache.org> schrieb am Mo, 12.4.2010:
> Von: gerdogdu@apache.org <ge...@apache.org>
> Betreff: svn commit: r933348 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: ApplicationScopedBeanIntereptorHandler.java DependentScopedBeanInterceptorHandler.java InterceptorHandler.java NormalScopedBeanInterceptorHandler.java
> An: commits@openwebbeans.apache.org
> Datum: Montag, 12. April, 2010 20:20 Uhr
> Author: gerdogdu
> Date: Mon Apr 12 18:20:06 2010
> New Revision: 933348
>
> URL: http://svn.apache.org/viewvc?rev=933348&view=rev
> Log:
> [OWB-351] OWB picks up @SessionScoped contextual instances
> from expired sessions. Corrects eating client provided
> creational context via BeanManager#getReference
>
> Modified:
>
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java
>
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
>
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
>
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
>
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ApplicationScopedBeanIntereptorHandler.java
> Mon Apr 12 18:20:06 2010
> @@ -21,7 +21,6 @@ package org.apache.webbeans.intercept;
> import javax.enterprise.context.spi.CreationalContext;
>
> import org.apache.webbeans.component.OwbBean;
> -import
> org.apache.webbeans.context.creational.CreationalContextImpl;
>
>
> /**
> @@ -43,7 +42,7 @@ public class ApplicationScopedBeanIntere
> /**
> * Creates a new handler.
> * @param bean bean
> - * @param creationalContext
> creational context
> + * @param creationalContext
> creaitonal context
> */
> public
> ApplicationScopedBeanIntereptorHandler(OwbBean<?>
> bean, CreationalContext<?> creationalContext)
> {
> @@ -53,11 +52,11 @@ public class
> ApplicationScopedBeanIntere
> /**
> * {@inheritDoc}
> */
> - protected Object
> getContextualInstance(OwbBean<Object> bean,
> CreationalContextImpl<?> creationalContext)
> + protected Object
> getContextualInstance(OwbBean<Object> bean)
> {
> if (cachedInstance
> == null)
> {
> - cachedInstance =
> super.getContextualInstance(bean, creationalContext);
> + cachedInstance =
> super.getContextualInstance(bean);
> }
>
> return
> cachedInstance;
>
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/DependentScopedBeanInterceptorHandler.java
> Mon Apr 12 18:20:06 2010
> @@ -67,12 +67,10 @@ public class
> DependentScopedBeanIntercep
> /**
> * {@inheritDoc}
> */
> - protected Object callAroundInvokes(Method
> proceed, Object[] arguments, List<InterceptorData>
> stack,
> -
>
>
> CreationalContextImpl<?> cc)
> - throws Exception
> + protected Object callAroundInvokes(Method
> proceed, Object[] arguments, List<InterceptorData>
> stack) throws Exception
> {
>
> InvocationContextImpl impl = new
> InvocationContextImpl(this.bean, this.actualInstance
> ,proceed, arguments, stack, InterceptorType.AROUND_INVOKE);
> -
> impl.setCreationalContext(cc);
> +
> impl.setCreationalContext(creationalContext);
>
> return
> impl.proceed();
> }
>
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
> Mon Apr 12 18:20:06 2010
> @@ -169,13 +169,11 @@ public abstract class
> InterceptorHandler
> * @param method business method
> * @param proceed proceed method
> * @param arguments method arguments
> - * @param creationalContext bean
> creational context
> + * @param ownerCreationalContext
> bean creational context
> * @return method result
> * @throws Exception for exception
> */
> - public Object invoke(Object instance, Method
> method, Method proceed, Object[] arguments,
> -
>
> CreationalContextImpl<?>
> creationalContext)
> - throws Exception
> + public Object invoke(Object instance, Method
> method, Method proceed, Object[] arguments,
> CreationalContextImpl<?> ownerCreationalContext)
> throws Exception
> {
> //Result of
> invocation
> Object result =
> null;
> @@ -212,7 +210,7 @@ public abstract class
> InterceptorHandler
>
>
> ((ProxyObject)delegate).setHandler(this.delegateHandler);
>
>
> // Gets component
> decorator stack
> -
> decorators =
> WebBeansDecoratorConfig.getDecoratorStack(injectionTarget,
> instance, delegate, creationalContext);
>
>
> +
> decorators =
> WebBeansDecoratorConfig.getDecoratorStack(injectionTarget,
> instance, delegate, ownerCreationalContext);
>
>
>
> //Sets decorator
> stack of delegate
>
>
> this.delegateHandler.setDecorators(decorators);
>
>
> @@ -249,10 +247,7 @@ public abstract class
> InterceptorHandler
>
> // Call Around
> Invokes
>
> if
> (WebBeansUtil.isContainsInterceptorMethod(this.interceptedMethodMap.get(method),
> InterceptorType.AROUND_INVOKE))
>
> {
> -
> return
> callAroundInvokes(method, arguments,
> -
>
>
>
> InterceptorUtil.getInterceptorMethods(this.interceptedMethodMap.get(method),
> -
>
>
>
>
>
> InterceptorType.AROUND_INVOKE),
> -
>
>
> creationalContext);
> +
> return
> callAroundInvokes(method, arguments,
> InterceptorUtil.getInterceptorMethods(this.interceptedMethodMap.get(method),
> InterceptorType.AROUND_INVOKE));
>
> }
>
>
>
> }
> @@ -307,9 +302,7 @@ public abstract class
> InterceptorHandler
> * @return return of method
> * @throws Exception for any exception
> */
> - protected abstract Object
> callAroundInvokes(Method interceptedMethod, Object[]
> arguments,
> -
>
>
> List<InterceptorData> stack,
> CreationalContextImpl<?> creationalContext)
> - throws Exception;
> + protected abstract Object
> callAroundInvokes(Method interceptedMethod, Object[]
> arguments, List<InterceptorData> stack) throws
> Exception;
>
> /**
> *
>
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
> URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=933348&r1=933347&r2=933348&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
> Mon Apr 12 18:20:06 2010
> @@ -18,6 +18,7 @@
> */
> package org.apache.webbeans.intercept;
>
> +import java.lang.ref.WeakReference;
> import java.lang.reflect.Method;
> import java.util.List;
>
> @@ -42,6 +43,9 @@ public class NormalScopedBeanInterceptor
> /**Serial id*/
> private static final long
> serialVersionUID = 1L;
>
> + /**Creational context*/
> + private transient
> WeakReference<CreationalContext<?>>
> creationalContext = null;
> +
> /**
> * Creates a new bean instance
> * @param bean bean
> @@ -50,6 +54,7 @@ public class NormalScopedBeanInterceptor
> public
> NormalScopedBeanInterceptorHandler(OwbBean<?> bean,
> CreationalContext<?> creationalContext)
> {
> super(bean);
> + this.creationalContext = new
> WeakReference<CreationalContext<?>>(creationalContext);
> }
>
> /**
> @@ -58,38 +63,21 @@ public class
> NormalScopedBeanInterceptor
> @Override
> public Object invoke(Object
> instance, Method method, Method proceed, Object[] arguments)
> throws Exception
> {
> - CreationalContextImpl<?>
> creationalContext = null;
> -
> - //Context of the bean
> - Context webbeansContext =
> getBeanManager().getContext(bean.getScope());
> -
> - if (webbeansContext instanceof
> AbstractContext)
> - {
> -
> creationalContext = (CreationalContextImpl<?>)
> ((AbstractContext)webbeansContext).getCreationalContext(bean);
> - }
> - if (creationalContext ==
> null)
> - {
> - // if there was
> no CreationalContext set from external, we create a new one
> -
> creationalContext = (CreationalContextImpl<?>)
> CreationalContextFactory.getInstance().getCreationalContext(bean);
> - }
> -
> //Get instance from
> context
> - Object webbeansInstance =
> getContextualInstance((OwbBean<Object>) this.bean,
> creationalContext);
> + Object webbeansInstance =
> getContextualInstance((OwbBean<Object>) this.bean);
>
> //Call super
> - return
> super.invoke(webbeansInstance, method, proceed, arguments,
> creationalContext);
> + return
> super.invoke(webbeansInstance, method, proceed, arguments,
> (CreationalContextImpl<?>)
> this.creationalContext.get());
> }
>
> /**
> * {@inheritDoc}
> */
> - protected Object callAroundInvokes(Method
> proceed, Object[] arguments, List<InterceptorData>
> stack, CreationalContextImpl<?> creationalContext)
> - throws Exception
> + protected Object callAroundInvokes(Method
> proceed, Object[] arguments, List<InterceptorData>
> stack) throws Exception
> {
> - InvocationContextImpl impl =
> new InvocationContextImpl(this.bean,
> -
>
>
>
> getContextualInstance((OwbBean<Object>)
> this.bean, creationalContext),
> + InvocationContextImpl impl =
> new InvocationContextImpl(this.bean,
> getContextualInstance((OwbBean<Object>) this.bean),
>
>
>
>
> proceed, arguments, stack, InterceptorType.AROUND_INVOKE);
> -
> impl.setCreationalContext(creationalContext);
> +
> impl.setCreationalContext(creationalContext.get());
>
> return
> impl.proceed();
>
> @@ -99,10 +87,9 @@ public class
> NormalScopedBeanInterceptor
> /**
> * Gets instance from context.
> * @param bean bean instance
> - * @param creationalContext
> * @return the underlying contextual
> instance, either cached or resolved from the context
> */
> - protected Object
> getContextualInstance(OwbBean<Object> bean,
> CreationalContextImpl<?> creationalContext)
> + protected Object
> getContextualInstance(OwbBean<Object> bean)
> {
> Object
> webbeansInstance = null;
>
> @@ -117,8 +104,22 @@ public class
> NormalScopedBeanInterceptor
> return
> webbeansInstance;
> }
>
> + if (webbeansContext instanceof
> AbstractContext)
> + {
> +
> CreationalContext<?> cc =
> ((AbstractContext)webbeansContext).getCreationalContext(bean);
> + if (cc != null)
> + {
> +
> creationalContext = new
> WeakReference<CreationalContext<?>>(cc);
> + }
> + }
> + if (creationalContext ==
> null)
> + {
> + // if there was
> no CreationalContext set from external, we create a new one
> +
> creationalContext = new
> WeakReference<CreationalContext<?>>(CreationalContextFactory.getInstance().getCreationalContext(bean));
> + }
> +
> // finally, we
> create a new contextual instance
> - webbeansInstance =
> webbeansContext.get((Contextual<Object>)this.bean,
> (CreationalContext<Object>) creationalContext);
> + webbeansInstance =
> webbeansContext.get((Contextual<Object>)this.bean,
> (CreationalContext<Object>) creationalContext.get());
>
> return
> webbeansInstance;
> }
>
>
>
__________________________________________________
Do You Yahoo!?
Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails.
http://mail.yahoo.com