Mark; Full logic is based on this stuff in OWB. Becuase TCK requires to use them. Therefore it is not a good idea to remove them completely. Therefore we have to find a solution to resolve this instead of changing logic.
My point is that, there is a working code and maybe this code is not production quality. But it works as a whole. You come in and saying that this not work in my production system and change code without looking what is the side effect of those updates (For example : creates another side effect that eats creational context etc.). It takes so much time to me to track your changes and where the other sides are effected. I am always supporter for the quality code, my point is not relating with your working code, about policies. If not ensure that committed code is really not effecting so much place, then no problem. I expect you understand my points --Gurkan ________________________________ From: Mark Struberg <[email protected]> To: [email protected] Sent: Tue, April 13, 2010 11:43:12 AM Subject: Re: svn commit: r933348 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: ApplicationScopedBeanIntereptorHandler.java DependentScopedBeanInterceptorHandler.java InterceptorHandler.java NormalScopedBeanInterceptorHand Yes Gurkan, I think I know _why_ you introduced it: because the TCK currently needs it. But I honestly think the TCK is wrong here. And this has also been confirmed by Marius and Pete already in the CDITCK-140. Of course, if we could find a way to resolve those cyclic references _without_ storing those informations inthe CreationalContext into the uppermost instances context, than I would really appreciate that. So I know that my solution is also not perfect. But imo it's the least evil one :) I hope that by discussing all the pros and cons we will find a bullet proof solution which satisfies all our needs! LieGrue, strub --- Gurkan Erdogdu <[email protected]> schrieb am Di, 13.4.2010: > Von: Gurkan Erdogdu <[email protected]> > Betreff: Re: svn commit: r933348 - in > /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: > ApplicationScopedBeanIntereptorHandler.java > DependentScopedBeanInterceptorHandler.java InterceptorHandler.java > NormalScopedBeanInterceptorHand > An: [email protected] > Datum: Dienstag, 13. April, 2010 10:25 Uhr > With Wrong assumtption I mean that : > Eating client CreationalContext > > BeanManager#getReference > > Then we have to find a solution to to this. > > > Gurkan > > > > > ________________________________ > From: Gurkan Erdogdu <[email protected]> > To: [email protected] > Sent: Tue, April 13, 2010 11:11:26 AM > Subject: Re: svn commit: r933348 - in > /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: > > ApplicationScopedBeanIntereptorHandler.java > DependentScopedBeanInterceptorHandler.java > InterceptorHandler.java NormalScopedBeanInterceptorHand > > Hi; > > CreationalContext is a thread safe, you have to provide > thread safety when running multiple threads and the most > important object in CreationalContext is objectInstance and > its thread safe. > > There is no problem I have seen. Also, your solution eats > client provided CreatinalContext because you create > CreationalContext instead of using client's CC. > > >>>But there is only ONE instance of > MailService#user! And this will got > hit by 10.000 requests from different users concurrently. > What is the problem here? Where is the location that > CreationalContext is updated by multiple threads and not > thread safe? > > So, I really do no understand why you insist on keeping > wrong code there via some assumptions. It will have some > thread safe problem of CreationalContext but it needs > updating not changing logic. > > --Gurkan > > > > > ________________________________ > From: Mark Struberg <[email protected]> > To: [email protected] > Sent: Tue, April 13, 2010 9:35:04 AM > Subject: Re: svn commit: r933348 - in > /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: > > ApplicationScopedBeanIntereptorHandler.java > DependentScopedBeanInterceptorHandler.java > InterceptorHandler.java NormalScopedBeanInterceptorHand > > Gurkan, it's really easy > > the method chain is > NormalScopedBeanInterceptorHandler#invoke > -> super.invoke > -> > NormalScopedBeanInterceptorHandler#aroundInvoke > > and all those functions pass their information NOT by > parameter (super.invoke does it partly) but directly access > NormalScopedBeanInterceptorHandler#creationalContext. > > So since the MethodHandler from an @ApplicationScoped or > @SessionScoped bean may easily get invoked in parallel from > multiple threads, they WILL override each other! > > There is nothing we need to proof with a unit test because > a) this is clear as water > b) such concurrency problems are really hard to proof in a > unit test (you can only 'likely' produce them because we > have no control over thread timing > > The Situation where this may easily occur (and it did > already pretty often on my 4-core workstation and in > production). > > I already posted an example: > > > @SessionScoped public class User [ > public String getEmail().. > } > > @ApplicationScoped class MailService { > private @Inject User usr; > > public void sendMail(String content) { > sendInternal(user.getEmail(), content); > } > } > > > Now imagine you use this MailService in a JSF backing bean > > @RequestScoped > class MailFormBean { > private @Inject MailService mailSvc; > private String content; > ... > > public send() { > mailSvc.sendMail(content); > } > } > > And now consider a webserver with 10.000 different users > clicking on the send button at the same time... > > ALL those MailFormBean instances will use the same instance > of MailService since this is @ApplicationScoped, right? > And the MailService#user is a proxy to the User, still ok? > But there is only ONE instance of MailService#user! And > this will got hit by 10.000 requests from different users > concurrently. > > That's why my change simply passes the CreationalContext > around as parameter. > > I will go on and revert the change back. > > LieGrue, > strub > > --- Gurkan Erdogdu <[email protected]> > schrieb am Di, 13.4.2010: > > > Von: Gurkan Erdogdu <[email protected]> > > Betreff: Re: svn commit: r933348 - in > /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: > > ApplicationScopedBeanIntereptorHandler.java > DependentScopedBeanInterceptorHandler.java > InterceptorHandler.java NormalScopedBeanInterceptorHand > > An: [email protected] > > Datum: Dienstag, 13. April, 2010 00:18 Uhr > > As long as the CreationalContext > > related with the bean is in the > > AbstractContext#CreationalContextMap, no thread can > > override it, just use > > old creational context. > > > > 2010/4/13 Gurkan Erdogdu <[email protected]> > > > > > >>>....But if in the meantime _another_ > > thread overwrites this > > > NormalScopedBeanInterceptorHan > > > >>>dler.creationalContext (by using the > same > > proxy instance), then we get > > > into troubles. > > > > > > Where is the location of this code, i.e > _another_ > > thread overwrites this > > > > NormalScopedBeanInterceptorHandler.creationalContext > > > > > > Thanks; > > > > > > --Gurkan > > > > > > > > > 2010/4/13 Mark Struberg <[email protected]> > > > > > > This makes no difference, really. > > >> The problem is that we store a > CreationalContext > > as a member in > > >> NormalScopedBeanInterceptorHandler. And > subsequent > > function calls rely on > > >> it. But if in the meantime _another_ thread > > overwrites this > > >> > > NormalScopedBeanInterceptorHandler.creationalContext > (by > > using the same > > >> proxy instance), then we get into troubles. > > >> > > >> Tbis is hard to debug and write tests for, > but > > this is really obvious from > > >> looking at the code. And I already had this > > problem in my apps. It's not > > >> funny to randomly pickup instances from > other > > sessions... > > >> > > >> LieGrue, > > >> strub > > >> > > >> --- Gurkan Erdogdu <[email protected]> > > schrieb am Mo, 12.4.2010: > > >> > > >> > Von: Gurkan Erdogdu <[email protected]> > > >> > Betreff: Re: svn commit: r933348 - in > > >> > > > /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept: > > >> ApplicationScopedBeanIntereptorHandler.java > > >> DependentScopedBeanInterceptorHandler.java > > InterceptorHandler.java > > >> NormalScopedBeanInterceptorHand > > >> > An: [email protected] > > >> > Datum: Montag, 12. April, 2010 22:29 > Uhr > > >> > Please look at AbstractContext, > > >> > creationalContextMap#putIfAbsent call > > >> > > > >> > 2010/4/12 Mark Struberg <[email protected]> > > >> > > > >> > > 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 > > >> > > > > >> > > --- [email protected] > > >> > <[email protected]> > > >> > schrieb am Mo, 12.4.2010: > > >> > > > > >> > > > Von: [email protected] > > >> > <[email protected]> > > >> > > > 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: [email protected] > > >> > > > 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 > > >> > > > > >> > > > >> > > > >> > > > >> > -- > > >> > Gurkan Erdogdu > > >> > http://gurkanerdogdu.blogspot.com > > >> > > > >> > > >> > > >> > > __________________________________________________ > > >> Do You Yahoo!? > > >> Sie sind Spam leid? Yahoo! Mail verfügt > über > > einen herausragenden Schutz > > >> gegen Massenmails. > > >> http://mail.yahoo.com > > >> > > > > > > > > > > > > -- > > > Gurkan Erdogdu > > > http://gurkanerdogdu.blogspot.com > > > > > > > > > > > -- > > Gurkan Erdogdu > > http://gurkanerdogdu.blogspot.com > > > > __________________________________________________ > Do You Yahoo!? > Sie sind Spam leid? Yahoo! Mail verfügt über einen > herausragenden Schutz gegen Massenmails. > http://mail.yahoo.com > > > > > ___________________________________________________________________ > Yahoo! Türkiye açıldı! http://yahoo.com.tr > İnternet üzerindeki en iyi içeriği Yahoo! Türkiye > sizlere sunuyor! > > > > ___________________________________________________________________ > Yahoo! Türkiye açıldı! http://yahoo.com.tr > İnternet üzerindeki en iyi içeriği Yahoo! Türkiye > sizlere sunuyor! __________________________________________________ Do You Yahoo!? Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen Massenmails. http://mail.yahoo.com ___________________________________________________________________ Yahoo! Türkiye açıldı! http://yahoo.com.tr İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!
