You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openwebbeans.apache.org by Mark Struberg <st...@yahoo.de> on 2010/04/12 21:10:37 UTC
AW: svn commit: r933348 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: ApplicationScopedBeanIntereptorHandler.java DependentScopedBeanInterceptorHandler.java InterceptorHandler.java NormalScopedBeanInterceptorHandler.java
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