I know I'm jumping into the conversation a bit late, but I"m trying to catch
up and get my head in the game a bit.

I looked over the code, and read over Mark's example scenario earlier, which
I'll paste a snippet of:


"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."

I think the part I'm missing, is why it matters if there is only 1
MailService#User proxy, if every time that proxy is used we get the correct
instance of that User from the session scope?  That SessionScoped object
isn't stored in MailService's creational context is it (which I agree is
shared)?  I'm probably missing something obvious here.

Sincerely,

Joe



On Tue, Apr 13, 2010 at 5:14 AM, Gurkan Erdogdu <[email protected]>wrote:

> Anyway I have reverted to beginning, and create an issue. Because tinkering
> in somewhere must not destroy some other places as a side affect.
>
> At evening, we could discuss the current design of the OWB regarding CC and
> setup a plan how to handle this weird situation without not effecting other
> places. After that we can work on to update code if everybody understands
> the +/- of design.
>
>
> Thanks;
>
> --Gurkan
>
>
> ________________________________
> From: Mark Struberg <[email protected]>
> To: [email protected]
> Sent: Tue, April 13, 2010 12:00:24 PM
> Subject: Re: svn commit: r933348 - in
> /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept:
>  ApplicationScopedBeanIntereptorHandler.java
> DependentScopedBeanInterceptorHandler.java  InterceptorHandler.java
> NormalScopedBeanInterceptorHand
>
> Which point of my argumentation chain?
> Which sentence?
> Which section in the spec does get injured?
>
> 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:57 Uhr
> > Your points are not aligned with
> > specification. You have viewed a different perspective on
> > using CContexts from how TCK and OWB are implemented .
> >
> > :)
> >
> >
> >
> > ________________________________
> > From: Mark Struberg <[email protected]>
> > To: [email protected]
> > Sent: Tue, April 13, 2010 11:38:18 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
> >
> > Hoi!
> >
> > The problem is not that CreationalContext is not thread
> > safe, but that NormalScopedBeanInterceptorHandler is not
> > thread safe if you store the CreationalContext as member
> > variable :)
> >
> > And yes, I'm eating the provided CreationalContext for
> > NormalScoped bean proxies, because in my opinion it must not
> > get used. The argument:
> >
> > 1.) All contextual instances created within a
> > CreationalContext hierarchy chain will get stored _within_
> > that CreationalContext (for later being able to #destroy()
> > them)
> >
> > 2.) The CreationalContext will gets stored along with the
> > uppermost contextual instance into the Context (the one who
> > triggered Contextual#create(CreationalContext)), as an
> > example in the JSF ViewMap (ViewScopedContext)
> >
> > 3.) Only @Dependent objects must get stored in the same
> > CreationalContext hierarchy, because they need to get stored
> > on the same storage.
> >
> > 4.) injected @NormalScoped contextual instances must _NOT_
> > get added to the parents CreationalContext hierarchy chain,
> > because otherwise this would lead to storing them alongside
> > with the uppermost contextual instances CreationalContext.
> > So if a @ViewScoped BeanV gets an @ApplicationScoped BeanA
> > injected, a reference to BeanA would get stored in the
> > ViewMap. And since BeanA is not serializable (application
> > scoped beans most likely aren't) this did lead to the known
> > serialization problems we faced.
> >
> > Imo a @NormalScoped bean _always_ breaks the
> > CreationalContext hierarchy chain and _always_ gets it's own
> > one.
> >
> > I think the whole wording of the CreationalContext in the
> > spec is a bit obsolete and thus misleading now. This is from
> > an area where we didn't have the mandatory proxying
> > requisite in the spec - but never got cleared up properly.
> >
> > 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:11 Uhr
> > > 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!
> >
> > __________________________________________________
> > 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!
>
> __________________________________________________
> 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!
>

Reply via email to